人工智能课程设计解读.docx

上传人:小飞机 文档编号:5005865 上传时间:2023-05-29 格式:DOCX 页数:25 大小:229.36KB
返回 下载 相关 举报
人工智能课程设计解读.docx_第1页
第1页 / 共25页
人工智能课程设计解读.docx_第2页
第2页 / 共25页
人工智能课程设计解读.docx_第3页
第3页 / 共25页
人工智能课程设计解读.docx_第4页
第4页 / 共25页
人工智能课程设计解读.docx_第5页
第5页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《人工智能课程设计解读.docx》由会员分享,可在线阅读,更多相关《人工智能课程设计解读.docx(25页珍藏版)》请在三一办公上搜索。

1、人工智能导论课程报告课题名称:五子棋姓名:X X 学号:114304xxxx课题负责人名(学号):X X114304xxxx同组成员名单(学号、角色):x x1143041325XXX1143041036指导教师:张建州评阅成绩:评阅意见:提交报告时间:2014年1月9日五子棋计算机科学与技术专业学生XXX指导老师张建州摘要人类之所以不断在进步,是因为我们人类一直不断的在思考,五 子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。五子棋 游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高 逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。同时,五子棋游戏

2、程序的开发也使得五子棋这个游戏得到了广泛的推广, 让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。五子棋游戏程 序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性 的。关键词:五子棋 进步 思考目录人工智能导论课程报告01引言 31.1 五子棋简介 31.2五子棋游戏的发展与现状32研究问题描述 42.1问题定义 42.2可行性研究 42.3需求分析 52.4总体设计 52.5详细设计 62.6编码和单元测试 63人工智能技术 64算法设计 74.1aB剪枝算法74.2极大极小树 74.3深度优先搜索(DFS ) 84.4静态估值函数 95软件设计和实现 95.1数据

3、结构定义95.2程序流程图 176性能测试 186.1程序执行结果 187总结 21参考文献 211引言1.1五子棋简介五子棋是一种两人对弈的纯策略型汉族棋类益智游戏,棋具与围棋通用, 由中国汉族人发明,起源于中国上古时代的传统黑白棋种之一。主要流行于华 人和汉字文化圈的国家以及欧美一些地区。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力, 提高智力,而且富含哲理,有助于修身养性。已在各个游戏平台有应用。古代五子棋棋盘与围棋棋盘是通用的,汉魏时为十七路(17 X17)棋盘, 至南北朝时即已流行十九路(19X19)棋盘,直至1931年出现所谓五子棋专用 棋盘。1.2五子棋游戏的发

4、展与现状目前,连珠这一棋类运动已迅速在国际上发展起来。外国人都十分看好这 一不起眼的智力游戏,并认为五子棋不仅能提高思维、开发智力、手脑并用、 修身养性而且富含哲理,具有东方的神秘和西方的直观,是中西文化的交汇点。 许多国家的人对五子棋都有不同的爱称,例如韩国人把五子棋称之为“情侣棋”, 言下之意是情人之间下五子棋有利于增加情感的交流;欧洲人称之为“中老年 棋”,表示五子棋适合中老年人的生理特点和思维方式;美洲人喜欢将五子棋称 之为“商业棋”,就是说商人谈生意时可一边下棋一边谈生意,棋下完了生意也 谈成了。由此可见,尽管国度不同,语言各异,但人们都可以借助五子棋这一 简单而又深奥的棋艺进行交流

5、、比赛,增进友谊。当前,有4 0多个国家和地区都在下五子棋,并有各种规模和级别的比赛。 1 9 8 9年8月在日本京都、19 9 1年8月在俄罗斯联邦的莫斯科、19 9 3年8月在瑞典、1 9 9 5年8月在爱沙尼亚的塔林分别举行了第一、 二、三、 四届世界锦标赛。除第三届的冠军是爱沙尼亚人之外,其余三届的冠军都是日 本人。五子棋的世界锦标赛,每两年举办一次,其申国竞争也十分激烈。日本 目前拥有自己的五子棋职业棋手,并且对连珠(五子棋)技术的研究也相当普 遍和全面,就水平也正在日益增强。同时,五子棋的理论研究与探索也呈现蓬 勃发展的势头,从1858年第一部五子棋专著问世以来,目前,全世界有2

6、000多种五子棋的书籍及期刊,分别以日文、俄文、英文、瑞典文及中文出 版发行。五子棋在我国的北京、上海、天津、云南、浙江、广东、四川、湖北、 辽宁、新疆、河北等省(区)市都有很大的发展。北京多次举办了北京地区的 五子棋赛,如“思曼杯”、“京空杯”、“奇奇童杯”、“北京第六届民族团结杯” 和“北京第四岂民族运动会”的五子棋比赛。上海地区举办了 “上文杯”五子 棋大赛。云南省以及其他省市亦举办过许多五子棋比赛。所有这些赛事都越来 越多地吸引了无数人的关注,表明了根植于中国的五子棋有着广泛的群众基础,是群众喜闻乐见的体育活动。而现在,很多很多游戏平台上面都有五子棋游戏供我们玩,任何游戏平台 上面只要

7、有棋牌类游戏的,那么它就有五子棋在里面,网络五子棋比赛,在联 众,263, QQ游戏,UC里进行了 10几年了可见,五子棋游戏在网络上面是非 常火暴的,而且在棋牌游戏里面玩家人数排名总会占到很前面,不愧是风靡全 球的棋牌游戏啊!在未来中,将会有越来越多的人关注五子棋,喜欢五子棋, 那么将其变为商业化也会越来越多,而且还可以以教育孩子的方式来将其嵌套 进去,或者用来做测试等等,可以说以后的五子棋游戏会是那么的精彩,那么 的让人憧憬。那么对于它的游戏开发和发展也将会上升到举足轻重的地位去, 它的发展会是相当之快的,就让我们拭目以待吧。2研究问题描述2.1问题定义问题定义的一个的关键问题是“要解决的

8、问题是什么”,这个是这个阶段必 须要明确要回答的问题。在没将问题定义好,试图准备下个阶段的任务。这明 显是不成熟,甚至不可能的事。本次系统设计中首先明确了需要解决的问题是五子棋 AI算法,基本的要 求是设计一款能够实现人机对战、人人对战和禁手的五子棋游戏,提供一些基 本的操作如退出系统,向后悔棋等操作,重点是放在 AI算法的研究。而并不 是美工设计,也不是为了提供各种操作丰富的接口。主要是通过这种可视化的 界面探讨AI,当然增加可玩性和美工会给系统润色不少。上面只是很粗略的明确大概的方向,严格按照软件工程的方法这个阶段需 要生产一份书面报告。需要通过对系统的实际用户访问调查,扼要地写出他对 问

9、题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄 清含糊不精的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。 本系统的需求很少也很明显了。2.2可行性研究这个阶段要回答的关键问题:“对于上一个阶段所确定的问题是否可行?” 为了回答这个问题,我们需要进行一次大大压缩和简化了的系统分析和设计的 过程,也就是在较抽象的高层次上进行的分析和设计的过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究 问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究 问题的范围,探索这个问题是否值得

10、去解,是否有可行的解决办法。可行性研 究以后的那些阶段将需要投入要多的人力物力。及时中止不值得投资的工程项 目,可以避免更大的浪费。根据这些基本的概念,我在技术上主要是通过相关文档资料的查找后确定 可行性,凭着大学期间打下厚实的专业科基础,特别是数据结构和算法,能够 在这段时间理解通透并应该有所改进,后来证明是对的。利用剩下时间也应该 来说也比较充裕的。经济上暂不考虑。下面主要从技术上进行分析:工具:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平 台(即JavaSE, JavaEE,

11、 JavaME)的总称。Java技术具有卓越的通用性、高效 性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学 超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全 球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。所 以用java来编写是一个很好的选择。算法:在这图论搜索技术这方面,前人已有很成熟的算法。如粗糙的有深 度优先算法(DFS)和广度优先算法(BFS)这两个基本的算法,关键需要解决的是 能够设计出一种高效的剪枝函数,减小搜索问题的规模。目前博弈类游戏中的 人工智能基本都采用极大极小值方法这对我来说是个挑战,而剪枝的则采用 Al

12、pha-Beta,通过丰富的文档资料初步了解到这些技术已经很成熟了。我们有 信心能解决好这个问题。2.3需求分析人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向 前看几步,把困难的问题分解成一些较容易的子问题,发展成为搜索和问题归 纳这样的人工智能基本技术。今天的计算机程序已能够达到下各种方盘棋和国 际象棋的锦标赛水平。但是,尚未解决包括人类棋手具有的但尚不能明确表达 的能力。如国际象棋大师们洞察棋局的能力。另一个问题是涉及问题的原概念, 在人工智能中叫做问题表示的选择,人们常能找到某种思考问题的方法,从而 使求解变易而解决该问题。到目前为止,人工智能程序已能知道如何考虑它们

13、要解决的问题,即搜索解答空间,寻找较优解答。在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件, 同时要提供人机和人人这样的功能,特别是人机部分,要考虑到不同级别的用 户,电脑智能不能太低需要有一定的智能下棋功能等等。 所以采用a -B剪枝法 算法时就是为了达到这些目标。2.4总体设计这个阶段必须回答的关键问题是:“概括地说,应该如何解决这个问题?” 首先,应该考虑几种可能的解决方案。如,目标系统的一些主要功能是用计算 机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人 机交互方式;信息存储使用传统的文件系统还是数据库。通常至少应该考 虑下述几类可能的方案:低成本

14、的解决方案。系统只能完成最必要的工作,不能多做一点额处的工 作。本系统的最基本要求就是能够实现必要的操作,其他额外的一些工作在后 面完成中等成本的解决方案。这样的系统不仅能够很好地完成预定的任务,使用 起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户 没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附 加的能力在实践中将证明是很有价值的。这个成本方案在完成上面的低成本方案后添加的。如增加保存棋局,美化 界面,实现观看电脑与电脑之间的对战等功能。高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和 特点。结构设计的一条基本原理就是程序应该模块

15、化,也就是一个大程序应该由 许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要 任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。 通常用层次图或结构图描绘软件的结构。2.5详细设计总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段 的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实 现这个系统呢?”这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格 说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包 含必要的细节,程序员可以根据它们写出实际的程序代码。2.6编码和单元测试这个阶段的关

16、键任务是根据以上阶段分析的软件模型,编写各个功能模块。要注意的是程序的扩张性和可读性。以便以后软件的升级修改。同时要仔细 的测试每个功能编写好的功能模块。3人工智能技术人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术,AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该 是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这 一方向。我们今天讨论的是策略类的人工智能。策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类 AI游戏 就是棋盘式游

17、戏。在这类游戏中,通常的策略类 AI程序都是使计算机判断目 前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜 分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。本课程设计 是基于AI中a -B剪枝算法的五子棋的博弈游戏,下面让我们来具体介绍一下 相关的内容。4算法设计4.1 a -B剪枝算法我们的程序主要是用a -B剪枝法实现的。其基本思想或算法是,边生成博 弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩 展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而 节约了机器开销,提高了搜索效率。具体的剪枝方法如下:(1)对于一个与节

18、点MIN,若能估计出其倒推值的上确界B,并且这个B值不 大于MIN的父节点(一定是或节点)的估计倒推值的下确界a,即aB,则就 不必再扩展该 MIN节点的其余子节点了(因为这些节点的估值对 MIN父节点 的倒推值已无任何影响 了)。这一过程称为a剪枝。(2)对于一个或节点MAX,若能估计出其倒推值的下确界a,并且这个a值不 小于MAX的父节点(一定是与节点)的估计倒推值的上确界B,即aNB,则 就不必再扩展该MAX节点的其余子节点了(因为这些节点的估值对 MAX父节 点的倒推值已无任何影响 了)。这一过程称为B剪枝。4.2极大极小树目前绝大部分的博弈类游戏中的人工算法都采用这种方法。假设己方为

19、MAX点,对方则为MIN点。如果当层的节点为奇数时那么就为 MAX层,同 样为偶数时就为MIN层。当在MAX层时,该层的值就应该为下一个 MIN层 中的最大一个的值。当在MIN层是,该层的值就应该为它子层 MAX的最小的 一个。通俗的说就是当轮到我方时,我们就应该选择一个最有利于我们的点, 预测对方可能下的最有利他方的点(相对我方来说就是最坏的点)。这样反复计 算下去就能够得到根节点的最大值,这个点也就是我们最佳下棋点。在计算这 个点时可以很明显的看出这是一个不断递归的过程,到达叶子节点时根据相关的计算规则算出该值然后向上一层不断的返回。下图中矩形代表极大层,椭圆 代表极小层。4.3深度优先搜

20、索(DFS)在图论中有两个很重要的遍历的方法,一个是深度优先搜索(DFS),另外 一个是广度优先搜索(BFS).这两个方法的主要区别在于下一个节点的选择。DFS首先选择它的连接节点,若它的下个节点已经全部被遍历过或者不存在的 话。则向上返回到上一个节点,在遍历其他的未被访问过的点。很容易想到这 要用到堆栈结构,使用一个递归来实现。而BFS则是逐个的遍历它的联接接点, 将已经访问过的点放入队列中。然后再依次取出继续这个过程。DFS遍历过程如下:首先从A点出发访问它的领接点B,因为B的领接点C,F均未被访问过, 所以B点选择C (当然也可以选择F点)作为下一个要访问的点,C点的领接 点是D,F选择

21、下个节点D,而D的邻接点只有一个E且未被访问过,就将E作 为了它下个节点。这时因为E已经没有可访问的邻点,所以向上一层返回到D, 发现D也已经没有可访问的点了,继续向上层返回到C,由于C的邻节点F未 被访问过,那么就访问F。所以整个过程的遍历结果为:ABECFD。BFS的遍历过程为A分B分E分C分F分D。4.4静态估值函数当极大极小树到达叶子节点时,需要估算一下当前盘面的值。这个就根据 某个计算规则计算也即是估值函数。因为这个值是已经确定的所以称为静态。当只有一个点时,并且相邻的无对方的棋子或者不是边界等“阻碍物” 就给他50,否则给予10。当两个点时,并且相邻的无对方的棋子或者不是边界等“阻

22、碍物”给予 1000,若存在一方有“阻碍物”则给以100,否则给予10。当是活三的时候给予3600,当存在一边被堵时,就给予500。否则给予10。当是活四的时候给以500000,当一边被堵时,给予50000。否则给予10当是五连子的时候就给予最高分1000000。最后判断是否是己方的,若不是则给予负号。静态估值函数会很严重的影响到算法的智能,所以可根据在下棋的过程中 不断的做出调整,使其更加的合理。根据一些测试,这组静态估值函数能够很 好的反映棋盘重要性指标。5软件设计和实现5.1数据结构定义本程序定义15*15的五子棋棋盘,实现算法,在算法中采用的数据结构包 括:int isChessOn描

23、述当前棋盘,0表示黑子,1表示白字,2表示无子;int pre用来记录棋点的x,y坐标。public class ChessPanel extends JPanel( private ImageIcon map;private ImageIcon blackchess;private ImageIcon whitechess;public int isChessOn ;protected boolean win = false;protected int win_bw;protected int deep = 3, weight = 7;public int drawn_num = 110;i

24、nt chess_num = 0;由于本课程设计是基于Java语言开发的,在Java中只能用类来表示并实 现所定义的数据结构。所以下面将用类来描述相应的数据结构及算法:棋盘背景位图黑子位图/白子位图棋局/是否已经分出胜负/胜利棋色/搜索的深度以及广度/和棋步数总落子数目坐标public int pre = new intdrawn_num + 12;最多(drawn_num + 1) 个 public int sbw = 0;/记录下棋点的x,y/玩家棋色黑色0,白public int bw = 0;0:黑色(默认),1:白色/边界值,用于速度优化protected int x_max = 1

25、5, x_min = 0;protected int y_max = 15, y_min = 0;protected boolean able_flag = true;禁手1:有禁手(默认private int h;private int w;private int insx;private int insy;private Point mousePoint;private int winer;private boolean humanhuman=false;private int plast=0;public int BLACK_ONE;public int WHITE_ONE;public

26、 int NONE_ONE;public int N;/当前应该下的棋色/是否选择禁手标志0:无棋子长棋子宽插入棋子的位置鼠标当前位置/获胜方/是否是人人对弈/走了几步了,/0表黑子/1表白子/2表无子棋盘边长/alpha/beta/step搜索当前搜索状态极大值/祖先节点得到的当前最小最大值,用于alpha剪枝 祖先节点得到的当前最大最小值,用于beta剪枝。 还要搜索的步数当前搜索子树极大值/returnprotected int findMax(int alpha, int beta, int step) (int max = alpha;if (step = 0) (return ev

27、aluate();int rt = getBests(1 - sbw);for (int i = 0; i max)max = t;/beta剪枝if (max = beta)return max;return max;/搜索当前搜索状态极小值/alpha祖先节点得到的当前最小最大值,用于alpha剪枝/beta祖先节点得到的当前最大最小值,用于beta剪枝/step还要搜索的步数/return当前搜索子树极小值。protected int findMin(int alpha, int beta, int step) (int min = beta;if (step = 0) (return

28、evaluate();int rt = getBests(sbw);for (int i = 0; i rt.length; i+) (int x = rti0;int y = rti1;int type = getType(x, y, sbw);if (type = 1)/玩家成 5return -100 * ( getMark(1) + step*1000 );/ 预存当前边界值int temp1=x_min,temp2=x_max,temp3=y_min,temp4=y_max;isChessOnxy = sbw;resetMaxMin(x,y);int t = findMax( alp

29、ha, min, step - 1 );isChessOnxy = 2;/还原预设边界值x_min=temp1;x_max=temp2;y_min=temp3;y_max=temp4;if (t min)min = t;/alpha 剪枝if (min = alpha) (return min;return min;/ 选取局部最优的几个落子点作为下一次扩展的节点/bwf棋色0:黑棋1:白棋/return选出来的节点坐标private int getBests(int bwf) (int i_min=(x_min=0 ? x_min:x_min-1);int j_min=(y_min=0 ?

30、y_min:y_min-1);int i_max=(x_max=15 ? x_max:x_max+1);int j_max=(y_max=15 ? y_max:y_max+1);int n = 0;int type_1,type_2;int rt = new int(i_max-i_min) * (j_max-j_min)3;for ( int i = i_min; i i_max; i+)for (int j = j_min; j n? n:weight;int bests = new intsize3;System.arraycopy(rt, 0, bests, 0, size); ret

31、urn bests;/计算指定方位上的棋型/ x,y方向线基准一点。/ex,ey指定方向步进向量。/ k棋子颜色,0:黑色,1:白色该方向上的棋子数目以及活度private int count(int x, int y, int ex, int ey, int bwf) (该方向没意义,返回0if( !makesense(x, y, ex, ey, bwf)return new int (0, 1;/正方向 以及 反方向棋子个数 int rt_1 = 1,rt_2 = 1;/总棋子个数int rt = 1;/正方向以及反方向连子的活度int ok_1 = 0,ok_2 =0;/ 总活度int

32、ok = 0;/连子中间有无空格boolean flag_mid1 =false,flag_mid2 = false;/连子中间空格的位置 int flag_i1 = 1,flag_i2 = 1;if (isChessOnxy != 2)(throw new IllegalArgumentException(position x,y must be empty!.); int i;/往正方向搜索for (i = 1; x + i * ex = 0 & y + i * ey = 0; i+)(if (isChessOnx + i * exy + i * ey = bwf)rt_1+;/位置为空,

33、若中空标志为false,则记为中空并继续搜索 否 贝 Lbreakelse if(isChessOnx + i * exy + i * ey = 2) ( if(!flag_mid1) (flag_mid1 = true;flag_i1 = i;elsebreak;/位置为对方棋子elsebreak;/计算正方向活度,/最后一个位置不超过边界if (x + i * ex = 0 & y + i * ey = 0) (/最后一个位置为空位+1活if( isChessOnx + i * exy + i * ey = 2) ( ok_1+;/若是在尾部检测到连续的空格而退出搜索,则不算有中空 if(

34、rt_1 = flag_i1)flag_mid1 = false;/若中空的位置在4以下且 棋子数=4,则这一边的4非 活if(flag_mid1 & rt_1 3 & flag_i1 = 2) if(isChessOnx + (i-1) * exy + (i-1) * ey = 2) ( ok_1+;flag_mid1 = false;/最后一个位置是边界搜索了 2步以上,且前一个是空格,则不算中空,且为活的边else if(i = 2 & isChessOnx + (i-1) * exy + (i-1) * ey = 2) (ok_1+;flag_mid1 = false;/往反方向搜索f

35、or (i = 1; x - i * ex = 0 & x - i * ex = 0 & y - i* ey 15; i+) (if (isChessOnx - i * exy - i * ey = bwf) rt_2+;else if(isChessOnx - i * exy - i * ey = 2) ( if(!flag_mid2) (flag_mid2 = true;flag_i2 = i;elsebreak;elsebreak;/计算反方向活度if (x - i * ex = 0 & y - i * ey = 0) (if( isChessOnx - i * exy - i * ey

36、 = 2) ( ok_2+;if(rt_2 = flag_i2)flag_mid2 = false;if(flag_mid2 & rt_2 3 & flag_i2 = 2 ) if(isChessOnx - (i-1) * exy - (i-1) * ey = 2) ( ok_2+;flag_mid2 = false;else if(i = 2 & isChessOnx - (i-1) * exy - (i-1) * ey = 2) ( ok_2+;flag_mid2 = false;/分析棋子类型/两边都没中空,直接合成if( !flag_mid1 & !flag_mid2 ) (rt =

37、rt_1 + rt_2 - 1;ok = ok_1 + ok_2;return new int rt, ok;/两边都有中空else if( flag_mid1 & flag_mid2 )int temp = flag_i1 + flag_i2 - 1;/判断中间的纯连子数,在5以上,直接返回;为4,返回活4;if(temp = 5)return new int temp, 2;if(temp = 4)return new int temp, 2;/先看有没死4,再看有没活3,剩下只能是死3if(rt_1 + flag_i2 - 1 = 4 II rt_2 + flag_i1 - 1 = 4)

38、return new int 4, 1;if(rt_1+flag_i2-1 = 3 & ok_1 0 II rt_2+flag_i1-1 = 3 & ok_2 0)return new int 3, 2;return new int 3, 1;/有一边有中空else /总棋子数少于5,直接合成if( rt_1 + rt_2 - 1 = 5)return new int rt_2 + flag_i1 - 1, ok_2 + 1;if(flag_mid2 & rt_1 + flag_i2 - 1 = 5)return new int rt_1 + flag_i2 - 1, ok_1 + 1;if(flag_mid1 & (rt_2 + flag_i1 - 1 = 4 & ok_2 = 1 II flag_i1 = 4)return new int 4, 2;if(flag_mid2 & (rt_1 + flag_i2 - 1 = 4 & ok_1 = 1 IIflag_i2 = 4)return new int (4, 2;return new int (4, 1;5.2程序流程图6性能测试6.1程序执行结果由五子01mb 整勘3.人人博弈4. 禁手选择5. 悔棋选择M神-垣子俱-=机& i&B AiAh许特设目娜Tt?fJFEaJ-.Ti*Qk13Bhi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号