博弈树实现3字棋程序设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目录摘要.......................................................................................................2第一部分设计总概................................................................................2一.设计目的.....................................................................................2二.设计要求及内容........................................................................3三.设计方法.....................................................................................3四.系统分析与设计........................................................................3一.概要设计...........................................................................3二.详细设计.............................................................................3第二部分数据结构设计........................................................................4一:主系统的函数............................................................................4二:头文件.........................................................................................4第三部分功能实现与程序调试............................................................4一:程序实现的功能流程图............................................................5二:程序实现源代码........................................................................51.头文件...................................................................................52.cpp文件代码...........................................................................8三.程序实现截图..........................................................................91.界面..........................................................................................92.进入游戏开始下棋...............................................................93.判断棋局胜负:...................................................................114:结束游戏:........................................................................11第四部分完成设计..............................................................................12一、实验总结.................................................................................12摘要用所学的语言,设计简单的一字棋游戏。关键字:博弈,启发式搜索第一部分设计总概一.设计目的理解和掌握博弈树的启发式搜索过程,能够用选定的编程语言实现简单的博弈游戏。二.设计要求及内容设计一个不少于3行3列的棋盘,自己给出估价函数,采用极大极小搜索方法。采用人机对弈的方式,一方走步够等待对方,对弈过程的棋局变化在屏幕上显示。三.设计方法采用c语言编写程序实现四.系统分析与设计一.概要设计A:进入主界面主界面包括导语及游戏操作步骤及其规则B:进入游戏,开始下棋C:判断输赢,结束游戏D:判断是否重新开始游戏是则返回B步骤否则结束游戏二.详细设计1.进入vs2010,选择win32项目,新建程序2.界面设计利用所学的c语言知识,设计一个简单的棋盘游戏界面3.函数设计利用所学的算法,编写棋盘分析函数第二部分数据结构设计一:主系统的函数窗口创建函数,消息响应函数皆放在主函数cpp里面二:头文件存放具体的操作步骤及其函数第三部分功能实现与程序调试一:程序实现的功能流程图二:程序实现源代码1.头文件A:定义类:#includeiostream#includestringusingnamespacestd;classCGobang//棋子类{private:charchSort;//棋子的类别intnWin;//赢棋的次数intnLose;//输棋的次数staticintnDraw;//平局次数staticcharachBoard[3][3];//棋盘staticintnSize;//棋盘的尺寸nSizeX开始主界面判断输赢棋盘开始下棋分出胜负平局结束,是否重新开始游戏结束是否否是nSizepublic:CGobang(charchsort)//构造函数,决定一方棋子的类别{chSort=chsort;nWin=nLose=nDraw=0;}voidPlayTurn(void);//走1步棋intJudge();//判断是否连成一线,是则返回1,否则返回0voidWin(void);//赢棋voidLose(void);//输棋staticvoidDraw(void);//平局voidPrintInfo(void);//输出总体情况staticvoidPrintBoard(void);//输出棋盘staticintGetFull(void);//判断棋盘是否已布满棋子staticvoidInitialBoard(void);//初始化棋盘};B:操作函数:#includelei.h#includemath.hcharCGobang::achBoard[3][3];intCGobang::nSize=3;intCGobang::nDraw=0;voidCGobang::Draw(){cout\n\n\t\t平局!\n\n;nDraw++;}voidCGobang::InitialBoard()//初始化棋盘{for(inti=0;inSize;i++)for(intj=0;jnSize;j++)achBoard[i][j]='';}voidCGobang::PrintBoard()//输出棋盘{system(CLS);coutendl;cout123endl;cout1achBoard[0][0]|achBoard[0][1]|achBoard[0][2]endl;cout---|---|---endl;cout2achBoard[1][0]|achBoard[1][1]|achBoard[1][2]endl;cout---|---|---endl;cout3achBoard[2][0]|achBoard[2][1]|achBoard[2][2]endl;coutendl;coutendl;}intCGobang::GetFull()//判断棋盘是否布满棋子,若是返回1{for(inti=0;inSize;i++)for(intj=0;jnSize;j++)if(achBoard[i][j]=='')return0;return1;}voidCGobang::Win()//赢棋{CGobang::PrintBoard();//输出棋盘cout\n\n\t\tchSort方获胜!\n\n;nWin++;}voidCGobang::Lose()//输棋{nLose++;}voidCGobang::PlayTurn(void)//走1步棋{intnRow,nCol;cout现在该chSort方下棋,请输入棋盘坐标(x,y):;do{cinnRownCol;//输入坐标if(nRownSize||nColnSize||nRow1||nCol1)//判断坐标越界cout输入的坐标越界,x与y的范围应小于等于nSize并且大于0,请重新输入\n;elseif(achBoard[nRow-1][nCol-1]!='')//判断坐标合理cout棋盘(nRow,nCol)处已有棋子,请重新输入\n;else{achBoard[nRow-1][nCol-1]=chSort;//在坐标处放上棋子break;//退出循环}}while(1);}intCGobang::Judge()//判断是否棋子连成一线,若是返回1{//以下是各种可能连成一线的情况if(achBoard[0][0]==chSort&&achBoard[1][1]==chSort&&achBoard[2][2]==chSort)return1;elseif(achBoard[2][0]==chSort&&achBoard[1][1]==chSort&&achBoard[0][2]==chSort)return1;elseif(achBoard[0][0]==chSort&&achBoard[1][0]==chSort&&achBoard[2][0]==chSort)return1;elseif(achBoard[0][1]==chSort&&achBoard[1][1]==chSort&&achBoard[2][1]==chSort)return1;elseif(achBoard[0][2]==chSort&&achBoard[1][2]==chSort&&achBoard[2][2]==chSort)return1;elseif(achBoard[0][0]==chSort&&achBoard[0][1]==chSort&&achBoard[0][2]==chSort)return1;elseif(achBoard[1][0]==chSort&&achBoard[1][1]==chSort&&achBoard[1][2]==chSort)return1;elseif(achBoard[2][0]==chSort&&achBoard[2][1]==chSort&&achBoard[2][2]==chSort)return1;elsereturn0;//没有连成一线则返回0}voidCGobang::PrintInfo(

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功