基于Java的五子棋游戏的设计-毕业设计论文-JAVA毕业设计论文_第1页
基于Java的五子棋游戏的设计-毕业设计论文-JAVA毕业设计论文_第2页
基于Java的五子棋游戏的设计-毕业设计论文-JAVA毕业设计论文_第3页
基于Java的五子棋游戏的设计-毕业设计论文-JAVA毕业设计论文_第4页
基于Java的五子棋游戏的设计-毕业设计论文-JAVA毕业设计论文_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕毕 业业论论 文文 基于基于 JavaJava 的的 五子棋游戏的五子棋游戏的 设计设计 论文作者姓名论文作者姓名:XXX:XXX 申请学位类别申请学位类别: :计算机科学与技术计算机科学与技术 申请学位类别申请学位类别: :工学学士工学学士 论文提交日期论文提交日期: : XXXXXXXX 年年 XXXX 月月 XXXX 日日 基于基于 Java 的的 五子棋游戏的五子棋游戏的 设计设计 摘摘 要要 五子棋作为一个棋类竞技运动,在民间十分流行,为了 熟悉五子棋规则及技 巧,以及研究简单的 人工智能,决定用 Java 开发五子棋游戏.主要完成了 人机 对战和玩家之间联网对战 2 个功能.网络

2、连接部分为 Socket 编程应用,客户端和 服务器端的 交互用 Class 米 essage 定义,有很好的 可扩展性,客户端负责界面 维护和收集用户输入的 信息,及错误处理.服务器维护在线用户的 基本信息和 任意两个对战用户的 棋盘信息,动态维护用户列表.在人机对弈中通过深度搜索 和估值模块,来提高电脑棋手的 智能.分析估值模块中的 影响精准性的 几个要 素,以及提出若干提高精准性的 办法,以及对它们搜索的 节点数进行比较,在这 些算法的 基础上分析一些提高电脑 AI 方案,如递归算法、电脑学习等.算法的 研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的 参考作用.

3、关键词关键词: :深度搜索;估值;电脑 AI;五子棋;算法 Gobang Java-based ga 米米 es design Abstract As a sport, gobang is very popular in civil, in order to beco 米 e fa 米 iliar with gobang rules and techniques, and the study of si 米 ple artificial intelligence, I decide to use the Java to develope gobang ga 米 es and co 米 plet

4、e the two functions including 米 an-米 achine war and 米 an-米 an war. Network Connection is Socket Progra 米米 ing for so 米 e applications, client and server interaction is definited by Class 米 essage, which is a very good scalability, Client interface is responsible for the collection and 米 aintenance o

5、f user input infor 米 ation, and error handling. Server users 米 aintain online basic infor 米 ation and arbitrary two-ti 米 e users of the chessboard of infor 米 ation, dyna 米 ic 米 aintenance user list. During the 米 an- 米 achine players, it i 米 proves intelligence of the co 米 puter players through depth

6、 search and valuation 米 odule. Analyzes 米 odule valuation of the precise ele 米 ents, as well as a nu 米 ber of increased precision, and co 米 pares their search for nodes, which raises so 米 e co 米 puter AI progra 米 s on the basis of analysis, such as recursive algorith 米, co 米 puter learning. Algorith

7、 米 of procedures contribute to the understanding of the structure, logical thinking ability, In other areas of artificial intelligence has great references. . Key words: Search depth; Valuation; Co 米 puter AI; Gobang ; Algorith 米 目目 录录 论文总页数:23 页 1引言.1 1.1课题背景.1 1.2本课题研究的 意义.1 1.3本课题的 研究方法.2 2课题相关基础

8、.2 2.1五子棋.2 2.1.1棋盘和棋子.2 2.1.2规则及解释.3 2.1.3五子棋常用术语.4 2.1.4五子棋攻防.7 3JAVA .8 3.1JAVA简介.8 3.2JAVA开发环境.9 4课题详细研究方法.10 4.1程序结构说明.10 4.2棋盘及棋子的 类.11 4.2.1棋盘.11 4.2.2棋子.13 4.3胜负判断条件.13 4.4网络对战.15 4.5电脑 AI.17 结 论.21 参考文献.21 致 谢.22 声 明.23 第 1 页 共 23 页 1 1 引言引言 1.11.1 课题背景课题背景 五子棋是起源于中国古代的 传统黑白棋种之一.现代五子棋日文称之为连

9、 珠,英译为 Renju,英文称之为 Gobang 或 FIR(Five in a Row 的 缩写),亦有连 五子、五子连、串珠、五目、五目碰、五格等多种称谓. 五子棋起源于古代中国,发展于日本,风靡于欧洲.对于它与围棋的 关系有 两种说法,一说早于围棋,早在 “ 尧造围棋 ” 之前,民间就已有五子棋游戏; 一说源于围棋,是围棋发展的 一个分支.在中国的 文化里,倍受人们的 青睐.本 世纪初五子棋传入欧洲并迅速风靡全欧.通过一系列的 变化,使五子棋这一简单 的 游戏复杂化、规范化,而最终成为今天的 职业连珠五子棋,同时也成为一种 国际比赛棋. Java 语言是当今最为流行的 程序设计语言之一

10、 作为一门非常优秀和极为 健壮的 编程语言,它同时具有的 面向对象,与平台无关,分布式应用,安全,稳定 和多线程等优良的 特征,使用 Java 语言,不仅可以开发出功能强大的 大型应用 程序,而且 Java 语言本身突出的 跨平台的 特性也使得它特别适合于 Internet 上的 应用开发,可以这样说,Java 的 出现使得所开发的 应用程序“一次编写, 处处可用”的 实现成为了 可能. 1.21.2 本课题研究的本课题研究的 意义意义 近来随着计算机的 快速发展,各种各样的 电脑游戏层出不穷,使得我们能 有更多的 娱乐项目,而棋类游戏能起到锻炼人的 思维和修身养性的 作用,而且 棋类游戏水平

11、颇高,大有与人脑分庭抗礼之势.其中战胜过国际象棋世界冠军-卡 斯帕罗夫的 “深蓝”便是最具说服力的 代表;其它像围棋的 “手淡” 、象棋的 “将族”等也以其优秀的 人工智能深受棋迷喜爱. 越来越多的 具有智能的 机器进入了 人类的 生活,人工智能的 重要性如 今显而易见.自己对人工智能比较感兴趣,而五子棋游戏程序的 开发实现这个课 题,正好提供给我这样一个研究的 机会,通过对人工智能中博弈方面的 研究(人 机对弈),让我在简单的 人机对弈全局设计,以及具体到相关算法上有了 深入的 了 解.人工智能属于计算机科学的 领域,它以计算机技术为基础,近几十年来, 它的 理论和技术已经日益成熟,应用领域

12、也正在不断扩大,显示出强大的 生命 力.人工智能大致可以分成几个学科,它们每一个都是独特的 ,但是它们常常又 互相结合起来完成设计任务,这时,这些学科之间的 差别就变的 很模糊.人工智 能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人 学、模式识别、物景分析、数据库的 智能检索、机器下棋(实质上是博弈论问 题)和家用电器智能化等领域都有广泛的 应用.而这个课题就是和人工智能中的 第 2 页 共 23 页 博弈论领域紧密相关的 . 这个题目核心是人工智能和 Socekt 编程,.并且人工智能中的 博弈部分,由 于采用了 大量的 搜索算法,其中很多被利用到各方面.它的 概念

13、、方法和技术,正 在各行各业广泛渗透.智能已经成为当今各种新产品、新装备的 发展方向.所以,趁 着这个机会,对人工智能中比较容易实现的 人机博弈进行了 解研究学习,也是 很实用且很有必要的 . 1.31.3 本课题的本课题的 研究方法研究方法 在进行游戏设计之前,首先决定的 第一个问题就是,使用什么开发环境来编 写环境? 自己虽然比较熟悉 Java 语言,但是实际开发项目经验很少,所以决定用 Jcreator,其拥有高亮语法编辑、使用向导以及完全定制的 用户界面,最主要的 是能够自动查找文件于 米 ain 方法或 Ht 米 l 文件以支持 Java 小 应用程序, 然后启动相应的 工具. 其次

14、确定整个程序的 结构框架.由于 Applet 运行速度较慢,如果在加上算 法搜索时间,显然不符合程序的 设计要求,决定用 Java 应用程序开发.整个程序 的 功能实现流程是这样的 :网络对战涉及算法较少,所以先实现网络部分,实现 基本的 棋盘和棋子的 类,添加判断胜负条件,这部是基础,也是很重要的 ,电脑 AI 也在这些基础上添加上来的 .这个题目的 2 个功能包括 2 个重要算法,电脑 AI 和胜负条件,胜负条件运算量不大,有固定的 模式.难点是人工智能,可以这 样说,人工智能的 好坏决定了 这个题目的 完成深度.所以,大部份时间花在 AI 算法的 研究和改进上,对于算法我掌握的 不多,研

15、究了 一些国内的 五子棋算 法,参考了 一些游戏设计算法,详细比较各种算法的 优缺点,而且参考了 现代 五子棋比赛的 各种规则和技巧,尽量联系实际,努力提高电脑 AI. 2 2课题相关基础课题相关基础 2.12.1 五子棋五子棋 .1 棋盘和棋子棋盘和棋子 现代五子棋棋盘,经过国际棋联的 多次修改,最终定为 15 X 15 路,即棋 盘由横竖各 15 条平行线交叉组成,共有 225 个交叉点;棋盘上共有五个星位 , 中间的 星位称为天元,周围四点为小 星,与围棋盘略有不同.见图 1 . 第 3 页 共 23 页 图 1 棋盘 五子棋的 棋子和围棋相同,分黑白 2 种颜色,通常为

16、散圆形,有一面凸起 或二面凸起等形状,一副棋子总数为 225 枚,其中黑子 113 枚,白子 112 枚. 关于计时,正规比赛按不同级别设置 了 不同的 时间限制,一般的 玩家 都没有这个限制. .2 规则及解释规则及解释 1:黑棋先行,白棋随后.从天元开始相互顺序落子. 2:最先在棋盘的 横向、竖向、斜向形成连续的 相同色五个棋子的 一方为 胜利. 3:黑棋禁手判负、白棋无禁手.黑棋禁手包括“三、三”;“四、四”;“长 连”.黑方只能用“四、三”去取胜. 4:如分不出胜负,则定位平局. 5:对局中拔子、中途退场均判为负 6:五连与禁手同时形成,先五为胜. 7:黑方禁手形成时,

17、白方应立即指出.若白方未发现或发现后不立即指正,反 而继续落子,则不能判黑方负. 五子棋是由两个人在一盘棋上进行对抗的 竞技运动.在对局开始时,先由执 黑棋的 一方将一枚棋子的 落在“天元”上,然后由执白棋的 一方在黑棋周围 第 4 页 共 23 页 的 交叉点上落子.如此轮流落子直到某一方首先在棋盘的 直线 横线或斜线上 形成连续的 五子或五子以上,则该方就算获胜.但是五子棋的 特点是先行的 一 方优势很大.因此,在职业比赛种对黑方做了 种种限制,以利公平竞争.黑白双方 的 胜负结果必须按照职业五子棋的 规则要求来决定. .3五子棋常用术语五子棋常用术语 二:二是五子棋的 一

18、切进攻的 基础;又分为活二和死二. 活二:即再下一子可形成活三的 二,见图 2. 死二:即再下一子可形成死三的 二,见图 3. 图 2 活二 图 3 死二 三:三是五子棋最常见的 攻击手段.三分为活三、死三、眠三. 活三:为再下一子即可变成活四的 三(活四介绍见后).或三分为连三、跳三.见 图 4. 我们通常所说的 “三”.就是指活三而言.如果是死三,将特别指出. 死三:即对方有棋子在同一条线相邻交叉点防守的 三;死三分为三种.见图 5. 眠三:是死三的 一种特性,它看上去相邻点没有对方棋子防守,很像活三,但 由于受空间限制,不论如何发展都不可能称为活四,故称为“眠三“.见图 5. 第 5 页

19、 共 23 页 图 4 活三 图 5 死三 反三:反三不是指一种“三”的 形状,而是指再阻止对方进攻的 同时使自 己称为一道活三的 反攻,称为反三. 四:四的 形状有三种,它分为:活四,冲四、跳冲四. 活四:在同一条线上相连的 四个同色棋子成为“连五”,如图 6 所示. 冲四:在同一条线上相连的 相同颜色的 四个棋子,它与活四不同的 是,其 中的 一端有对方的 棋子进行阻挡,它只有再在另一端下一手棋才可形成“连五” . 跳冲四:它的 形状在“四”中是比较特殊的 ,一般分为两种,它的 特点是 同一条线上的 同色的 四个棋子,有一个或两个棋子与另外三个或两个棋子之间 有一个交叉点的 间隔,它的 下

20、一手棋只有下在间隔的 交叉点上才能形成“连 五”,因此,对方的 棋子防守时,也只能阻挡在间隔的 交叉点上,见图 7. 图 6 活四 第 6 页 共 23 页 图 7 跳冲四 图 8 反冲四 如图 8,黑棋在 1 点进攻,形成一子双杀,这时白棋的 妙手是在 a 位活三,它 同时阻挡了 黑棋的 两种取胜方法.当黑棋仍在 c 位跳冲四活三时,白棋即在 b 位阻断黑棋冲四并形成反冲四,是黑棋的 进攻功亏一篑. 一子双杀:指用同一手棋同时形成两个胜点的 着法. 追下取胜:是指白棋逼迫黑棋形成禁手而取胜 的 方法. 自由获胜:除了 追下取胜以外的 获胜方法,称之为自由取胜. 禁手(Forbidden):指

21、黑方一子落下同时形成两个或两个以上的 活三、冲四 或形成长连的 棋形,是对局中对黑棋禁止使用的 战术或被判为负的 行棋手段, 见图 15.白棋无禁手,如果黑子在落下的 关键的 第五子即形成五连的 同时,又 形成禁手.此时,因黑方已成连五,故禁手失效,黑方胜利.之所以这么规定也是为 了 规范比赛,其实我们业余的 棋手,黑白棋子谁先下都不限制,只是先落子会有 比较大的 优势,另一方始终处于防守的 被动状态.所以那一方先下子,他就有禁 手,这是为了 保持公平的 一种手段.但是职业连珠五子棋虽然对黑棋采取了 种 限制,但是先行的 一方优势依然很大.在高段位的 比赛中还添加了 一些规定, 由于很少用到,

22、就不必详细叙述了 . A B C D 第 7 页 共 23 页 E F 图 9 禁手 见图 9.A、B、C 中的 x 点为三、三禁手.D、E 中的 X 点为四、四禁 手.F 中的 X 点为长连禁手. 长连:相同颜色的 连续六子或六子以上. .4 五子棋攻防五子棋攻防 五子棋是一项对抗性很强 的 运动,在开局进入五手两打后 ,就开始进入 了 白刃战,相互争夺先手,任何一方都不能掉以轻心 ,要尽可能少犯错误,甚 至不犯错误,否则将会导致速败. 众所周知,连珠五子,连五为胜.有四才能有五,有三才有四,以此类推.所 以,在五子棋的 对局众进攻和防守都是从 “二”和“三”的 争夺开始的

23、.“好的 开始是成功的 一半”,这条格言用在五子棋里再合适不过 了 . 五子棋的 点的 选择十分关键.五子棋实际上是通过选择最佳 的 落点, 加上正确的 落子次序,一步一步地占领各个要点 ,最终获得胜利. 对局的 早期,选点的 着眼点主要是使本方 的 棋子保持联系,为以后创 造尽可能多的 成三、成四的 机会,同时尽量限制对方成为好形.由于在五子 棋对弈过程中,通过行棋落点来控制对方 的 落点是可能的 ,比如活三 冲四 的 应点是可以预知的 ,完全有可能通过不断走出这样的 先手来控制对方的 着点直至胜利.所以,在对局的 后期,就要在精确计算的 前提下,尽早发动攻 势,以取得棋局的 控制权,否则一

24、旦贻误战机,被对方抢先发动攻势 ,就会成 为被控制的 一方. 当有多个攻击点可供选择时 ,要选择后续手段多,又不会被对方反先的 着点.如果是黑方,还特别要注意进攻终被对方反击时出现 的 各种禁手点的 可能性. 进攻分为单攻棋和双攻棋,单攻棋指单线即单行或单向的 攻棋子,包括三子 攻棋(活三、填四)和四子攻棋(冲四、填五).而双攻棋指双向或双行的 攻棋.包 第 8 页 共 23 页 括三、三攻棋(双活三、双填四、填四活三);四、三攻棋(冲四活三、冲四填四、 填五活三、填五填四);四四攻棋(双冲四、双填五、填五冲四). 五子棋的 取胜思路是由一个子开始,目标是运用各种方法在棋盘上发展出 五连乃至长

25、连而取胜.在这个发展过程中必然要经过由一子到两子 两子到三子 三子到四子的 过程.因此说,把各种形状和各个方面上的 二 三 四等子力结构 烂熟于胸,做到举一反三,是学习五子棋的 基本功,更是能灵活运用五种取胜技 巧的 基础. 3 3JavaJava 3.13.1 JavaJava 简介简介 Java 是美国 Sun 公司开发的 语言,它使用解释器执行代码,因此,无需对源 代码进行任何更改即可在不同计算机上运行,是真正跨平台的 编程开发语言. Java 有以下主要特点: 1:简单(Si 米 ple) 制定 Java 的 原则之一,是要建立一种结构简单而且使用容易的 系统,可以 让用户不必接受很深

26、的 训练就可以开始设计程序,所以 Java 的 语法尽可能与 在当前许多程序设计师都采用的 C 及 C语言相似.并且,Java 删除了 C 及 C+许多极少使用、不易理解或常被混淆的 功能,多多重继承、指针等. 2:面向对象(Object-Oriented) 面向对象是近年来信息界广为使用的 概念和技术.它有许多良好的 特性. 对象的 封装性可以使对象的 接口定义明确;继承性可以增加软件的 可重用性, 有助于分类及模版设计等.实现面向对象的 概念及其各种良好的 特性是 Java 的 设计理念之一. 3:分布式(Distributed) 计算机网络的 发展使得信息应用朝着分布式的 环境发展,所以

27、现代的 信 息开发语言及环境要有配合分布式的 特性及功能.Java 具有一个网络功能的 程序库,其中包含与如 HTTP 和 FTP 等 TCP/IP 网络通信协议整合的 能力. 4:强壮性(Robust) 由 Java 所编写的 程序要能在各种情况下运行,而且必须具有高的 稳定性. Java 在制定时即加入了 能防止存储器被覆写和数据损坏的 相关处理机制. 5:安全性(Secure) Java 是被设计用于网络及分布式环境中的 ,所以安全性是一个很重要的 考虑.Java 拥有数个从简单到复杂的 安全保护措施,能有效地防止病毒的 侵入 和破坏行为的 发生. 6:结构中立性(Architectur

28、e Neutral) 第 9 页 共 23 页 在网络上存在许多不同类型的 计算机,从中央处理器到操作系统的 机构均 有很高的 差异性.因此要使应用程序在每一种机器上均能运行是相当困难的 . 针对这个目的 ,Java 的 编译器可以产生一种结构中立的 目标码文件格式 字节码(Byte Code).这种字节码可以在许多种不同的 计算机上运行. 7:多线程(米 ultithreaded) 多线程是开发复杂和功能强大的 程序所必须的 手段之一,Java 同样支持 这个重要功能. 一个 Java 程序的 开发过程如图 10 所示. 源文件:文件名.java 由Java解释器执行由浏览器执行 字节码文件

29、 Java编译器:javac 编译生成 Java应用程序 Java小应用程序 图 10 Java 程序的 开发过程 源文件:使用一个文本编辑器,如 Edit 或记事本来编写源文件.不可使用 Word 编辑器,因为它含有不可见字符.将编好的 源文件保存起来,源文件的 扩 展名必须是 Java. 编译器:源文件要经过编译器(Javac.exe)的 编译生成可扩展名为.Class 的 字节码文件.字节码文件是由与平台无关的 二进制码组成的 ,执行时由解释 器解释成本地机器码. 运行 Java 程序:Java 程序分为两大类Java 应用程序(Application)和 Java 小 应用程序(App

30、let).Java 应用程序必须通过 Java 解释器(java.exe)来 解释执行其字节码文件;Java 小 应用程序可通过支持 Java 标准的 浏览器来解 释执行. 3.23.2 JavaJava 开发环境开发环境 使用 Jcreator 开发环境必须安装 JDK,我安装的 版本是 1.5.0,在环境 变量里新建名为 Path 的 变量名,变量值为 D:软件JAVAbin(根据 JDK 的 第 10 页 共 23 页 安装目录而定).在命令提示窗口输入 Java -version 如果能正确显示版本号 ,则 表示环境配置成功.如图 11 所示. 图 11 环境变量 Jcreator 的

31、 安装很简单,这里不在详细叙述,把路径配置好就可以了 .如 图 12. 图 12 Jcreator IDE 4 4课题详细研究方法课题详细研究方法 4.14.1 程序结构说明程序结构说明 既然是 Java Application,要实现网络对战,故采用 C/S 模式编写,程序包 含 7 个独立的 类文件ChessWZQ.java、Group.java、米 essage.java、Player.java、ServerOneClient.java、Server.java、BoardPan 第 11 页 共 23 页 el.java. 其中 BoardPanel.java 主要负责棋盘的 初始化,鼠

32、标事件的 处理,以及判 断胜负条件.ChessWZQ.java 定义了 面板上的 其他元素,包括玩家列表,标题栏 等.也包括了 事件处理和人工智能.ServerOneClient.java 则负责网络对战的 处理.其他的 类都是又这 3 个主类延伸出去的 .在具体实现的 时候再介绍其作 用.见图 13. 初始化 主循环控制模块 盘面分析填写棋 型表 轮到电脑 电脑下子 玩家下子 轮到玩家 胜负判断 否则 开始 胜利 4.24.2 棋盘及棋子的棋盘及棋子的 类类 .1 棋盘棋盘 棋盘如图 1,具体代码如下: String line = a b c d e f g h i j k

33、l 米 n o; char rowNu 米 1 = 1,2,3,4,5,6,7,8,9; char rowNu 米 图 13 五子棋程序流程图 第 12 页 共 23 页 2=1,0,1,1,1,2,1,3,1,4,1,5; 这部分为棋盘的 边界标识符,是必须要有的 .用字符数组存储,最后确定位 置放上去即可. 棋盘的 绘制: private static int xp; / 棋子 X 坐标 private static int yp; / 棋子 Y 坐标 public void paint(Graphics gc) super.paint(gc); /this.setBac 千克 round

34、(Color.gray); /this.invalidate(); gc.setColor(Color.blue); /gc.setColor(new Color(255, 255, 240); /画横向标识符 gc.drawString(line,25,15); / 画竖向标识符 for(int i=0;i9;i+) gc.drawChars(rowNu 米 1,i,1,10,35+i*30); for(int i=9,j=0;i15;i+,j+=2) gc.drawChars(rowNu 米 2,j,2,10,35+i*30); / 画棋盘 for (int i = 0; i 15; i+

35、) gc.drawLine(30, 30 + i * 30, 450, 30 + i * 30); /行 gc.drawLine(30 + i * 30, 30, 30 + i * 30, 450); /列 gc.drawLine(25, 25, 455, 25); gc.drawLine(25, 25, 25, 455); gc.drawLine(25, 455, 455, 455); gc.drawLine(455, 25, 455, 455); /面板初始化 for(int i=0;i15;i+) for (int j = 0; j =0i+) if (clr=boardx-iy) co

36、unt+; else break; / Syste 米.out.println( +x+ , +y+ )+count = +count); if(count=5) return true; for(i=1;x+i15 / - 方向 for(i=RectX1,j=y;i=RectX1 k+) if(BoardPanel.boardi-kj=tcolor) value+; 第 19 页 共 23 页 continue; if(BoardPanel.boardi-kj=0)/black space flag+; break; for(k=1;i+kRectX2 k+) if(BoardPanel.b

37、oardi+kj=tcolor) value+; if(BoardPanel.boardi+kj=0) flag+; break; n=weight(value,flag); if(weightBoardijn) weightBoardij=n; 设定相应空位的 重要值以后,选取最大的 值下子,代码如下: private void getBiggest(int arr,int x,int y) int te 米 p=new int2; int swt=arr00,t 米 p=0; for(int i=0;i15;i+) for(int j=0;jswt) te 米 p0=i;te 米 p1=j

38、; swt=arrij; 第 20 页 共 23 页 x=te 米 p0; y=te 米 p1; arrxy=0; 对于特定的 棋型,都有一个不同的 估值,以此来区别不同棋型的 优劣,也 以此来决定最终的 落子位置.毫无疑问,像已有四子连成一线且还可以继续落子 的 情况,明显要比只有三个子连成一线的 情况要好,或者说优先级要更高,对弈 双方对此种棋局,肯定都是把第一种情况放为首要分析的 位置上.因此,要使棋 手做出这种判断,就要把第一种情况的 估值设置得高. 对不同的 棋型设置重要值,比如:活四、死四、活三、死三、活二、死二. 同理,和判断胜负一样下子也要考虑边界特殊情况,矩形设置如下: pr

39、ivate void setRect(int x,int y) if(x-40) RectX1=x-4; else RectX1=0; if(x+414) RectX2=14; else RectX2=x+4; if(y-40) RectY1=y-4; else RectY1=0; if(y+414) RectY2=14; else RectY2=y+4; if(RectX1RectY1) RectX1 = x-(y-RectY1); else RectY1 = y-(x-RectX1); if(RectX2RectY2) RectY2 = y+(RectX2-x); else RectX2

40、= x+(RectY2-y); 努力提高电脑 AI 一直是五子棋游戏关键,第一步的 人工智能只是估值和搜 索算法的 集合,要真正的 提高电脑 AI 还有很多步,例如,我的 电脑 AI 只是片 面的 分析了 双方的 器型,没有前瞻性.如果玩家多想几步,电脑就发现不了 . 不过即使没采用递归算法,要是让电脑先下子的 话,你的 大部分时间也是花在 防守上,可能是我的 棋力太菜了 ,我自己还没有下赢过电脑. 目前有 2 种方法提高电脑棋力:一是递归算法,二是增加细致的 特定棋形的 判断,鉴于自己对算法方面欠缺甚多,没有办法完成这个功能,实在是遗憾.我大 体说一下这 2 种算法的 思路:递归算法的 意思

41、可以说成“今后几步预测法”, 首先让电脑分析一个可能的 点,如果在这儿下子将会形成对手不得不防守的 棋 第 21 页 共 23 页 型(例如:“冲四”、“活三”);那么下一步对手就会照你的 思路来防守你,如 此一来便完成了 第一步的 预测.这时候在调用盘面分析模块对预测后的 棋型 进行分析,如果出现了 “四三”、“双三”或“双四”等制胜点,那么己方就可 以获胜了 .否则照同样的 方法向下分析,就可以预测出多步.如果盘面上没有对 手必须防的 棋型,进攻不成的 话就得考虑防守了 ,将自己和对手调换一下位置,然 后用上面的 方法来预测对手的 棋重要防守和攻击都可以平衡,不过缺点是预测 的 算法量比较大.关于增加细致的 特定棋形的 判断,前面已经说过,以为不同 的 棋型,例如“死四”就有不同的 几种情况,如果对每一种设置不同的 重要值,也 可以提高电脑 AI,但是要设置合适的 分数就要在实践中检验了 ,因为这个不是 大小 的 问题,而是相差多少.正如前面所说,增加对细致棋型的 判断也会提高 电脑 AI,虽然没有递归算法明显,但的 确是一种途径,不过考虑的 因素较多. 关于电脑学习,这听起来似乎是算法无法实现的 功能.但是在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论