- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一字棋实验报告即程序代码
一字棋实验报告
题 目: 一字棋
学 号:
姓 名:
专 业:
教 师:
XXXX大学
计算机科学与技术学院
摘要:本实验的思想有别于其他实验,程序实现起来相对简单。在人机对垒中,分别编写了计算机走步Mac函数,人走步User函数,评分value函数,判定输赢CheckWin函数,以及打印PrintQP函数和主函数。本实验的创新点主要集中在Mac函数和value函数。计算机在走步之前先将当前棋盘复制给临时棋盘,在此我定义了两个临时棋盘。在临时棋盘1中计算机试探性地走了一步,相应地在临时棋盘2中的相同位置计算机帮人走了一步,接下来分别对两个临时棋盘调用CheckWin函数,根据返回的结果分别选择性地记录该走步的坐标位置。最后计算机再将临时棋盘1送入value函数,并记录评分。重置临时棋盘1和2,依次对所有空缺位置进行试探。根据返回的结果选择合适的坐标位置。而value函数实现起来相对比较简单,简化了极大极小分析法。返回的值等于所有空格上都放上计算机的棋子后,计算机的三个棋子所组成的行、列及对角线的总数减去所有空格上都放上人的棋子后,人的三个棋子所组成的行、列及对角线的总数。而在机机对垒中的Mac1函数和Mac2函数比较相似,其他函数类似。
关键词: 极大极小分析法 临时棋盘 试探评价
一、一字棋游戏的文字描述
“一字棋”游戏(又叫“三字棋”或“井字棋”),是一款十分经典的益智小游戏。游戏双方在一个3*3的格子上依次下入自己的棋子,任何一方首先三子连成一线即获胜利,游戏结束。
二、一字棋对垒过程计算机描述和实现
首先我定义一个3*3的二维数组,作为一字棋的棋盘。
主函数main
程序输出当前棋盘并提示判断是否玩家先走步。然后玩家电脑依次走步,当当前棋盘能够判断输赢时,游戏结束,否则直到棋盘下满,游戏结束。
打印函数PrintQP
打印二维数组,即当前棋盘。
玩家走步函数User
实现玩家的走步,并判断玩家的走步是否有误,返回结果。
计算机走步函数Mac
该函数是整个程序实现智能的关键所在,函数中定义两个临时棋盘,一个是给计算机试探走步使用,另一个是计算机替玩家走步使用,并结合其他的判断语句和评价函数value,得出一个最佳的走步坐标,并实现。
评价函数value
Value函数采用极大极小函数的思想,并做了适当的简化。该函数对当前棋盘直接计算val的值。Val的值等于所有空格上都放上计算机的棋子后,计算机的三个棋子所组成的行、列及对角线的总数减去所有空格上都放上人的棋子后,人的三个棋子所组成的行、列及对角线的总数。返回该值。
判定输赢函数CheckWin
因为每次导致输赢的只会是当前放置的棋子,输赢算法中只需从当前点开始扫描判断是否已经形成三子。对于这个子的八个方向判断是否已经形成三子。如果有,则说明有一方胜利,如果没有则继续搜索,直到有一方胜利或者搜索完整个棋盘。
三、实例
本实验有人机对垒和机机对垒。
人机对垒:
2、机机对垒:
四、尝试考虑五子棋的实现
五子棋和一字棋在性质上挺相似的,只是将棋盘扩大,棋子的连线增加到5个。但五子棋所考虑的情况将更加复杂,五子棋的棋盘不在局限在5*5中,对智能的要求也是非常之高。五、体会
本次实验在对极大极小分析法理解的基础之上,结合自己的一些想法编写而成,在程序实现初期,出现了很多BUG,例如计算机不能准确地判断对自己构成危险的走步,还有就是计算机在可以获胜情况下,没有走对棋子等等。还好这些问题在接下来对程序的不断完善中得以解决。
六、参考文献
七、程序源代码见附件。
#includeiostream.h
int QP[3][3];
void PrintQP()
{
for(int i=0;i3;i++)
{
for(int j=0;j3;j++)
coutQP[i][j]\t;
coutendl;
}
}
int CheckWin(int b[3][3])
{
for(int i=0;i3;i++)
{
if((b[i][0]==1b[i][1]==1b[i][2]==1)||(b[0][i]==1b[1][i]==1b[2][i]==1))
{
return 1;
}
if((b[i][0]==-1b[i][1]==-1b[i][2]==-1)||(b[0][i]==-1b[1][i]==-1b[2][i]==-1))
{
return -1;
}
}
if((b[0][0]
您可能关注的文档
- 《外婆的手纹》详案.doc
- 《多角度描写景物》作文导学案.doc
- 《外国政治制度史》复习资料.doc
- 《大气压强》能力提升.doc
- “环瑞云湖”野外实地考查活动策划书.doc
- 《基层适宜人才申报书》.doc
- 《实用文体写作》考试重点.doc
- 《实用文体写作教程》网上操作方法.doc
- 《工商行政管理》期末考试.doc
- 《应用文写作》试卷A附答案.doc
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)