课程设计说明书.docx
《课程设计说明书.docx》由会员分享,可在线阅读,更多相关《课程设计说明书.docx(11页珍藏版)》请在冰豆网上搜索。
课程设计说明书
课程设计说明书
设计题目:
黑白棋游戏
学院、系:
专业班级:
学生姓名:
指导教师:
成绩:
2008年6月28日
一.需求分析-----------------------------------------------------------
(1)
a)设计任务-----------------------------------------------------------
(1)
b)设计要求-----------------------------------------------------------
(1)
二.详细设计-----------------------------------------------------------
(1)
a)使用数据及结构定义-------------------------------------------
(1)
b)程序中的主要函数----------------------------------------------
(2)
c)函数调用及流程图----------------------------------------------(5)
三.调试分析-----------------------------------------------------------(8)
a)调试过程----------------------------------------------------------(8)
b)设计与实现的回顾和分析-------------------------------------(8)
c)设计的体会与感受----------------------------------------------(8)
四.用户手册-----------------------------------------------------------(9)
a)游戏说明----------------------------------------------------------(9)
b)操作说明------------------------------------------------------------(9)
五.测试结果----------------------------------------------------------(9)
六.附录---------------------------------------------------------------(11)
1)需求分析
设计任务:
制作一个五子棋游戏程序,能实现人与电脑一起下五子棋且能够公平地判断最后的输赢。
设计要求:
棋盘的大小为15×15,输入的方式为键盘输入,输出为黑屏输出,输入的范围为1到9,A到F;输出的形式为#(表示黑子棋)或0(表示白子棋)。
2)详细设计
使用数据及结构定义:
1.二维数组棋盘格子状态“m_gridState[][]”
存储大小:
size×size,既为15×15.
存储元素:
字符串类型
基本操作:
取数组元素的值
2.二维数组棋盘格子分数“m_gridMark[][]”
存储大小:
size×size,size默认该为15.
存储元素;int类型,记录每个格子的分数
基本操作:
取数组元素的值
3程序中所用到的一些类的定义:
classchessboard
{
public:
chessboard();
~chessboard();
voidoutputStates()const;功能:
根据棋盘状态输出棋盘,黑棋|白棋|空分别用'#'|'O'|''表示
voidupdateMarks(stateschessmanColor);功能:
更新棋盘各个格子的分数
voidrenew();功能:
重新初始成员数据的值
voidsetGridState(constpoint&pt,statesgridState);功能:
设置棋盘上的一个格子的状态,分blackwhiteblank
statesgetGridState(constpoint&pt);功能:
得到棋盘上的一各格子的状态,分blackwhiteblank
voidgetMaxGridMark(point&pt)const;功能:
得到棋盘分数最大的格子
statesm_gridState[size][size];棋盘各个格子的状态
private:
intm_gridMark[size][size];棋盘各个格子的分数*/
voidinitiGridMark();功能:
初始棋盘上各个格子的分数
voidupdateGridMark(constpoint&pt,stateschessmanColor);功能:
更新棋盘单个格子的分数
classgobangPlayer
{
public:
gobangPlayer();
~gobangPlayer();
voidsetMove(charx,chary);
voidgetMove(char&x,char&y);
voidautoMove();功能:
自动下棋
boolcheckMove();功能:
检查棋步的合法性.
voidsetChessmanColor(statescolor);功能:
设置棋子颜色
boolisWin();功能:
检查是否胜利
staticchessboardm_chessboard;
staticunsignedintcount;
pointm_Move;存储棋步
private:
statesm_chessmanColor;棋子颜色
};
程序中的主要函数:
voiddisplayInformation(void);
//函数名:
displayInformation
//功能:
打印信息
//参数:
void
//返回值:
void
boolisPlayAgain(void);
//函数名:
isPlayAgain
//功能:
询问是否继续游戏
//参数:
void
//返回值:
bool如果继续游戏,返回true,否则返回flase
chargetChoice(void);
//函数名:
getChoice
//功能:
决定先手还是后手
//参数:
void
//返回值:
char先下,返回'1';后下,返回'2'
voidinput(char*A,char*B,intmax);
//函数名:
input
//功能:
输入字符串
//参数:
char*A,用来储存输入的字符串
//char*B,将输入的字符串去掉空格,换行,存储在B中
//intmax,输入字符的最大长度
//返回值:
void
voidpause(void);
//函数名:
pause
//功能:
程序暂停,按回车继续执行
//参数:
void
//返回值:
void
voidnewline(intn=1);
//函数名:
newline
//功能:
输出换行
//参数:
intn,为换行的数目,默认为1
//返回值:
void
unsignedintrandSeed=time(0);
unsignedintrandom()
//函数名;random
//功能:
产生一个随机的短整形数
//参数:
void
//返回值:
void
函数调用及流程图:
3)调试分析
调试过程:
有关电脑的程序只考虑了当前的形势,不是成熟的策略,另外,每走一步棋,都要更新整个棋盘的格子分数,也是不合理的,由于只有和那步棋处在同一条直线上的格子才有可能改变分数.要是根据这个条件来改写并且改变程序的计分方式和扫描次数,程序的效率会成倍数增加。
此外程序中还有一些对策略的微小调整,例如边界问题;程序中没有悔棋等操作使得整个函数不完整。
设计与实现的回顾和分析:
函数先更新整个棋盘的格子的分数,找到分数最高的,来给电脑自动下棋,这是因为棋盘格子的底分,在相同的情况之下,越在棋盘的中间,底分越高,越处于有利的地位。
如此反复程序的效率大大地降低了。
函数updateGridMark()只考虑了当前的形势,不是一个很好的策略,此外每走一步棋,都要不断地更新整个棋盘在这个过程中耗费了一些时间,这是不应该的。
设计的体会与感受:
通过本次的黑白棋程序设计,我体会到设计出一个好的程序的艰辛,尤其是考虑程序的效率问题!
但这次实验不仅提高了我的动手能力,而且增强了我对程序设计的自信。
本次设计用到了很多面向对象以及c++的知识,对于学生进一步熟练掌握面向对象及c++的知识很有帮助同时也能提高学生的程序调试能力。
本次黑白棋程序的设计有些很多地方不是很完善,例如不能没有"悔棋","认输","求和"等操作。
由于我现在的程序设计能力有限,还无法实现这些操作,但我会继续努力,来弥补自己现在的不足。
总之,这次课程设计让我收益良多。
用户手册
五子棋个人赛说明
一游戏说明:
如何进入游戏
提示:
游戏是在win32控制台窗口下进行的
点击执行程序进入游戏界面,出现有如下的提示:
开始游戏:
选择1则执黑子用户先下,选择2则执白子电脑先下。
1,游戏者输入棋子坐标的时候如输入“98”(坐标数据之间可带空格),输入字母(大小写均可)坐标时情况类似。
2,游戏者输入棋子坐标超过棋盘范围(1~F)的时候,程序会输出提示,提醒用户输入出确要重新输入。
3,游戏者落子之后,棋盘会自动更新
4,游戏结束提示是否继续时,输入大写的Y或N(y或n),均退出游戏界面,按回车退出游戏。
例如选择1由用户执黑子先下,在用户执黑落子按回车表示游戏继续:
1,黑先,白后,之后相互顺序落子.
2,最先在棋盘横向,竖向,斜向形成连续的相同色五个棋子的一方为胜.
3,如棋盘下满仍分不出胜负,则判为平局。
4,比赛中不能选择"悔棋","认输","求和"等要求。
二操作说明
1,首先,进入比赛界面,在界面中若选择1则表示你执黑子先下,选择2则电脑执白子先下。
2,在你从键盘选择落子位置后,按回车输入坐标的过程中电脑已经下好棋如此继续直到分出最后的胜负.
3,分出胜负后,输入Y(或y)表示进行下一场比赛,输入N(或n)表示不在继续游戏了.
4,记住,比赛过程中不可以"求和","认输","悔棋"。
5,不玩游戏后可以直接关闭比赛界面.
6,点击右上角的"×",退出登录,关闭程序.
测试结果
选择下棋顺序
选择1表示游戏者执黑子先下,选择2表示电脑执白子后下。
这里选择1由用户先下(黑子),按回车表示继续。
譬如选择1会有如下显示:
游戏进行中,请你选择合适坐标输入:
错误时,例如输入123有下图:
正确时,例如输入98有下图:
然后屏幕会显示你输入的坐标,按回车继续:
电脑落子后,游戏者要继续如上继续输入坐标,直到比赛结束。
当游戏者胜利的时候将显示:
当电脑胜利的时候将显示:
是否继续游戏?
当游戏结束的时候,提示游戏者是否继续玩,继续输入“Y”,若不想继续玩游戏则输入“N”。
提示显示按回车推出游戏,请按回车推出游戏即可。
附录
源程序文件名清单:
chessboard.h棋盘类的定义
gobangplayer.h棋手类的定义
chess.cpp游戏的主控制程序
chessboard.cpp棋盘类的函数实现
gobangplayer.cpp棋手类的函数实现