- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(人工智能井字棋
实验报告
课程名称:人工智能
实验名称:井字棋
学 院:
专业班级:
学生姓名:
学 号:
一、实验目的:
了解极大极小算法的原理和使用方法,并学会用α-β剪枝来提高算法的效率。
使用C语言平台,编写一个智能井字棋游戏。
结合极大极小算法的使用方法和α-β剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。
二、设计思想:
井字棋是一个流传已久的传统游戏。游戏由两个人轮流来下,分别用“X”和“O”来代替自身的棋子。棋盘分9个格,双方可以在轮到自己下的时候,可以用棋子占领其中一个空的格子。如果双方中有一方的棋子可以连成一条直线,则这一方判胜,对方判负。当所有的格子都被占领,但双方都无法使棋子连成一条直线的话,则判和棋。
这是一个智能型的井字棋游戏,机器可以模拟人与用户对弈。当轮到机器来下的时候,机器会根据当前棋局的形势,利用极大极小算法算出一个评价值,判断如何下才对自身最有利,同时也是对方来说对不利的,然后下在评价值最高的地方。另外利用α-β剪枝,使机器在有哪些信誉好的足球投注网站评价值的时候不用扩展不必要的结点,从而提高机器计算的效率。
在用户界面方法,用一个3×3的井字格来显示用户与机器下的结果。当要求用户输入数据的时候会有提示信息。用户在下的过程中可以中途按下“0”退出。当用户与计算机分出了胜负后,机器会显示出比赛的结果,并按任意键退出。如果用户在下棋的过程中,输入的是非法字符,机器不会做出反应。
三、程序主要流程
四、程序中的主要伪代码:
(1)主函数部分:
(一)打印出欢迎信息,提示用户输入是否先下,如果用户选择先下,跳到第二步,否则,跳到第三步。
(二)调用man()。
(三)调用com(),判断棋局是否分出胜负。判断是否分出了胜负,是的话跳到第五步。
(四)调用man(),判断棋局是否分出胜负。判断是否分出胜负,是的话跳到第五步。否则跳到第三步。
(五)打印棋盘和比赛结果,退出程序。
(2)Man()函数部分
(一)、让用户选择要下的位置,判断用户下完是否已经取胜。否是则跳到第三步。
(二)、结果置为用户赢
(三)、可以下的步数减1,退出函数。
(3)com()函数部分
(一)、判断机器是否可以赢了,如果是将棋子下在可以赢的位置,rs=C_WIN,并退出程序。判断用户是否可以赢了,如果是将棋子下在用户可以赢的位置,并退出函数。
(二)、I=1
(三)、检查I是否小于10.
(四)、检查第I格是否为空,否则I++,重复第三步。
(五)、试下第I格,先检查下完第I格后,用户是否再一步可能赢,如果是只算出用户将会赢的那一步的评价值f,(因为如果没有阻止用户赢的话,F值都是MAX,所以不用计算)。否则,算出所有用户可能下的格局的F值。判断算出的F值是否比前一次的在,如果是记录这一次的位置和F值。I++,step--,回到第三步。
(六)、根据最大的F值和相应的I值,决定要下的位置。(七)、退出程序。
六、调试结果:
(1)欢迎界面:
(2)用户赢时:
当机器赢时:
当机器先下时,机器先下第五格,用户下第八格后,机器下第一格。这些都与预期相符。
七、实验心得:
通过这次我对极大极小算法和α-β剪枝有了更深的理解。在设计井字棋的过程中,发现了设计这个程序必须不能照搬书上的算法,而是应该根据实际情况来计算评价值。
最后感谢梁云老师为我提供这一次的实验让我们学会了很多的东西。
八、附源代码:
#includestdio.h /* 引入头文件 */
#includectype.h
#includeconio.h
#define MAX 1000 /* 定义最大值为1000 */
#define MIN -1000 /* 最小值为-1000 */
#define NONE 0 /* 如果有哪些信誉好的足球投注网站不到结果,结果NONE */
#define DRAW 1 /* 定义平局DRAW为1 */
#define C_WIN 2 /* 电脑赢为2 */
#define M_WIN 3 /* 人赢为3 */
#define QUIT 4 /* 放弃为4 */
#define MAN -1 /* 人用-1表示 */
#define COM 1 /* 电脑用1表示 */
#define TRUE 1
/* 定义b[10]用来存储棋盘(board) , step表示可以下的步数
文档评论(0)