好用沒用過C++做一個完整一點的東西了,今天開始希望靠我這點微薄的技術來完成這個小游戲。
我現在的水平應該算是菜鳥中的戰斗雞了,所以又很多東西在設計和技術方面肯定會有很大的缺陷,我做這個小游戲的目的單純為了證明一下我到底還是不是個程序員。。。
這個小游戲是我小時候玩過的一種棋盤類游戲,可能只在我們那邊才會知道,不過現在小孩估計已經很少玩了,搞不好要失傳了。。。這個游戲名叫馬虎吃小人。
大概介紹一下游戲,下面是游戲布局

方框代表老虎,三角形代表小人,每次只能向前后左右一個方向移動一個格,不能斜着走,小人先走。
老虎吃小人規則是老虎附近有小人且小人后面有空格,這樣老虎調到空格位置,然后就吃掉小人

游戲大概就是這樣,我的計划是先畫出棋盤和棋子,然后編寫下棋規則,雙人對戰完成后寫單人對戰。如果可能的話我會把它放到服務器上,這樣可以遠程登錄就可以玩了。希望都能完成吧。
嗯。。。做人不能好高騖遠,先從設計棋盤開始吧。
棋盤是5*5,做成固定大小的太死板了,就按照窗口大小設計吧。
棋盤上下左右距離邊框30像素
新建一個單文檔,名稱為TigerEatPeople,棋盤代碼如下
#define BOARD_LINE 5
#define EDG_DISTANCE 30
void CTigerEatPeopleView::DrawBoard(CDC* pDC) { CRect rect; GetClientRect(&rect); CPen pen1(PS_SOLID, 6, RGB(0, 0, 0)); pDC->SelectObject(&pen1); //求水平、垂直間隔 if (rect.bottom - rect.top < 60 || rect.right - rect.left < 60) { return; } int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平 int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直 //畫橫線 for (int i = 0; i < BOARD_LINE; i++) { pDC->MoveTo(rect.left + EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i); pDC->LineTo(rect.right - EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i); } //畫豎線 for (int i = 0; i < BOARD_LINE; i++) { pDC->MoveTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.top + EDG_DISTANCE); pDC->LineTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.bottom - EDG_DISTANCE); } }

一個很low的棋盤就做好了
然后是畫棋子,我的計划是寫一個父類
父類的成員變量:name,type,color,chose_color,location,height,weight,isChonse,isMove
父類的方法:Move,PaintPiece
暫時就這些吧,想到再加。
emmm感覺自己把自己坑了,分明幾分鍾就能開始畫棋子的。。。
設計完父類和子類,准備研究畫棋子了,可以分成2部分:
1.坐標轉換
把電腦客戶端像素坐標轉換為棋盤坐標,根據棋盤坐標畫棋子
2.設計棋子
根據棋盤坐標,設計棋子樣式。
void Tiger::PaintPiece(CDC *pDC, CRect rect)
{
Location t1, t2;//兩個老虎的位置
int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平
int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直
t1.x = rect.left + 30 + space_vertical;
t1.y = rect.top + 30 + space_horizontal;
t2.x = rect.left + 30 + space_vertical * 3;
t2.y = rect.top + 30 + space_horizontal;
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
CBrush brush(RGB(255,0,0));
CPen *oldpen = pDC->SelectObject(&pen);
CBrush *oldbrush = pDC->SelectObject(&brush);
pDC->Ellipse(t1.x - 20, t1.y - 20, t1.x + 20, t1.y + 20);
pDC->Ellipse(t2.x - 20, t2.y - 20, t2.x + 20, t2.y + 20);
pDC->SelectObject(oldpen);
pDC->SelectObject(oldbrush);
}
今天就先這樣吧,今天的代碼
鏈接:https://pan.baidu.com/s/1NVo6k64UhmTzVCXwHIbxOw 密碼:pasm
