c++大作業五子棋-需求分析與設計方案


寫在前邊:

  本來上學期就已經完成這個大作業,臨近考試太忙。

  而且老師最后要查重,就沒有把代碼放上來。

  如需整個工程,移步http://download.csdn.net/detail/sdzuiaidanpianji/9452789

  這篇其實應該在動手編程之前就先想好的。

一、需求分析

  1. 有兩種對弈模式:人人對弈模式和人機對弈模式
  2. 采用黑屏字符輸入輸出實現UI(楊老師要求!!)
  3. 采用打分機制實現五子棋AI
  4. 棋盤大小為15*15,棋盤將顯示相應的行列號(A-O)
  5. 棋子有兩種顏色黑和白,代表着對弈的雙方,棋子放在棋盤行列交叉處,黑棋先下
  6. 黑白任一方先連成5個棋子形成的直線(橫線、豎線、對角線),則該方贏對方輸
  7. 黑白雙方都沒連成5個棋子形成的直線,且棋盤已滿時,為和局
  8. 最后一步下的位置需明顯標記

最后完成的界面:

二、設計方案

因為是課程作業,所以將采用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

  


免責聲明!

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



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