1 / 28
文档名称:

精品PPT课件----C++课件 案例二十三 人机下棋问题.ppt

格式:ppt   页数:28
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

精品PPT课件----C++课件 案例二十三 人机下棋问题.ppt

上传人:wz_198613 2014/10/23 文件大小:0 KB

下载得到文件列表

精品PPT课件----C++课件 案例二十三 人机下棋问题.ppt

文档介绍

文档介绍:案例二十三人机下棋问题
本案例知识要点
数组的使用
类的设计及使用
人工智能问题的量化思想
1页共28页
一、案例需求
案例描述
设计一个简单的下棋游戏,游戏的规则是:在33的棋盘上,计算机为一方,人为一方,交替标记叉(X)和圆圈(O)。在行、列、对角线的方向上,先连成一条直线的一方为胜者。计算机可以动态地显示棋盘,给出提示信息和胜负判断,并允许用户选择是先手还是后手。
案例效果图
人机下棋案例效果如图所示。
2页共28页
人机下棋案例效果图
3页共28页
功能说明
显示棋盘,给出提示信息和胜负结果判断标准,允许用户选择是先手还是后手。
每一步都用图形化方式顺序输出。
直观地表示胜负结果。
4页共28页
二、案例分析
设计算机标记“X”,人标记“O”。计算机下时,应该考虑所有的空位置,并按照行、列和对角线计算每个空位的分值。在某行(列、对角线)上,按以下规则计分(其中“_”表示空格):
若已有“XX”,则加50分。
若已有“OO”,则加25分。
若已有“X_”,则加10分。
若已有“O_”,则加8分。
若已有“_ _”,则加4分。
5页共28页
根据上述的计分规则,计算机每次下棋时算出每个空位置的分数,从中选择最高分的位置画‘X’。如果某条行、列、对角线上画满了3个“X”,则计算机胜,否则人继续下棋。
人每走一步即判断行、列、对角线上是否画满了3个“O”,如画满了3个“O”,则人胜,否则计算机继续下棋。
如果棋盘布满了棋也未分出胜负,则和棋。
需要定义一个字符数组保存棋盘每次下完棋的状态。其中,“X”表示计算机下的棋,“O”表示人下的棋,数字“1”~“9”表示空位置。
还需要定义一个整型数组记录计算机下棋时每个空位置的分值。即如上所述的50、25、10、8、4分。
6页共28页
三、案例设计

基于上述分析,本案例定义一个类CGame,用来处理相关的计算、打印等功能。主程序只是简单调用。
7页共28页
CGame类的设计如图所示。
8页共28页
(1)数据成员
char status[9];
记录棋盘状态。
int score[9];
记录空位置的分值。
int fail;
fail为胜败标志,其中0表示和棋,1表示人赢,2
表示计算机赢。
counter;
counter为步数。
9页共28页
(2)函数成员
Game();
构造函数,初始化相关变量。
Print();
打印棋盘。
int Cal(int i,int j);
计算某行的得分。
bool Judge(int i,int j,int k);
判断某条直线是否全为“O”。
Play();
启动游戏运行。
10页共28页