C++ MFC棋牌類小游戲day1


好用沒用過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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM