欢迎来到天天文库
浏览记录
ID:48749549
大小:552.50 KB
页数:28页
时间:2020-01-21
《案例二十三 人机下棋问题.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、案例二十三人机下棋问题本案例知识要点数组的使用类的设计及使用人工智能问题的量化思想第页共28页一、案例需求案例描述设计一个简单的下棋游戏,游戏的规则是:在33的棋盘上,计算机为一方,人为一方,交替标记叉(X)和圆圈(O)。在行、列、对角线的方向上,先连成一条直线的一方为胜者。计算机可以动态地显示棋盘,给出提示信息和胜负判断,并允许用户选择是先手还是后手。案例效果图人机下棋案例效果如图所示。第页共28页人机下棋案例效果图第页共28页功能说明显示棋盘,给出提示信息和胜负结果判断标准,允许用户选择是先手
2、还是后手。每一步都用图形化方式顺序输出。直观地表示胜负结果。第页共28页二、案例分析设计算机标记“X”,人标记“O”。计算机下时,应该考虑所有的空位置,并按照行、列和对角线计算每个空位的分值。在某行(列、对角线)上,按以下规则计分(其中“_”表示空格):若已有“XX”,则加50分。若已有“OO”,则加25分。若已有“X_”,则加10分。若已有“O_”,则加8分。若已有“__”,则加4分。第页共28页根据上述的计分规则,计算机每次下棋时算出每个空位置的分数,从中选择最高分的位置画‘X’。如果某条行、列
3、、对角线上画满了3个“X”,则计算机胜,否则人继续下棋。人每走一步即判断行、列、对角线上是否画满了3个“O”,如画满了3个“O”,则人胜,否则计算机继续下棋。如果棋盘布满了棋也未分出胜负,则和棋。需要定义一个字符数组保存棋盘每次下完棋的状态。其中,“X”表示计算机下的棋,“O”表示人下的棋,数字“1”~“9”表示空位置。还需要定义一个整型数组记录计算机下棋时每个空位置的分值。即如上所述的50、25、10、8、4分。第页共28页三、案例设计1.类的设计基于上述分析,本案例定义一个类CGame,用来处理
4、相关的计算、打印等功能。主程序只是简单调用。第页共28页CGame类的设计如图所示。第页共28页(1)数据成员charstatus[9];记录棋盘状态。intscore[9];记录空位置的分值。intfail;fail为胜败标志,其中0表示和棋,1表示人赢,2表示计算机赢。counter;counter为步数。第页共28页(2)函数成员Game();构造函数,初始化相关变量。Print();打印棋盘。intCal(inti,intj);计算某行的得分。boolJudge(inti,intj,intk
5、);判断某条直线是否全为“O”。Play();启动游戏运行。第页共28页2.主程序设计主程序主要是调用了CGame类的成员函数Play()来实现游戏的,CGame.Play()函数的流程如图所示。第页共28页CGame.Play()函数的流程第页共28页四、案例实现第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页第页共28页五、案例总结与提高案例总结该案例新颖的地方是巧妙地将智能判断的思考过程
6、抽象出来,加以量化,这样计算机才能够进行处理。关于这种智能过程,读者可以参考人工智能方面的书籍。第页共28页案例提高在全面理解的基础上,读者可以对本案例进行一些改动与提高。改变棋盘的尺寸。改变后,计算机下棋时能够选择的空位置就更加多了。可以通过改进算法来达到计算机选择最优位置的目的。改变下棋的规则。当棋盘变大时,胜利的规则不一定非要连成一条线的棋子个数等于棋盘尺寸,可以比棋盘的尺寸小。这样,设计分值时就需要考虑多种因素,除了计算机要将棋子尽量连成一条线外,还要考虑封住人的棋子连线。第页共28页
此文档下载收益归作者所有