- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数 学 与 计 算 机 科 学 学 院
三子棋游戏
设计报告
课程名称: 人工智能原理及其应用
年级专业: 11级计算机科学与技术
任课教师: 杨 炎
设计时间: 2014年4月20 日
小组成员:
姓 名 学 号
韩 磊 136263010068
张 雨 136263010064
孟 帝 136263010073
目录
第一章:三子棋游戏软件描述 3
1.1 三子棋游戏简介 3
1.2 软件功能介绍 3
1.3 限制条件 3
第二章:软件功能描述 3
第三章:三子棋游戏的分析 4
3.1 流程图如下: 4
3.2 程序所用到的算法分析: 5
第四章:游戏程序 5
第五章:程序运行图 19
5.1 是否开始游戏进行选择。 19
5.2 先下一方下棋 19
5.3 判断胜利一方 19
5.4 判断和棋 19
第一章:三子棋游戏软件描述
1.1 三子棋游戏简介
三子棋是一种人与机器对弈的小游戏,一方先下,轮流下棋,直到一方先将三个棋子连成一条线,就可以取胜。
1.2 软件功能介绍
井字棋游戏,也就是三子棋游戏。
棋盘大小为3×3,在方格内下棋,对弈双方轮流下棋。
只要有一方有3颗棋子连成一条线(行、列及对角线),则该方获胜,且游戏结束
如果所有位置都已经下满棋子,且没有哪一方能赢棋,则是和棋。
1.3 限制条件
该程序必须在C++6.0环境中运行。模式选择时,不管输入何种值,只要不是要求的输入都是无效的。
第二章: 软件功能描述
用户进入游戏后选择2项其中之一:Y/N
用户进入游戏开始界面后,玩游戏的人先下,然后电脑再下。
用户进入游戏后,根据屏幕的棋图输入第几行第几列,每次输入一个值后,电脑也会对应输入值。
当棋盘上出现-1和1填满棋盘时,电脑会判断那方胜利,或者判断是否是和棋,然后游戏结束。
第三章: 三子棋游戏的分析
3.1 流程图如下:
3.2 程序所用到的算法分析:
1. 计算某个棋局状态中甲方是否已经胜出
算法:对矩阵的列,行,斜线求和。
若和为3,则甲已经胜出,否则返回0
2.计算中某个棋局状态中甲方或乙方全占满的行,列,斜线数总和
把矩阵中和为3的行数,列数,斜线数总和返回
3.计算估价函数值
算法:对某个棋局状态,首先把该棋局状态的空格塞满甲方的棋子,算出现在甲方棋子占满整行,整列,整斜线的总数。然后在原来的棋局状态的空格塞满乙方的棋子,算出乙方棋子占满整行,整列,整斜线的总数。然后求两者差。。
4.使用的α-β剪枝技术的基本思想或算法: 边生成博弈树边计算评估各节点的倒推值,并且根据评估值的倒推值的范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效益。
第四章: 游戏程序
#includeiostream.h
int num=0; //记录棋盘上棋子的个数
int p,q;
int tmpQP[3][3]; //表示棋盘数据的临时数组,其中的元素0表示该格为空,
int cur[3][3]; //存储当前棋盘的状态
const int depth=3; //搜索树的最大深度
void Init() //初始化棋盘状态
{
for(int i=0;i3;i++)
for(int j=0;j3;j++)
{
cur[i][j]=0;
}
}
void PrintQP() //打印棋盘当前状态
{
for(int i=0;i3;i++)
{
for(int j=0;j3;j++)
coutcur[i][j]\t;
coutendl;
}
}
void UserInput()//用户通过此函数来输入落子的位置,比如:用户输入31,则表示用户在第3行第1列落子。
{
int pos,x,y;
L1: coutPlease input your qizi (xy): ;
cinpos;
x=pos/10,y=pos%10;
if(x0x4y0y4cur[x-1][y-1]==0)
{
cur[x-1][y-1]=-1;
}
else
{
您可能关注的文档
最近下载
- 小学科学新教科版二年级上册第一单元 造房子教案(共6课)(2025秋).docx VIP
- 2025年广西公需科目第二套答案.docx VIP
- 设备供货配送方案.docx VIP
- 现代农业发展情况课件.ppt VIP
- 2025年广西专业技术人员继续教育公需科目(二)答案.docx VIP
- 《急诊与灾难医学》全套课件.pptx
- 精通版五年级英语上册Lesson3_教学课件.ppt VIP
- 农村公路畅通工程质量检测方案(第三方检测及交工验收).docx VIP
- 《现代农业发展》课件.ppt VIP
- 2025广西公需科目考试答案(3套涵盖95-试题)一区两地一园一通道建设人工智能时代的机遇与挑战.docx VIP
文档评论(0)