1、 介面框架設計
整個遊戲的介面是建立的單文件的基礎上。
很多小遊戲不是建立在對話方塊的基礎上,而是在單文件或是自己建立視窗的基礎上。
因為它們自動提供了選單欄和狀態列,方便進行遊戲設定和控制項。
(1)函式lresult cmainframe::defwindowproc(uint message, wparam wparam, lparam lparam)
進行處理的,如最大化、最小化、滑鼠左鍵按下
(2) cwuziqiview類的響應訊息。
通過它的有如:左鍵單擊、右鍵單擊、右鍵雙擊
繪製介面的地方是在
void cwuziqiview::ondraw(cdc* pdc)
這裡不做介紹,大家可以自行去看.
2、 邏輯類設計
由於五子棋遊戲中的角色不多只有白棋子、黑棋子: chess
再加上棋盤: overall
主要的演算法集中在onlbuttondown函式裡,下面貼出此段**:
void cwuziqiview::onlbuttondown(uint nflags, cpoint point)
// 判斷當前的位置是不是五子長連
int win = all.winchanglian(x, y);
if(win == 1) // 剛好有5個棋子顏色一樣,則黑棋勝
if(win == 0 && whohasjinshou==1) // 少於5個棋子顏色一樣,且自己是禁手了,黑棋輸
// 雙三且是禁手
if(all.shuangsan(x,y) == 1&& whohasjinshou == 1)
以下是遊戲的規則:
//以下是規則判斷,雙三,雙四都使禁手
//活三定義:再下一步成為活四
//活四定義:有多於一種的方法成為五顆
//衝四定義:只有一步能夠成為五顆
//同時形成兩個以上的活三,衝四,或者長連就是禁手
它們對應的函式如下:
1、判斷是不是雙衝四
// 判斷是不是雙衝四
// 衝四定義:只有一步能夠成為五顆
// 返回值:
// 1 是雙衝四
// 0 不是雙衝四
int overall::shuangsi(int x, int y)
// 清除臨時填充的棋子
allqipan[ncountx][y] = 0;
} // 橫向判斷,向左
for(ncountx=x + 1; allqipan[ncountx][y] == ncolor && ncountx<=17; ncountx++);
if(ncountx <= 17 && allqipan[ncountx][y] == 0)
allqipan[ncountx][y]=0;
} recordx = recordy = -50;
/*******************************===豎的方向***********************************===*/
// 豎的,向下
for(ncounty = y; allqipan[x][ncounty] == ncolor && ncounty >= 0; ncounty--);
if(ncounty >= 0 && allqipan[x][ncounty] == 0)
allqipan[x][ncounty]=0;
} // 豎的,向上
for(ncounty = y+1; allqipan[x][ncounty] == ncolor&&ncounty<=17;ncounty++);
if(ncounty <= 17 && allqipan[x][ncounty] == 0)
}allqipan[x][ncounty] = 0;
} recordx=recordy=-50;
/*******************************===左右的方向***********************************===*/
// 左右方向,先左
for(ncountx=x, ncounty=y; allqipan[ncountx][ncounty]==ncolor && ncountx >= 0 && ncounty>=0; ncountx--,ncounty--);
if(ncounty>=0&&ncountx>=0&&allqipan[ncountx][ncounty]==0)
allqipan[ncountx][ncounty]=0;
} // 左右方向,再右
for(ncountx=x+1,ncounty=y+1;allqipan[ncountx][ncounty]==ncolor&&ncountx<=17&&ncounty<=17;ncountx++,ncounty++);
if(ncounty<=17&&ncountx<=17&&allqipan[ncountx][ncounty]==0)
}allqipan[ncountx][ncounty]=0;
} recordx=recordy=-50;
/*******************************===右左的方向***********************************===*/
// 右左
for(ncountx=x,ncounty=y;allqipan[ncountx][ncounty]==ncolor&&ncountx>=0&&ncounty<=17;ncountx--,ncounty++);
if(ncounty>=0&&ncountx<=17&&allqipan[ncountx][ncounty]==0)
allqipan[ncountx][ncounty]=0;
} for(ncountx=x+1,ncounty=y-1;allqipan[ncountx][ncounty]==ncolor&&ncountx<=17&&ncounty<=17;ncountx++,ncounty--);
if(ncounty<=17&&ncountx>=0&&allqipan[ncountx][ncounty]==0)
}allqipan[ncountx][ncounty]=0;
} /*******************************===結果***********************************===*/
// 有兩個或兩個以上可能產生雙四
if(ncount >= 2)
return 1;
else
return 0;
}
2、 判斷當前的位置是不是五子長連
// 判斷當前的位置是不是五子長連
int overall::winchanglian(int x, int y)
3、判斷是不是雙三 五子棋核心演算法
五子棋是一種受大眾廣泛喜愛的遊戲,其規則簡單,變化多端,非常富有趣味性和消遣性。這裡設計和實現了乙個人機對下的五子棋程式,採用了博弈樹的方法,應用了剪枝和最大最小樹原理進行搜尋發現最好的下子位置。介紹五子棋程式的資料結構 評分規則 勝負判斷方法和搜尋演算法過程。一 相關的資料結構 關於盤面情況的表示...
五子棋的核心演算法
五子棋是一種受大眾廣泛喜愛的遊戲,其規則簡單,變化多端,非常富有趣味性和消遣性。這裡設計和實現了乙個人機對下的五子棋程式,採用了博弈樹的方法,應用了剪枝和最大最小樹原理進行搜尋發現最好的下子位置。介紹五子棋程式的資料結構 評分規則 勝負判斷方法和搜尋演算法過程。一 相關的資料結構 關於盤面情況的表示...
五子棋的核心演算法
五子棋是一種受大眾廣泛喜愛的遊戲,其規則簡單,變化多端,非常富有趣味性和消遣性。這裡設計和實現了乙個人機對下的五子棋程式,採用了博弈樹的方法,應用了剪枝和最大最小樹原理進行搜尋發現最好的下子位置。介紹五子棋程式的資料結構 評分規則 勝負判斷方法和搜尋演算法過程。一 相關的資料結構 關於盤面情況的表示...