一字棋实验报告

合集下载

利用α-β搜索过程的博弈树搜索算法编写一字棋游戏

利用α-β搜索过程的博弈树搜索算法编写一字棋游戏

利用α-β搜索过程的博弈树搜索算法编写一字棋游戏南京信息工程大学研究生实验报告课程名称人工智能与专家系统实验名称利用α-β搜索过程的博弈树搜索算法编写一字棋游戏学生姓名王灿田学号 20111221332院系信息与控制学院专业系统分析与集成任课教师梅平2012年6月10日1利用α-β搜索过程的博弈树搜索算法编写一字棋游戏1.α-β搜索过程在极小极大搜索方法中,由于要先生成指定深度以内的所有节点,其节点数将随着搜索深度的增加承指数增长。

这极大地限制了极小极大搜索方法的使用。

能否在搜索深度不变的情况下,利用已有的搜索信息减少生成的节点数呢, 设某博弈问题如下图所示,应用极小极大方法进行搜索。

假设搜索的顺序为从下到上,从左到右。

当计算完a的值为0后,由于b是极大节点,马上就可以知道b的值大于等于0。

接下来求c的值。

由于c是极小节点,由d的值为-3,知道c 的值小于等于-3。

而a和c都是b的子节点,所以即便不扩展节点e,也可以知道b的值一定为0了。

所以在这种情况下,没有生成节点e的必要。

同样,在知道b 的值为0后,由于k是极小节点,所以立即知道k的值要小于等于0。

而通过节点f、g,知道h的值至少为3。

这样即便不扩展A所包围的那些节点,也能知道k的值一定为0。

所以A包围的那些节点也没有生成的必要,不管这些节点取值如何,都不影响k的值。

如果在搜索的过程中,充分利用这些信息,不就可以少生成很多节点,从而提高搜索的空间利用率吗,α-β过程正是这样一种搜索方法。

图1MINIMAX过程是把搜索树的生成和格局估值这两个过程分开来进行,即先生成全部搜索树,然后再进行端节点静态估值和倒推值计算,这显然会导致低效率。

如图1中,其中一个MIN节点要全部生成A、B、C、D四个节点,然后还要逐个计算其静态估值,最后在求倒推值阶段,才赋给这个MIN节点的倒推值,?。

其实,如果生成节点A后,马上进行静态估值,得知f(A),,?之后,就可以断定再生成其余节点及进行静态计算是多余的,可以马上对MIN节点赋倒推值,?,而丝毫不会影响MAX的最好优先走步的选择。

象棋项目实训报告书范文

象棋项目实训报告书范文

通过本次象棋项目实训,旨在提高学生对象棋游戏规则、战术策略的掌握,培养团队协作能力和创新思维,同时提升学生的实践操作能力和项目管理能力。

二、实训背景随着信息技术的飞速发展,游戏产业在我国逐渐崛起,象棋作为我国传统竞技项目,具有丰富的文化内涵和广泛的群众基础。

为响应国家关于传承和弘扬中华优秀传统文化的号召,我校特开展象棋项目实训,旨在让学生在实践中学习和传承象棋文化。

三、实训内容1. 象棋基础知识学习- 象棋规则讲解- 象棋棋子特性分析- 象棋基本走法与开局布局2. 象棋实战技巧训练- 中局战术运用- 终局技巧训练- 对弈心理素质培养3. 团队协作与项目管理- 团队组建与分工- 项目进度管理与协调- 项目成果展示与汇报4. 创新设计与开发- 象棋游戏规则创新- 象棋游戏界面设计- 象棋游戏功能开发1. 前期准备- 组织学生进行分组,每组5-6人,选出组长负责协调工作。

- 安排专业教师进行象棋基础知识讲解,包括棋子特性、走法、开局布局等。

- 提供象棋棋具和教学软件,方便学生进行实战训练。

2. 实战训练- 每周安排两次实战对弈,由组长组织,记录对弈过程,分析胜负原因。

- 安排专业教师进行点评,指出学生在实战中存在的问题,并给予指导。

- 鼓励学生互相学习,共同进步。

3. 团队协作与项目管理- 每组学生根据自身特长,分工合作,共同完成项目任务。

- 定期召开项目会议,汇报进度,协调解决问题。

- 针对项目实施过程中遇到的问题,组织讨论,寻求解决方案。

4. 创新设计与开发- 鼓励学生发挥创意,对象棋游戏规则进行创新设计。

- 组织学生进行游戏界面设计,提升游戏视觉效果。

- 引导学生进行游戏功能开发,增加游戏趣味性和互动性。

五、实训成果1. 学生个人成果- 学会象棋基本规则和实战技巧。

- 提高对弈心理素质,增强竞技水平。

- 培养团队合作精神和项目管理能力。

2. 团队项目成果- 完成象棋游戏规则创新设计。

- 开发出具有创新性和实用性的象棋游戏。

计算思维报告

计算思维报告
4利用对下棋策略的枚举设计计算机下棋的算法使计算机以非完全随机的拥有一定胜率的方式做出下棋操作同样地使用数组记录棋局
课程实验报告
课程名称:计算思维
专业班级:
学号:
姓名:
指导教师:
报告日期:
计算机科学与技术学院
1.实验用c语言编写米子棋......................1
1.1实验目的与内容.......................1
{
a[1][2]=' ';
*three_a[what]='O';
return 0;
}
}
}
//win_a's
for(win_b=0,count=0;win_b<3;win_b++)
{
if(*three_b[win_b]=='X')
count++;
else
what=win_b;
}
if(count==2)
1.2实验原理与方案.......................1
1.3实验测试与结果.......................1
2.实验总结与评价..........................2
附录实验源程序代码清单.......................3
1实验用c语言编写米子棋
1.1实验目的与内容
目的:学会使用计算思维相关知识解决具体问题,并从中体会它的运用。
内容:用c语言编写一个“米字棋”程序,要求如下:(1)双人游戏,玩家与计算机轮流走棋,每次选一个可以移动的位置走棋,每次只能横向或竖向走一步;(2)一方棋子在某对角线成一条直线就算赢;(3)棋盘可用矩阵标示。

数据结构_中国象棋_实验报告

数据结构_中国象棋_实验报告

数据结构课程设计报告——中国象棋姓名:林泽全学号:091402116 班级:09网络工程一、问题描述1.象棋概述象棋,又称中国象棋(英文现译作chess)。

在中国有着悠久的历史,属于二人对抗性游戏的一种,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。

中国象棋是我国正式开展的78个体育运动项目之一,为促进该项目在世界范围内的普及和推广,现将“中国象棋”项目名称更改为“象棋”。

此外,高材质的象棋也具有收藏价值,如:高档木材、玉石等为材料的象棋。

更有文人墨客为象棋谱写了诗篇,使象棋更具有一种文化色彩。

2.棋子的初始棋位整个棋盘以“河界”分为相等的两部分。

为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一至九来表示红方的每条竖线,用阿拉伯数字1只至9来表示黑方的每条竖线。

己方的棋子始终使用己方的线路编号,无论棋子是否“过河”。

对弈开始之前,红黑双方应该把棋子摆放在规定的位置。

任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。

3.象棋棋子象棋是一种双方对阵的竞技项目。

棋子共有三十二个,分为红黑两组,各有十六个,由对弈的双方各执一组。

棋子种类说明如下表:帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是为了区别红棋和黑棋而已。

4.棋子的走法➢帅(将)帅(将)是棋中的首脑,是双方竭力争夺的目标。

它只能在九宫之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。

帅与将不能在同一直线上直接对面,否则走方判负。

➢仕(士)仕(士)是将(帅)的贴身保镖,它也只能在九宫内走动。

它的行棋路径只有九宫内的斜线。

➢相(象)相(象)的主要作用是防守,保护自己的帅(将)。

它的走法是每次循对角线走两格,俗称“象飞田”。

相(象)的活动范围限于河界以内的本方阵地,不能过河,且如果它走的田字中央有一个棋子,就不能走,俗称“塞象眼”。

➢车车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。

一字棋实验

一字棋实验

一字棋实验实验目的通过实现人机博弈的一字棋程序,掌握人工智能的搜索原理。

理解当递归深度比较深的时候,α-β剪枝算法对计算机搜索效率的影响。

通过调整评价走步函数的参数以及算法,使得计算机的走步更加智能。

实验原理一字棋的搜索算法采用极大极小值搜索算法,算法如下:(1)将初始节点S放入OPEN表中,开始时搜索树T由初始节点构成。

(2)若OPEN表为空,则转(8)。

(3)将OPEN表中第一个节点n移出放入CLOSED表中。

(4)若n可直接判定为输、赢、或者平局,则令对应的评价函数f(n)= ∞,- ∞,和0,并转(2);否则扩展n,产生n的子节点集{n1},将{n1}放入搜索树T中。

此时,若搜索深度d(n1)小于预先设置的深度k,则将{n1}放入OPEN表的末端,转(2);否则n1达到深度k,计算f(n1),转(2)。

(5)若CLOSED表为空,则转(8);否则将CLOSED表中的第一个节点设为np。

(6)若np属于max层,且对于它的属于min层的子节点{nc1}有值,则f(np)=max{f(nc1)},并将np放入CLOSED表中;若np属于min层,且对于它的属于max层的子节点nc1的f (nc1)有值,则f(np)=min{f(nc1)},将np放入CLOSED表中。

(7)转(5)。

(8)若f(s)不空,则s有值,或者结束或者标记走步。

实际上搜索过程分为两个阶段进行:第一阶段为(2)——(4),用宽度优先法生成规定深度k的全部博弈树,然后对其所有叶子节点计算其f(p);第二阶段为(6)——(8),是由底向上利用极大极小算法逐级求端节点倒推估价值,直至求出初始节点的f(s)为止,再由f(s)选得相对较好的着法,过程结束。

等对手相应走步后,再以当前的格局作为初始节点,重复调用此过程,形成博弈树的极大极小搜索。

估价函数的定义(1)若p对任何一方来说都不是获胜的位置,则f(p)=(那些仍然为max方空着的完全的行、列、对角线的总数)- (那些仍然为min方空着的完全的行、列、对角线的总数);(2)若p为max方获胜的位置,则f(p)=∞;(在实际应用中可以定义一个相对比较大的数字)(3)若p为min方获胜的位置,则f(p)= - ∞;所谓完全的行、列、或对角线是指可能被三个同样的棋子所占满的行、列、或对角线。

人工智能实验报告大全

人工智能实验报告大全

人工智能课内实验报告(8次)学院:自动化学院班级:智能1501 姓名:刘少鹏(34)学号: 06153034目录课内实验1:猴子摘香蕉问题的VC编程实现 (1)课内实验2:编程实现简单动物识别系统的知识表示 (5)课内实验3:盲目搜索求解8数码问题 (18)课内实验4:回溯算法求解四皇后问题 (33)课内实验5:编程实现一字棋游戏 (37)课内实验6:字句集消解实验 (46)课内实验7:简单动物识别系统的产生式推理 (66)课内实验8:编程实现D-S证据推理算法 (78)人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-8 10:15-12:00实验1:猴子摘香蕉问题的VC编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置}void Monkey_Move_Box(char x, char y){printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置}void Monkey_On_Box(){printf("Step %d:monkey爬上箱子\n", ++i);}void Monkey_Get_Banana(){printf("Step %d:monkey摘到香蕉\n", ++i);}void main(){unsigned char Monkey, Box, Banana;printf("********智能1501班**********\n");printf("********06153034************\n");printf("********刘少鹏**************\n");printf("请用a b c来表示猴子箱子香蕉的位置\n");printf("Monkey\tbox\tbanana\n");scanf("%c", &Monkey);getchar();printf("\t");scanf("%c", &Box);getchar();printf("\t\t");scanf("%c", &Banana);getchar();printf("\n操作步骤如下\n");if (Monkey != Box){Monkey_Go_Box(Monkey, Box);}if (Box != Banana){Monkey_Move_Box(Box, Banana);}Monkey_On_Box();Monkey_Get_Banana();printf("\n");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

中国象棋实验报告

中国象棋实验报告

本科学生综合性实验报告课程名称:Java程序设计中国象棋项目成员学号班级B02班项目名称中国象棋指导教师开课学期2013 至2014 学年第1 学期完成时间2013 年12 月25 日1.引言 (1)1.1开发背景 (1)1.2国内外象棋发展状况 (1)1.3开发目标 (2)1.4开发环境 (2)2.设计思路 (2)2.1设计步骤 (2)2.2设计流程图 (3)3.设计技术 (3)3.1io技术 (3)3.2多线程 (4)3.3swing (4)4.设计规则 (4)4.1走棋规则 (4)4.2吃棋规则 (4)5.代码实现 (4)6.程序测试 (5)6.1步骤一:点击运行 (5)6.2步骤二: (6)7.总结与提升 (10)1.引言1.1开发背景中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。

自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。

在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。

中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。

控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。

因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。

1.2国内外象棋发展状况中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。

黑白棋实验报告

黑白棋实验报告

一、实验背景黑白棋,又称五子棋、连珠棋等,是一种两人对弈的策略型棋类游戏。

本实验旨在通过编程实现黑白棋游戏,并运用人工智能算法优化游戏策略,提高游戏水平。

二、实验目的1. 理解黑白棋游戏规则及基本策略。

2. 掌握人工智能在黑白棋游戏中的应用。

3. 通过优化算法,提高黑白棋游戏水平。

三、实验内容1. 黑白棋游戏规则黑白棋游戏规则如下:(1)棋盘为15×15的网格,每个网格可以放置一枚棋子。

(2)黑方先手,双方轮流在空白网格放置棋子,黑色棋子为“黑”,白色棋子为“白”。

(3)当任意一方在水平、竖直或两个对角线上形成连续的五个棋子时,该方获胜。

2. 人工智能算法本实验采用Minimax(最小-最大)算法进行人工智能策略优化。

Minimax算法是一种决策树搜索算法,用于解决二人零和博弈问题。

在黑白棋游戏中,Minimax算法通过模拟对手的走法,寻找最优的落子策略。

3. 优化算法为了提高游戏水平,我们对Minimax算法进行了以下优化:(1)棋子权重:将棋盘上的棋子按照位置赋予不同的权重,以反映棋子的重要程度。

例如,棋盘中心的棋子权重高于边缘棋子。

(2)22点权重:在棋盘的四个角落,我们赋予额外的权重,以鼓励在角落放置棋子。

(3)边线权重:棋盘边缘的棋子权重高于中间棋子,以反映棋子贴边的重要性。

(4)顶角权重:棋盘四个顶角的棋子权重最高,以鼓励在顶角放置棋子。

四、实验结果与分析1. 游戏效果通过优化后的Minimax算法,我们的黑白棋游戏水平得到了显著提高。

在与对手的对弈中,我们能够更好地判断棋局走势,制定合理的落子策略。

2. 优化效果分析(1)棋子权重:通过对棋子权重的优化,我们能够更好地把握棋局走势,避免在棋局后期陷入被动。

(2)22点权重:在棋局初期,我们倾向于在22点位置放置棋子,以占据有利地形。

(3)边线权重:在棋局中后期,我们注重在棋盘边缘放置棋子,以扩大棋局范围。

(4)顶角权重:在棋局的关键时刻,我们会在顶角位置放置棋子,以形成优势。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.实验目的:
1.理解和掌握博弈树的启发式搜索过程
2.学习极大极小搜索α–β剪枝
3.能够用选定的编程语言设计简单的博弈游戏
二.实验环境及工具
1.硬件环境:网络环境中的微型计算机
2.软件环境:Windows操作系统,VC++语言
三.实验原理
1. 游戏规则
“一字棋”游戏(又叫“三子棋”或“井字棋”),是一款十分经典的益智小游戏。

“井字棋”的棋盘很简单,是一个 3×3 的格子,很像中国文字中的“井”字,所以得名“井字棋”。

“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。

2.井字棋(英文名 Tic-Tac-Toe)
井字棋的出现年代估计已不可考,西方人认为这是由古罗马人发明的;但我们中国人认为,既然咱们都发明了围棋、五子棋,那发明个把井字棋自然是不在话下。

3.极大极小分析法
设有九个空格,由 MAX,MIN 二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成“三子成一线”(同一行或列或对角线全是某人的棋子),谁就取得了胜利。

用圆圈表示 MAX,用叉号代表 MIN。

比如下图中就是 MAX取胜的棋局。

a)估价函数
设棋局为 P,估价函数为 e(P)。

(1) 若 P 对任何一方来说都不是获胜的位置,则 e(P)=e(那些仍为
MAX 空着的完全的行、列或对
角线的总数)-e(那些仍为 MIN 空着的完全的行、列或对角线的总数)
(2) 若 P 是 MAX 必胜的棋局,则 e(P)=+∞(实际上赋了 60)。

(3) 若 P 是 B 必胜的棋局,则 e(P)=-∞(实际上赋了-20)。

比如 P 如下图示,则 e(P)=5-4=1
4.α–β剪枝算法
上述的极小极大分析法,实际是先生成一棵博弈树,然后再计算其倒推值,至使极小极大分析法效率较低。

于是在极小极大分析法的基础上提出了α-β剪枝技术。

α-β剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。

具体的剪枝方法如下:
(1) 对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这
个β值不大于 MIN的父节点(一定是或节点)的估计倒推值的下确界α,即α≥β,则就不必再扩展该 MIN节点的其余子节点了(因为这些节点的估值对 MIN 父节点的倒推值已无任何影响了)。

这一过程称为α剪枝。

(2) 对于一个或节点 MAX,若能估计出其倒推值的下确界α,并且这
个α值不小于 MAX 的父节点(一定是与节点)的估计倒推值的上确界
β,即α≥β,则就不必再扩展该MAX节点的其余子节点了(因为这些节点的估值对MAX父节点的倒推值已无任何影响了)。

这一过程称为β剪枝。

从算法中看到:
(1) MAX 节点(包括起始节点)的α值永不减少;
(2) MIN 节点(包括起始节点)的β值永不增加。

在搜索期间,α和β值的计算如下:
(1) 一个 MAX 节点的α值等于其后继节点当前最大的最终倒推值。

(2) 一个 MIN 节点的β值等于其后继节点当前最小的最终倒推值。

5.输赢判断算法设计
因为每次导致输赢的只会是当前放置的棋子,输赢算法中只需从当前点开始扫描判断是否已经形成三子。

对于这个子的八个方向判断是否已经形成三子。

如果有,则说明有一方胜利,如果没有则继续搜索,直到有一方胜利或者搜索完整个棋盘。

四.数据结构
1.程序流程图
显示棋盘
用户输入搜索深度
选择玩家或者电脑
N
电脑先
Y
调用Alpha Bata函数,计算下一
步棋子位置
Y
比赛结束
N
根据玩家鼠标点击位置下棋
N
比赛结束
Y
比赛结束,显示结
2.主要成员函数
2.1Alpha-Beta剪枝算法
//完成功能:根据输入棋盘,搜索深度,及其他参数,给出一个相应的最优解,存入result中。

//参数: board :待评估棋盘
// Depth :搜索深度
// turn :当前是机器走(MAX 结点)还是玩家走(MIN 结点)
// Alpha :alpha 值,第一次调用默认-100
// Beta :beta 值,第一次调用默认+100
// result:输出结果
//返回:若当前点为 MAX 节点,则返回 alpha 值;
// 若当前点为 MIN 节点,则返回 beta 值
int CTic_MFCDlg::AlphaBeta(int Board[], int Depth, int turn, int Alpha, int Beta, int *result)
2.2估值函数
//完成功能:根据输入棋盘,判断当前棋盘的估值,估价函数为课本 P129 所讲:
// 若是 MAX 的必胜局,则 e = +INFINITY,这里为+60
// 若是 MIN 的必胜局,则 e = -INFINITY,这里为-20,这样赋值的原因是机器若赢了,
则不考虑其它因素。

// 其它情况,棋盘上能使 CUMPUTER 成三子一线的数目为 e1
// 棋盘上能使 PLAYER 成三子一线的数目为 e2,
// e1-e2 作为最终权值
//参数: board:待评估棋盘
//返回:评估结果
int CTic_MFCDlg::evaluate(int board[])
2.3鼠标左键响应
//完成功能:鼠标左键相应,在点击的那格放置玩家棋子,之后再相
应计算机走下一步
void CTic_MFCDlg::OnLButtonDown(UINT nFlags, CPoint point)
2.4Draw系列函数
// 完成功能:根据 Chess 棋盘数组画出棋盘
void CTic_MFCDlg::DrawBoard(CDC *pDC)
//完成功能:在棋盘上画一个 O,电脑
void CTic_MFCDlg::DrawO(CDC *pDC, int Pos)
//完成功能:在棋盘上画一个 X,玩家
void CTic_MFCDlg::DrawX(CDC *pDC, int Pos)
2.5电脑或玩家先开始
//完成功能:计算机先走
void CTic_MFCDlg::OnStartCom()
//完成功能:玩家先走
void CTic_MFCDlg::OnStartPly()
2.6判断胜负
//完成功能:根据输入棋盘,判断当前棋盘的结果,COMPUTER 胜?PLAYER 胜?平局?
//参数: board:待评估棋盘
//返回: -1 表示:尚未结束
// 0 表示:平局
// 1 表示:PLAYER 胜
// 2 表示:COMPUTER 胜
int CTic_MFCDlg::isWin(int curPos)
五.实验内容
1.基本功能简介
这里采用 C++的 MFC 完成,总的界面如下,有以下功能:搜索树深度的设置;机器先手或者玩家先手;游戏胜负或者平局判断。

并且经测试,有较好的鲁棒性,例如:
1.鼠标在游戏开始之前或者结束之后点击棋盘不会有相应,并会提示
用户先开始游戏;
2.鼠标点击棋盘区域之外,不会有相应
3.搜索深度已经设置区域
4.同一棋盘格子点击只响应一次
2.流程图
2.1估价函数
2.2Alpha-Beta剪枝函数
六.实验小结
本次试验是在同学的帮助下完成的,通过本次实验进一步对老师课堂上所讲的 AlphaBeta 剪枝有了更加深刻的了解,对它的一般实现有了初步的认识。

复习了大二时所学习的 C++语言,并且对 MFC 程序设计有了更深的了解。

虽然在这次试验过程当中遇到不少问题,但是通过自己的学习和同学的帮助,最后都能将这些问题解决了。

相关文档
最新文档