五子棋c课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一章:课程设计目的和要求 (2)
1.1数据结构课程设计的目的 (2)
1.2数据结构课程设计实现的要求 (2)
第二章:课程设计任务内容 (3)
2.1五子棋对弈系统 (3)
第三章:详细设计说明 (4)
3.1功能设计 (4)
3.2五子棋对弈系统流程图 (4)
3.3软件中实现各项功能的函数与程序代码 (5)
第四章:程序运行环境说明 (10)
4.1程序运行环境说明及出现的问题 (10)
4.2运行结果 (10)
第五章:课程设计心得与体会 (14)
附录 (15)
源程序: (16)
五子棋
第一章课程设计目的和要求
1.1数据结构课程设计的目的
进一步培养结构化程序设计的思想,加深对高级系统语言基本语言要素和控制结构的理解,针对数据结构中的重点和难点内容进
行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
此课程设计着眼于知识的运用,把平常学的知识运用到课程实践中来,本身就是考察我们知识运用能力。要求熟悉运用一些编程软件,对我们所学的理论知识进一步的深化。
1.2数据结构课程设计实现的要求
使用C++语言编写一个基于控制台的简单程序,使学生掌握简单的程序设计技巧。同时设计一个简单的五子棋对弈系统,可以实现五子棋的基本功能,是一款娱乐用的小型程序。
第二章课程设计任务内容
2.1五子棋对弈系统
设计一个五子棋系统程序,实现对五子棋进行运行。
基本要求:五子棋是有两个人在一盘棋上进行对抗的竞技活动。在对局开始时,先由用户选择哪方开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围交叉点上落子,如此轮流落子,知道某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方程就算获胜。
此时算法结束,当有任何一方退时出,都可在算法中实现。
第三章详细设计说明
3.1功能设计
(1)由两个玩家分别下棋,当某一玩家五子相连,则赢。
(2)界面要求:初始状态——显示棋盘,并显示两个玩家的操作键及初始玩家名称;
游戏进行状态——动态显示棋盘,不同玩家的棋子用不同符号显示,屏幕
上显示当前玩家号,结束时显示赢家名称。
3.2五子棋对弈系统流程图
3.3软件中实现各项功能的函数与程序代码
主要函数、结构体和链表
Inta;//纪录坐标位置
Intb;//纪录坐标位置
CharachBoard[i][j],//用于在【a】【b】处落子chSort;;//棋子的类别
IntnWin////赢棋的次数
类的使用:
classCGobang
{private:
charchSort;//棋子的类别
intnWin;//赢棋的次数
intnLose;//输棋的次数
staticintnDraw;//平局次数
public:
staticcharachBoard[19][19];//棋盘
staticintnSize;//棋盘的尺寸nSize*nSize CGobang(charchsort)//构造函数,决定一方棋子的类别{
chSort=chsort;
nWin=nLose=nDraw=0;
}
friendvoidhuiqi();//悔棋
staticvoidsavefile();//将棋盘保存至文件
staticvoidreadBoard();//从文件中读入棋盘
voidcontinute();//接着上次的游戏玩
voidPlayTurn(void);//走一步棋
intJudge();//判断是否连成五子,是则返回1
voidWin(void);//赢棋
voidLose(void);//输棋
staticvoidDraw(void);//平局
voidPrintInfo(void);//打印总体情况
staticvoidPrintBoard(void);//输出棋盘
staticintGetFull(void);//判断棋盘是否一满
staticvoidInitialBoard(void);//初始化棋盘
};}
本次程序设计主要设计了五个模块
1.绘制棋盘模块
当游戏初始化时,和每当落子消息触发时,都需要对棋盘进行重绘。这里用特殊符号“o”“@”分别来描绘白子、黑子。这个函数主要完成了以下工作:
●装载棋盘二位数组并进行绘制。
●根据棋盘数据绘制棋子。
●绘制最后落子指示规矩。
2.键盘操作控制模块
此模块主要用于处理与用户的交互过程。即完成落子判断过程。
此模块主要完成以下工作:
●判断是否在棋盘内按落子键,和移动是否超出棋盘范围。
●判断落子点是否已有棋子。
3.判断胜负模块
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图:
图3-5判断胜负方向
这个算法是本系统里的nWin成员函数。需要它接受一个棋子颜色的参数,然后返回一个布尔值,这个值指示是否胜利。
1).横向判断流程图“——”
●将achBoard[N][N]中每一个落子位都置为无子状态(0)。
●默认的先手顺序是黑子先手,置player=1。
5.游戏结束模块
这一模块主要用于释放内存,用输出流语句输出结束信息,并控制循环退出程序。