寫在前邊:
本來上學期就已經完成這個大作業,臨近考試太忙。
而且老師最后要查重,就沒有把代碼放上來。
如需整個工程,移步http://download.csdn.net/detail/sdzuiaidanpianji/9452789
這篇其實應該在動手編程之前就先想好的。
一、需求分析
- 有兩種對弈模式:人人對弈模式和人機對弈模式
- 采用黑屏字符輸入輸出實現UI(楊老師要求!!)
- 采用打分機制實現五子棋AI
- 棋盤大小為15*15,棋盤將顯示相應的行列號(A-O)
- 棋子有兩種顏色黑和白,代表着對弈的雙方,棋子放在棋盤行列交叉處,黑棋先下
- 黑白任一方先連成5個棋子形成的直線(橫線、豎線、對角線),則該方贏對方輸
- 黑白雙方都沒連成5個棋子形成的直線,且棋盤已滿時,為和局
- 最后一步下的位置需明顯標記
最后完成的界面:
二、設計方案
因為是課程作業,所以將采用c++面向對象語言實現,開發工具采用VS2012 ultimate,操作系統環境win7旗艦版64位。
大致分為三個模塊,棋盤模塊、棋子模塊、旗手模塊(電腦和人)、裁判模塊、弈情展示模塊、游戲模塊。
棋子模塊主要負責記錄棋子的顏色,坐標等信息。
棋盤模塊主要負責記錄更新棋盤的狀態信息。
旗手模塊主要產生下步棋子,其中電腦旗手通過AI分析產生下步棋子,人旗手通過標准輸入獲得下步棋子。
裁判模塊主要負責記錄當前對弈模式(人人對弈模式或者人機對弈模式)、當前結果、當前旗手。
弈情展示模塊主要負責刷新棋盤,輸出提示信息如結果等。
游戲模塊主要完成游戲初始化,游戲開始,游戲結束等功能。
最后的類視圖:
三、系統實現
棋子類Chess
記錄棋子信息:顏色和位置。
主要變量:
int color;0為黑棋,1為白旗。
int row;int column;這里行列均為0-14。
主要方法:
int getColor();
void getPosition(int &row,int &coloumn);
棋盤類ChessPad
記錄棋盤狀態信息,那些位置沒有棋子,哪些位置有棋子,是什么顏色的棋子。
提供添加棋子方法和獲得棋盤信息方法。
主要變量:
int lastrow;int lastcolumn;記錄最后一步的位置,實現最后一步下的位置有特殊標記
int chesspadstate[15][15];0為空,沒有棋子;1為黑棋;2為白旗。
3為最后一步的黑棋;4為最后一步的白旗。
主要方法:
void addChess(Chess);
void getChessPadState(int chesspadstate[15][15]);
抽象類旗手Chesser
int color;String name;0為黑方;1為白方。慣例黑方先下
電腦旗手和人旗手的父類,有產生下步棋子的方法。
Chess giveNextChess(const int chesspadstate[15][15]);
電腦旗手類ComputerChesser
Chesser子類,應該有AI對象,根據傳入的棋盤狀態,計算出下步要下的棋子。
人旗手類PeopleChesser
Chesser子類,從標准輸入處獲得下步棋子。
裁判類Judge
主要變量:
int currentmode0為人機對弈模式,1為人人對弈模式
int currentchesser0為黑方,1為白方,默認黑方先下
int whoisblack;確定 誰是黑方,誰先下
主要方法:
int judgeResult(const int chesspadstate[15][15]);0為還未能判定勝負,1為黑方勝,2為白方勝,3為和棋
void setCurrentmode(int currentmode);
int nextChesser();
對弈情況顯示類ResultDisplay:
主要實現弈情輸出
主要方法:
void display(const int chesspadstate[15][15], String msg);刷新顯示
五子棋AI思路http://www.cnblogs.com/songdechiu/p/5768999.html