博弈树实现3字棋程序设计报告_第1页
博弈树实现3字棋程序设计报告_第2页
博弈树实现3字棋程序设计报告_第3页
博弈树实现3字棋程序设计报告_第4页
博弈树实现3字棋程序设计报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录摘 要3第一部分 设计总概3一设计目的3二设计要求及内容4三设计方法4四系统分析与设计4一 . 概要设计4二. 详细设计4第二部分 数据结构设计5一:主系统的函数5二:头文件5第三部分 功能实现与程序调试5一:程序实现的功能流程图6二:程序实现源代码61. 头文件62.cpp文件代码9三 程序实现截图101.界面102. 进入游戏开始下棋103.判断棋局胜负:124:结束游戏:12第四部分 完成设计13一、 实验总结13摘 要用所学的语言,设计简单的一字棋游戏。关键字:博弈,启发式搜索 第一部分 设计总概一设计目的 理解和掌握博弈树的启发式搜索过程,能够用选定的编程语言实现简单的博弈游戏。

2、二设计要求及内容 设计一个不少于3行3列的棋盘,自己给出估价函数,采用极大极小搜索方法。采用人机对弈的方式,一方走步够等待对方,对弈过程的棋局变化在屏幕上显示。三设计方法 采用c语言编写程序实现 四系统分析与设计一 . 概要设计 A:进入主界面 主界面包括导语及游戏操作步骤及其规则 B:进入游戏,开始下棋 C:判断输赢,结束游戏 D:判断是否重新开始游戏 是则返回B步骤 否则结束游戏 二. 详细设计 1.进入vs2010,选择win32项目,新建程序 2 界面设计 利用所学的c语言知识,设计一个简单的棋盘游戏界面3. 函数设计 利用所学的算法,编写棋盘分析函数第二部分 数据结构设计一:主系统的

3、函数窗口创建函数,消息响应函数皆放在主函数cpp里面 二:头文件 存放具体的操作步骤及其函数 第三部分 功能实现与程序调试 开始 主界面 判断输赢 棋盘 开始下棋分出胜负 平局 结束,是否重新开始游戏 结束是否否是一:程序实现的功能流程图 二:程序实现源代码1. 头文件 A:定义类:#include #include using namespace std;class CGobang /棋子类private:char chSort; /棋子的类别int nWin; /赢棋的次数int nLose; /输棋的次数static int nDraw; /平局次数static char achBoar

4、d33; /棋盘static int nSize; /棋盘的尺寸 nSize X nSizepublic:CGobang(char chsort) /构造函数,决定一方棋子的类别chSort=chsort;nWin=nLose=nDraw=0;void PlayTurn(void); /走1步棋int Judge(); /判断是否连成一线,是则返回1,否则返回0void Win(void); /赢棋void Lose(void); /输棋static void Draw(void); /平局void PrintInfo(void); /输出总体情况static void PrintBoard(

5、void); /输出棋盘static int GetFull(void); /判断棋盘是否已布满棋子static void InitialBoard(void); /初始化棋盘;B:操作函数: #include lei.h#includechar CGobang:achBoard33;int CGobang:nSize = 3;int CGobang:nDraw = 0;void CGobang:Draw()cout nntt平局!nn;nDraw+;void CGobang:InitialBoard() /初始化棋盘for(int i=0;inSize;i+)for(int j=0;jnSi

6、ze;j+)achBoardij= ;void CGobang:PrintBoard() /输出棋盘system(CLS);cout endl;cout 1 2 3 endl;cout 1 achBoard00 | achBoard01 | achBoard02 endl;cout -|-|- endl;cout 2 achBoard10 | achBoard11 | achBoard12 endl;cout -|-|- endl;cout 3 achBoard20 | achBoard21 | achBoard22 endl;cout endl;cout endl;int CGobang:G

7、etFull() /判断棋盘是否布满棋子,若是返回1for(int i=0;inSize;i+)for(int j=0;jnSize;j+)if(achBoardij= )return 0;return 1;void CGobang:Win() /赢棋CGobang:PrintBoard(); /输出棋盘cout nnttchSort方获胜!nn;nWin+;void CGobang:Lose() /输棋nLose+;void CGobang:PlayTurn(void) /走1步棋int nRow,nCol;cout 现在该 chSort nRow nCol; /输入坐标if(nRownSi

8、ze | nColnSize|nRow1|nCol1) /判断坐标越界cout 输入的坐标越界,x与y的范围应小于等于nSize并且大于0,请重新输入n;else if(achBoardnRow-1nCol-1!= ) /判断坐标合理cout 棋盘(nRow ,nCol )处已有棋子,请重新输入n;elseachBoardnRow-1nCol-1=chSort; /在坐标处放上棋子break; /退出循环while(1);int CGobang:Judge() /判断是否棋子连成一线,若是返回1/以下是各种可能连成一线的情况if(achBoard00=chSort & achBoard11=c

9、hSort & achBoard22=chSort)return 1;else if(achBoard20=chSort & achBoard11=chSort & achBoard02=chSort)return 1;else if(achBoard00=chSort & achBoard10=chSort & achBoard20=chSort)return 1;else if(achBoard01=chSort & achBoard11=chSort & achBoard21=chSort)return 1;else if(achBoard02=chSort & achBoard12=c

10、hSort & achBoard22=chSort)return 1;else if(achBoard00=chSort & achBoard01=chSort & achBoard02=chSort)return 1;else if(achBoard10=chSort & achBoard11=chSort & achBoard12=chSort)return 1;else if(achBoard20=chSort & achBoard21=chSort & achBoard22=chSort)return 1;elsereturn 0; /没有连成一线则返回0void CGobang:Pr

11、intInfo(void) /打印总体情况cout Side chSort方共计赢 nWin 局,输 nLose 局,平 nDraw 局。endl;void PrintRule(void) /打印规则cout nt*欢迎使用三子棋游戏!* endl endl;cout nt* endl ;cout t* 游戏规则: * endl;cout t* a.每1步输入要下棋的格子的x,y坐标,按Enter键 *n;cout t* b.有1方首先3个棋子连成一线即判获胜 *n;cout t* c.当棋子布满棋盘但仍无获胜方即为平局 *n;cout t* d.X方先行 *n;cout t* endl ;c

12、out nntt请按任意键开始下棋!nn;int JudgePlay(CGobang & SideX,CGobang & SideO) /每下1步要进行输赢的判断,有结果则返回1if(SideX.Judge() /X方获胜SideX.Win();SideO.Lose();return 1;else if(SideO.Judge() /O方获胜SideO.Win();SideX.Lose();return 1;elsereturn 0;void Play(CGobang & SideX,CGobang & SideO) /开始一局游戏while(1)CGobang:PrintBoard(); /

13、输出棋盘SideX.PlayTurn(); /X方下棋if(JudgePlay(SideX,SideO) /判断输赢break;if(CGobang:GetFull() /判断是否平局CGobang:Draw();break;CGobang:PrintBoard(); /输出棋盘SideO.PlayTurn(); /O方下棋if(JudgePlay(SideX,SideO) /判断输赢break;if(CGobang:GetFull() /判断是否平局CGobang:Draw();break;2.cpp文件代码#include #include #include juti.hint main(

14、void)system(color 88);CGobang SideX(X),SideO(O); /定义两个棋子类对象,分别代表X方与O方PrintRule();cin.get();string strChoice;doCGobang:InitialBoard(); /初始化棋盘Play(SideX,SideO); /开始下一局cout strChoice;while(strChoice = Y | strChoice = y);SideX.PrintInfo();SideO.PrintInfo();cout nnt欢迎再次使用三子连珠游戏! endl endl;return 0;3 程序实现截图1.界面2. 进入游戏开始下棋 输入坐标开始棋局判断输入坐标是否合理:3.判断棋局胜负:4:结束游戏: 第四部分 完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论