您的位置:首页 > 编程语言 > C语言/C++

c++大作业五子棋-需求分析与设计方案

2015-11-10 15:49 197 查看

写在前边:

  本来上学期就已经完成这个大作业,临近考试太忙。

  而且老师最后要查重,就没有把代码放上来。

  如需整个工程,移步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的思路
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: