在我學習遊戲開發的過程中,遇到的最大的麻煩就是不知道乙個遊戲的完整實現過程,**倒是其次。
這裡,總結一下我做過的遊戲,主要是梳理整每個步驟。
先看下最終的效果
第1步:
準備(黑棋、白棋各一張)
1. 五子棋位圖
2. 游標位圖
3. 圖示位圖
第2步:
初始化介面和函式,包括
0.設定視窗大小、樣式
在函式bool cmainframe::precreatewindow(createstruct& cs)中
新增如下**
cs.dwexstyle |= ws_ex_topmost;
cs.style = ws_sysmenu | ws_minimizebox ;
cs.cx=610;
cs.cy=680;
還可以在
oncreate裡設定圖示(使用setclasslang函式),左上角可愛的熊貓如是誕生^_^
1.在c**view建構函式中載入五子棋位圖、游標位圖、圖示位圖,初始化棋盤,設定白棋/黑棋先行等
//載入五子棋位圖
m_bmblaak.loadbitmap(idb_bitmap2);
m_bmwhite.loadbitmap(idb_bitmap1);
//載入游標位圖
//載入圖示位圖
//初始化棋盤為空
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
gomoku[i][j]=0;
//當前狀態: 白棋下/人人對戰模式
iswhite=1;
iscomputer=0;
whitepoint.x=whitepoint.y=-1;
blackpoint.x=blackpoint.y=-1;
2.在ondraw()函式中畫介面
畫棋盤背景
cbrush brush;
brush.createsolidbrush(rgb(192,192,192));
crect rect(0,0,700,700);
pdc->fillrect(rect,&brush);
畫棋盤線
cpen pen;
cpen *oldpen;
pen.createpen(ps_solid,1,rgb(255,0,0));
oldpen=pdc->selectobject(&pen);
for(i=0;i<19;i++)
重畫時顯示棋子
cdc dc;
if(false==dc.createcompatibledc(pdc))
afxmessagebox("can't create dc");
for(i=0;i<19;i++)
for(j=0;j<19;j++)
if(1==gomoku[i][j])
else if(-1==gomoku[i][j])
3.設定滑鼠
第2步結束之後,滑鼠放在棋盤上仍然是指標狀態,要把它變為下圖
所示的棋子形狀。(使用onsetcursor
函式設定棋子的圖示、狀態列的圖示和提示文字)
}第3步:
實現遊戲操作
現在開始把棋子放在棋盤上
使用onlbuttonup函式,在函式內除了把棋子放在棋盤上,還要判斷遊戲是否結束。如果未結束,要切換棋子狀態(下完黑棋下白棋),下棋的時候,要判斷原來位置是否有棋子,如果有,就不能再放了。
(關於如何把棋子放在棋盤上 和 如何判斷是否結束,**比較多,就不貼出來了。。。)
第4步附加功能
1. 開啟、儲存遊戲
主要涉及cfiledialog、cfile、cstdiofile、carchive的使用。可以在工具欄上面建立相應的圖示來對應相應的功能
2. 重新開始、人人對戰、人機對戰、悔棋操作
常見的悔棋操作一般可以一直回到第一步,這裡為了簡單起見,只設定回一步棋。
**位址
vc++五子棋
五子棋Pro 最好玩的五子棋遊戲
五子棋是一種兩人對弈的純策略型漢族棋類益智遊戲,棋具與圍棋通用,由中國古代漢族人發明,起源於中國上古時代的傳統黑白棋種之一。主要流行於華人和漢字文化圈的國家以及歐美一些地區。容易上手,老少皆宜,而且趣味橫生,引人入勝 不僅能增強思維能力,提高智力,而且富含哲理,有助於修身養性。1 多種遊戲模式 1 ...
五子棋的小遊戲
感想 終於寫出人生中第乙個小遊戲來了 include include include include using namespace std const int x 21 棋盤行數 const int y 21 棋盤列數 char p x y 定義棋盤 int m 0 定義臨時點,儲存輸入座標 in...
遊戲 五子棋 與AI
然後ai下棋時,把每個能下的地方都下一次,求個己方與對方的期望值,用個微妙的比較方法 既要考慮到己方的期望,也要考慮到對方的情況 找出期望值最好的那個點,就下那裡了。然後不一會兒我就寫出了乙個 一代 ai,不過我發現有問題,這一代中函式 val 中還沒有那個 y 導致雙方的優先度基本相當,後來我就想...