版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-3"\h\u27665摘要 34731第一部分设计总概 329677一.设计目的 331280二.设计要求及内容 412084三.设计方法 419572四.系统分析与设计 428104一.概要设计 416258二.详细设计 41636第二部分数据结构设计 59727一:主系统的函数 512569二:头文件 515867第三部分功能实现与程序调试 52289一:程序实现的功能流程图 622361二:程序实现源代码 6262811.头文件 6224932.cpp文件代码 91348三.程序实现截图 1078681.界面 10161932.进入游戏开始下棋 10248593.判断棋局胜负: 12211844:结束游戏: 125095第四部分完成设计 1331519一、实验总结 13摘要用所学的语言,设计简单的一字棋游戏。关键字:博弈,启发式搜索第一部分设计总概一.设计目的理解和掌握博弈树的启发式搜索过程,能够用选定的编程语言实现简单的博弈游戏。二.设计要求及内容设计一个不少于3行3列的棋盘,自己给出估价函数,采用极大极小搜索方法。采用人机对弈的方式,一方走步够等待对方,对弈过程的棋局变化在屏幕上显示。三.设计方法采用c语言编写程序实现四.系统分析与设计一.概要设计A:进入主界面
主界面包括导语及游戏操作步骤及其规则B:进入游戏,开始下棋C:判断输赢,结束游戏D:判断是否重新开始游戏是则返回B步骤否则结束游戏二.详细设计1.进入vs2010,选择win32项目,新建程序界面设计利用所学的c语言知识,设计一个简单的棋盘游戏界面函数设计利用所学的算法,编写棋盘分析函数第二部分数据结构设计一:主系统的函数窗口创建函数,消息响应函数皆放在主函数cpp里面二:头文件存放具体的操作步骤及其函数第三部分功能实现与程序调试开始主界面判断输赢棋盘开始下棋分出胜负平局结束,是否重新开始游戏开始主界面判断输赢棋盘开始下棋分出胜负平局结束,是否重新开始游戏结束是否否是二:程序实现源代码头文件A:定义类:#include<iostream>#include<string>usingnamespacestd;classCGobang//棋子类{private:charchSort;//棋子的类别intnWin;//赢棋的次数intnLose;//输棋的次数staticintnDraw;//平局次数staticcharachBoard[3][3];//棋盘staticintnSize;//棋盘的尺寸nSizeXnSizepublic: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:操作函数:#include"lei.h"#include<math.h>charCGobang::achBoard[3][3];intCGobang::nSize=3;intCGobang::nDraw=0;voidCGobang::Draw(){cout<<"\n\n\t\t平局!\n\n";nDraw++;}voidCGobang::InitialBoard()//初始化棋盘{ for(inti=0;i<nSize;i++) for(intj=0;j<nSize;j++) achBoard[i][j]='';}voidCGobang::PrintBoard()//输出棋盘{ system("CLS"); cout<<endl; cout<<"123"<<endl; cout<<"1"<<achBoard[0][0]<<"|"<<achBoard[0][1]<<"|"<<achBoard[0][2]<<endl; cout<<"||"<<endl; cout<<"2"<<achBoard[1][0]<<"|"<<achBoard[1][1]<<"|"<<achBoard[1][2]<<endl; cout<<"||"<<endl; cout<<"3"<<achBoard[2][0]<<"|"<<achBoard[2][1]<<"|"<<achBoard[2][2]<<endl; cout<<endl; cout<<endl;}intCGobang::GetFull()//判断棋盘是否布满棋子,若是返回1{ for(inti=0;i<nSize;i++) for(intj=0;j<nSize;j++) if(achBoard[i][j]=='') return0; return1;}voidCGobang::Win()//赢棋{ CGobang::PrintBoard();//输出棋盘 cout<<"\n\n\t\t"<<chSort<<"方获胜!\n\n"; nWin++;}voidCGobang::Lose()//输棋{nLose++;}voidCGobang::PlayTurn(void)//走1步棋{ intnRow,nCol; cout<<"现在该"<<chSort<<"方下棋,请输入棋盘坐标(x,y):"; do{cin>>nRow>>nCol;//输入坐标 if(nRow>nSize||nCol>nSize||nRow<1||nCol<1)//判断坐标越界 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; else return0;//没有连成一线则返回0}voidCGobang::PrintInfo(void)//打印总体情况{ cout<<"Side"<<chSort<<"方共计赢"<<nWin<<"局,输"<<nLose<<"局,平"<<nDraw<<"局。"<<endl;}voidPrintRule(void)//打印规则{ cout<<"\n\t*****************欢迎使用三子棋游戏!*****************"<<endl<<endl; cout<<"\n\t*****************************************************"<<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; cout<<"\n\n\t\t请按任意键开始下棋!\n\n"; }intJudgePlay(CGobang&SideX,CGobang&SideO)//每下1步要进行输赢的判断,有结果则返回1{ if(SideX.Judge())//X方获胜 { SideX.Win(); SideO.Lose(); return1; } elseif(SideO.Judge())//O方获胜 { SideO.Win(); SideX.Lose(); return1; } else return0;}voidPlay(CGobang&SideX,CGobang&SideO)//开始一局游戏{ while(1) { CGobang::PrintBoard();//输出棋盘 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<stdio.h>#include<Windows.h>#include"juti.h"intmain(void){ system("color88"); CGoba
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年低压机转让出售合同范本
- 2024年代收车位费合同范本
- 2024年承接住房建盖合同范本
- 中班主题活动:乌鸦喝水
- 医疗设备策略
- 安徽省蚌埠市部分学校2024-2025学年九年级上学期数学期中试题(无答案)
- 儿童去痣后护理方案
- 儿童摄影客服培训总结
- 城门城门几丈高课件
- 2024年造纸色浆项目成效分析报告
- 2024年房地产开发商与装修公司装修合同
- 2024年畜牧业经营管理教案:转型与升级
- 浙江省绍兴市建功中学教育集团2024-2025学年八年级上学期10月份学科素养竞赛语文试卷
- 北洋政府的统治与军阀割据 统编版八年级历史上册
- 2024 ESC慢性冠脉综合征指南解读(全)
- 【单元练】(必考题)高中物理必修3第十三章【电磁感应与电磁波初步】习题(答案解析)
- 二年级排球教案
- 小数乘除法竖式计算专项练习题大全(每日一练共15份)
- 天津市和平区2024-2025学年九年级上学期期中考试英语试题
- 2024二十届三中全会知识竞赛题库及答案
- (高清版)JTG 5142-2019 公路沥青路面养护技术规范
评论
0/150
提交评论