1、基于 Java 的五子棋游戏的设计摘 要五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用 Java 开发五子棋游戏。主要完成了人机对战和玩家之间联网对战 2 个功能。网络连接部分为 Socket 编程应用,客户端和服务器端的交互用 Class Message 定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们
2、搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑 AI 方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。关键词:深度搜索;估值;电脑 AI;五子棋;算法Gobang Java-based games designAbstractAs a sport, gobang is very popular in civil, in order to become familiar with gobang rules and techniques, and the study of simple artificial intell
3、igence, I decide to use the Java to develope gobang games and complete the two functions including man-machine war and man-man war. Network Connection is Socket Programming for some applications, client and server interaction is definited by Class Message, which is a very good scalability, Client in
4、terface is responsible for the collection and maintenance of user input information, and error handling. Server users maintain online basic information and arbitrary two-time users of the chessboard of information, dynamic maintenance user list. During the man-machine players, it improves intelligen
5、ce of the computer players through depth search and valuation module. Analyzes Module valuation of the precise elements, as well as a number of increased precision, and compares their search for nodes, which raises some computer AI programs on the basis of analysis, such as recursive algorithm, comp
6、uter learning. Algorithm 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; Computer AI; Gobang ; Algorithm 目 录论文总页数:23 页1 引言 .11.1 课题背景 .11.2 本课题研究的意义 .11.3 本
7、课题的研究方法 .22 课题相关基础 .22.1 五子棋 .22.1.1 棋盘和棋子 .22.1.2 规则及解释 .32.1.3 五子棋常用术语 .42.1.4 五子棋攻防 .73 JAVA .83.1 JAVA 简介 .83.2 JAVA 开发环境 .94 课题详细研究方法 .104.1 程序结构说明 .104.2 棋盘及棋子的类 .114.2.1 棋盘 .114.2.2 棋子 .134.3 胜负判断条件 .134.4 网络对战 .154.5 电脑 AI.17结 论 .21参考文献 .21致 谢 .22声 明 .23第 1 页 共 23 页1 引言1.1 课题背景五子棋是起源于中国古代的传统
8、黑白棋种之一。现代五子棋日文称之为连珠,英译为 Renju,英文称之为 Gobang 或 FIR(Five in a Row 的缩写),亦有连五子、五子连、串珠、五目、五目碰、五格等多种称谓。五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在 “ 尧造围棋 ” 之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。Java 语言是当今最为流行的程序设计语言之一
9、 作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用 Java 语言,不仅可以开发出功能强大的大型应用程序,而且 Java 语言本身突出的跨平台的特性也使得它特别适合于Internet 上的应用开发,可以这样说,Java 的出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能。 1.2 本课题研究的意义近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“
10、深蓝”便是最具说服力的代表;其它像围棋的“手淡” 、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱。 越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工智能比较感兴趣,而五子棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈) ,让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成
11、设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人第 2 页 共 23 页工智能中的博弈论领域紧密相关的。这个题目核心是人工智能和 Socekt 编程, 。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也
12、是很实用且很有必要的。1.3 本课题的研究方法在进行游戏设计之前,首先决定的第一个问题就是,使用什么开发环境来编写环境? 自己虽然比较熟悉 Java 语言,但是实际开发项目经验很少,所以决定用 Jcreator,其拥有高亮语法编辑、使用向导以及完全定制的用户界面,最主要的是能够自动查找文件于 Main 方法或 Html 文件以支持 Java 小应用程序,然后启动相应的工具。其次确定整个程序的结构框架。由于 Applet 运行速度较慢,如果在加上算法搜索时间,显然不符合程序的设计要求,决定用 Java 应用程序开发.整个程序的功能实现流程是这样的:网络对战涉及算法较少,所以先实现网络部分,实现基
13、本的棋盘和棋子的类,添加判断胜负条件,这部是基础,也是很重要的,电脑 AI 也在这些基础上添加上来的。这个题目的 2 个功能包括 2 个重要算法,电脑 AI 和胜负条件,胜负条件运算量不大,有固定的模式。难点是人工智能,可以这样说,人工智能的好坏决定了这个题目的完成深度。所以,大部份时间花在 AI 算法的研究和改进上,对于算法我掌握的不多,研究了一些国内的五子棋算法,参考了一些游戏设计算法,详细比较各种算法的优缺点,而且参考了现代五子棋比赛的各种规则和技巧,尽量联系实际,努力提高电脑 AI。2 课题相关基础2.1 五子棋2.1.1 棋盘和棋子现 代 五 子 棋 棋 盘 , 经 过 国 际 棋
14、联 的 多 次 修 改 , 最 终 定 为 15 X 15 路 , 即棋 盘 由 横 竖 各 15 条 平 行 线 交 叉 组 成 , 共 有 225 个 交 叉 点 ; 棋 盘 上 共 有 五 个 星位 , 中 间 的 星 位 称 为 天 元 , 周 围 四 点 为 小 星 , 与 围 棋 盘 略 有 不 同 。 见 图 1。第 3 页 共 23 页图 1 棋盘五 子 棋 的 棋 子 和 围 棋 相 同 , 分 黑 白 2 种 颜 色 , 通 常 为 散 圆 形 , 有 一 面 凸起 或 二 面 凸 起 等 形 状 , 一 副 棋 子 总 数 为 225 枚 , 其 中 黑 子 113 枚
15、, 白 子 112枚 。关 于 计 时 , 正 规 比 赛 按 不 同 级 别 设 置 了 不 同 的 时 间 限 制 , 一 般 的 玩 家 都没 有 这 个 限 制 。2.1.2 规则及解释1:黑棋先行,白棋随后。从天元开始相互顺序落子。2:最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。3:黑棋禁手判负、白棋无禁手。黑棋禁手包括“三、三” ;“四、四” ;“长连” 。黑方只能用“四、三”去取胜。4:如分不出胜负,则定位平局。5:对局中拔子、中途退场均判为负6:五连与禁手同时形成,先五为胜。7:黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指正,反而继续落子,
16、则不能判黑方负。 五子棋是由两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由第 4 页 共 23 页执黑棋的一方将一枚棋子的落在“天元”上,然后由执白棋的一方在黑棋周围的交叉点上落子。如此轮流落子直到某一方首先在棋盘的直线 横线或斜线上形成连续的五子或五子以上,则该方就算获胜。但是五子棋的特点是先行的一方优势很大。因此,在职业比赛种对黑方做了种种限制,以利公平竞争。黑白双方的胜负结果必须按照职业五子棋的规则要求来决定。2.1.3 五子棋常用术语 二:二是五子棋的一切进攻的基础;又分为活二和死二。活二:即再下一子可形成活三的二,见图 2。死二:即再下一子可形成死三的二,见图 3。图 2 活
17、二 图 3 死二三:三是五子棋最常见的攻击手段。三分为活三、死三、眠三。活三:为再下一子即可变成活四的三(活四介绍见后)。或三分为连三、跳三。见图 4。我们通常所说的“三”。就是指活三而言。如果是死三,将特别指出。死三:即对方有棋子在同一条线相邻交叉点防守的三;死三分为三种。见图 5。 眠三:是死三的一种特性,它看上去相邻点没有对方棋子防守,很像活三,但由于受空间限制,不论如何发展都不可能称为活四,故称为“眠三“。见图5。第 5 页 共 23 页图 4 活三 图 5 死三反三:反三不是指一种“三”的形状,而是指再阻止对方进攻的同时使自己称为一道活三的反攻,称为反三。四:四的形状有三种,它分为:
18、活四,冲四、跳冲四。活四:在同一条线上相连的四个同色棋子成为“连五”,如图 6 所示。冲四:在同一条线上相连的相同颜色的四个棋子,它与活四不同的是,其中的一端有对方的棋子进行阻挡,它只有再在另一端下一手棋才可形成“连五”。 跳冲四:它的形状在“四”中是比较特殊的,一般分为两种,它的特点是同一条线上的同色的四个棋子,有一个或两个棋子与另外三个或两个棋子之间有一个交叉点的间隔,它的下一手棋只有下在间隔的交叉点上才能形成“连五”,因此,对方的棋子防守时,也只能阻挡在间隔的交叉点上,见图 7。图 6 活四第 6 页 共 23 页图 7 跳冲四 图 8 反冲四如图 8,黑棋在 1 点进攻,形成一子双杀,
19、这时白棋的妙手是在 a 位活三,它同时阻挡了黑棋的两种取胜方法。当黑棋仍在 c 位跳冲四活三时,白棋即在b 位阻断黑棋冲四并形成反冲四,是黑棋的进攻功亏一篑。一子双杀:指用同一手棋同时形成两个胜点的着法。 追 下 取 胜 : 是 指 白 棋 逼 迫 黑 棋 形 成 禁 手 而 取 胜 的 方 法 。自由获胜:除了追下取胜以外的获胜方法,称之为自由取胜。禁手(Forbidden):指黑方一子落下同时形成两个或两个以上的活三、冲四或形成长连的棋形,是对局中对黑棋禁止使用的战术或被判为负的行棋手段,见图 15。白棋无禁手,如果黑子在落下的关键的第五子即形成五连的同时,又形成禁手。此时,因黑方已成连五
20、,故禁手失效,黑方胜利。之所以这么规定也是为了规范比赛,其实我们业余的棋手,黑白棋子谁先下都不限制,只是先落子会有比较大的优势,另一方始终处于防守的被动状态。所以那一方先下子,他就有禁手,这是为了保持公平的一种手段。但是职业连珠五子棋虽然对黑棋采取了种限制,但是先行的一方优势依然很大。在高段位的比赛中还添加了一些规定,由于很少用到,就不必详细叙述了。A B C D第 7 页 共 23 页E F 图 9 禁手见图 9。A、B、C 中的 x 点为三、三禁手。D、E 中的 X 点为四、四禁手。F 中的 X 点为长连禁手。长连:相同颜色的连续六子或六子以上。 2.1.4 五子棋攻防五 子 棋 是 一
21、项 对 抗 性 很 强 的 运 动 , 在 开 局 进 入 五 手 两 打 后 , 就 开 始 进 入了 白 刃 战 , 相 互 争 夺 先 手 , 任 何 一 方 都 不 能 掉 以 轻 心 , 要 尽 可 能 少 犯 错 误 ,甚 至 不 犯 错 误 , 否 则 将 会 导 致 速 败 。众 所 周 知 , 连 珠 五 子 , 连 五 为 胜 。 有 四 才 能 有 五 , 有 三 才 有 四 , 以 此 类推 。 所 以 , 在 五 子 棋 的 对 局 众 进 攻 和 防 守 都 是 从 “二 ”和 “三 ”的 争 夺 开 始的 。 “好 的 开 始 是 成 功 的 一 半 ”, 这 条
22、 格 言 用 在 五 子 棋 里 再 合 适 不 过 了 。五 子 棋 的 点 的 选 择 十 分 关 键 。 五 子 棋 实 际 上 是 通 过 选 择 最 佳 的 落 点 , 加上 正 确 的 落 子 次 序 , 一 步 一 步 地 占 领 各 个 要 点 , 最 终 获 得 胜 利 。对 局 的 早 期 , 选 点 的 着 眼 点 主 要 是 使 本 方 的 棋 子 保 持 联 系 , 为 以 后 创 造尽 可 能 多 的 成 三 、 成 四 的 机 会 , 同 时 尽 量 限 制 对 方 成 为 好 形 。 由 于 在 五 子 棋对 弈 过 程 中 , 通 过 行 棋 落 点 来 控
23、制 对 方 的 落 点 是 可 能 的 , 比 如 活 三 冲 四 的应 点 是 可 以 预 知 的 , 完 全 有 可 能 通 过 不 断 走 出 这 样 的 先 手 来 控 制 对 方 的 着 点直 至 胜 利 。 所 以 , 在 对 局 的 后 期 , 就 要 在 精 确 计 算 的 前 提 下 , 尽 早 发 动 攻 势 ,以 取 得 棋 局 的 控 制 权 , 否 则 一 旦 贻 误 战 机 , 被 对 方 抢 先 发 动 攻 势 , 就 会 成 为被 控 制 的 一 方 。当 有 多 个 攻 击 点 可 供 选 择 时 , 要 选 择 后 续 手 段 多 , 又 不 会 被 对 方 反 先 的着 点 。 如 果 是 黑 方 , 还 特 别 要 注 意 进 攻 终 被 对 方 反 击 时 出 现 的 各 种 禁 手 点 的可 能 性 。 进攻分为单攻棋和双攻棋,单攻棋指单线即单行或单向的攻棋子,包括三子攻棋(活三、填四)和四子攻棋(冲四、填五)。而双攻棋指双向或双行的