基于Java的五子棋游戏的设计.doc

上传人:h**** 文档编号:129207 上传时间:2018-07-09 格式:DOC 页数:114 大小:931KB
下载 相关 举报
基于Java的五子棋游戏的设计.doc_第1页
第1页 / 共114页
基于Java的五子棋游戏的设计.doc_第2页
第2页 / 共114页
基于Java的五子棋游戏的设计.doc_第3页
第3页 / 共114页
基于Java的五子棋游戏的设计.doc_第4页
第4页 / 共114页
基于Java的五子棋游戏的设计.doc_第5页
第5页 / 共114页
点击查看更多>>
资源描述

1、 基于 Java 的五子棋游戏的设计 摘 要 五子棋作为 一个棋类竞技运动,在民间十分流行, 为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用 Java 开发 五子棋游戏。主要完成了人机对战和玩家之间联网对战 2 个功能 。 网络连接部分为 Socket 编程应用, 客户端和服务器端的交互 用 Cla ss Message 定义,有很好的可扩展性 , 客户端负责界面维护和收集用户输入的信息,及错误处理。 服务器维护 在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列 表 。 在 人机对弈中 通过深度搜索和估值模块, 来提高电脑棋手的智能 。 分析 估值模块中的影响精准性的几

2、个要素,以及提出若干提高精准性的办法 ,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高 电脑 AI 方案,如 递归算法 、电脑学习等。 算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有 很大的 参考作用。 关键词 : 深度搜索 ; 估值 ; 电脑 AI; 五 子棋 ; 算法 目 录 论文总页数: 23页 1 引言 . 1 1.1 课题背景 . 1 1.2 本课题研究的意义 . 1 1.3 本课题的研究方法 . 2 2 课题相关基础 . 2 2.1 五子棋 . 2 2.1.1 棋盘和棋子 . 2 2.1.2 规则及解 释 . 3 2.1.3 五子棋常用术语

3、. 4 2.1.4 五子棋攻防 . 7 3 JAVA. 8 3.1 JAVA简介 . 8 3.2 JAVA开发环境 . 9 4 课题详细研究方法 . 10 4.1 程序结构说明 . 10 4.2 棋盘及棋子的类 .11 4.2.1 棋盘 . 11 4.2.2 棋子 . 12 4.3 胜负判断条件 . 12 4.4 网络对战 . 14 4.5 电脑 AI . 16 结 论 . 20 参考文献 . 20 致 谢 . 错误 !未定义书签。 声 明 . 错误 !未定义书签。 商业源代码,全套计算机毕业设计免费下载 http:/ 更多全套设计联系 QQ:1042897696 最新设计大全 http:/

4、第 1 页 共 23 页 1 引言 1.1 课题背景 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为连珠,英译为 Renju,英文称之为 Gobang 或 FIR(Five in a Row 的缩写 ), 亦有连五子、五子连 、 串珠、五目、五目碰、五格 等多种称谓 。 五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在 “ 尧造围棋 ” 之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成

5、为今天的职业连珠五子棋,同时也成为一种国际比赛棋。 Java语言是当今最为流行的程序设计语言之一 作为一门非常优秀和极为健壮的编程语 言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征 , 使用 Java 语言,不仅可以开发出功能强大的大型应用程序,而且 Java 语言本身突出的跨平台的特性也使得它特别适合于 Internet 上的应用开发,可以这样说, Java 的 出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能 。 1.2 本课题研究的意义 近来随着计算机的快速发展, 各种 各样的电脑 游戏 层出不穷 , 使得我们能有更多 的娱乐项目,而棋类游

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

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

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

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

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

11、 112枚。 关于计时,正规比赛按不同级别设置了不同的时间限制,一般的玩家都没有这个限制。 2.1.2 规则 及 解释 1:黑棋先行,白棋随后。从天元开始相互顺序落子。 2:最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。 3:黑棋禁手判负、白棋无禁手。黑棋禁手包括“三、三”;“四、四”;“长连”。黑方只能用“四、三”去取胜。 4:如分不出胜负,则定位平局。 5:对局中拔子、中途退场均判为负 6:五连与禁手同时形成,先五为胜。 7:黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指正,反而继续落子,则不能判黑方负。 五子棋是由两个人在一盘棋上进行对抗的竞技运动。在对

12、局开始时,先由执第 4 页 共 23 页 黑棋的一方将 一枚棋子的 落在“天元”上,然后由执白棋的一方在黑棋周围的交叉点上落子。如此轮流落子直到某一方首先在棋盘的直线 横线或斜线上形 成连续的五子或五子以上,则该方就算获胜。但是五子棋的特点是先行的一方优势很大。因此,在职业比赛种对黑方做了种种限制,以利公平竞争。黑白双方的胜负结果必须按照职业五子棋的规则要求来决定。 2.1.3 五子棋常用术语 二:二是五子棋的一切进攻的基础;又分为活二和死二。 活二:即再下一子可形成活三的二 ,见图 2。 死二:即再下一子可形成死三的二,见图 3。 商业源代码,全套计算机毕业设计免费下载 http:/ 更多全

13、套设计联系 QQ:1042897696 最新设计大全 http:/ 图 2 活二 图 3 死二 三:三是五子棋最常见的攻击手段。三分为活三、死三、眠三。 活三:为再下一子即可变成活四的三 (活四介绍见后)。或三分为连三、跳三。 见图 4。 我们通常所说的“三 ” 。就是指活三而言。如果是死三, 将 特别指出。 死三:即对方有棋子在同一条线相邻交叉点防守的三;死三分为三种。 见图5。 眠三:是死三的一种特性,它看上去相邻点没有对方棋子防守, 很像活三,但由于受空间限制,不论如何发展都不可能称为活四,故称为“眠三“。 见图 5。 第 5 页 共 23 页 图 4 活三 图 5 死三 反三:反三不是

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

15、见图 7。 图 6 活四 第 6 页 共 23 页 图 7 跳冲四 图 8 反冲四 如图 8,黑棋在 1 点进攻,形成一子双杀,这时白棋的妙手是在 a位活三 ,它同时阻挡了黑棋的两种取胜方法。当黑棋仍在 c位跳冲四活三时,白棋即在 b位阻断黑棋冲四并形成反冲四,是黑棋的进攻功亏一篑。 一子双杀:指用同一手棋同时形成两个胜点的着法。 追下取胜:是指白棋逼迫黑棋形成禁手而取胜的方法。 自由获胜:除了追下取胜以外的获胜方法,称之为自由取胜。 禁手 (Forbidden): 指黑方一子落下同时形成两个或两个以上的活三、冲四或形成长连的棋形,是对局中对黑棋禁止使用的战术或被判为负的行棋手段 ,见图 15

16、。白棋无禁手 ,如果黑子在落 下的关键的第五子即形成五连的同时,又形成禁手。此时,因黑方已成连五,故禁手失效,黑方胜利 。 之所以这么规定也是为了规范比赛,其实我们业余的棋手,黑白棋子谁先下都不限制,只是先落子会有比较大的优势,另一方始终处于防守的被动状态。所以那一方先下子,他就有禁手,这是为了保持公平的一种手段。但是 职业连珠五子棋虽然对黑棋采取了种限制,但是先行的 一方 优势依然很大 。在高段位的比赛中还添加了一些规定,由于很少用到,就不必详细叙述了。 A B C D 第 7 页 共 23 页 E F 图 9 禁手 见图 9。 A、 B、 C 中的 x 点为三、三禁手 。 D、 E 中的

17、X 点为四、四禁手。 F 中的 X 点为长连禁手 。 长连:相同颜色的连 续六子或六子以上。 2.1.4 五子棋攻防 五子棋是一项对抗性很强的运动,在开局进入五手两打后,就开始进入了白刃战,相互争夺先手,任何一方都不能掉以轻心,要尽可能少犯错误,甚至不犯错误,否则将会导致速败。 众所周知,连珠五子,连五为胜。有四才能有五,有三才有四,以此类推。所以,在五子棋的对局众进攻和防守都是从“二”和“三”的争夺开始的。“好的开始是成功的一半”,这条格言用在五子棋里再合适不过了。 五子棋的点的选择十分关键。五子棋实际上是通过选择最佳的落点,加上正确的落子次序,一步一步地占领各个要点,最终获得胜利。 对局的

18、早期,选点的着眼点主要是使本方的棋子保持联系,为以后创造尽 可能 多的成三 、 成四的机会,同时尽量限制对方 成 为好形。由于在五子棋对弈过程中,通过行棋落点来控制对方的落点是可能的,比如活三 冲四的应点是可以预知的,完全有可能通过 不 断走出这样的先手来控制对方的着点直至胜利。所以,在对局的后期,就要在精确计算的前提下,尽早发动攻势,以取得棋局的控制权,否则一旦贻误战机,被对方抢先发动攻势,就会 成 为被控制的一方。 当有多个攻击点可供选择时,要选择后续手段多,又不会被对方反先的着点。如果是黑方,还特别要注意进攻终被对 方反击时出现的各种禁手点的可能性。 进攻分为单攻棋和双攻棋,单攻棋指单线

19、即单行或单向的攻棋子,包括三子攻棋(活三、填四)和四子攻棋(冲四、填五)。而双攻 棋 指双向或双行的攻棋 。第 8 页 共 23 页 包括三、三攻棋(双活三、双填四、填四活三);四、三攻棋(冲四活三、冲四填四、填五活三、填五填四);四四攻棋(双冲四、双填五、填五冲四)。 五子棋的取胜思路是由一个子开始,目标是运用各种方法在棋盘上发展出五连乃至长连而取胜。在这个发展过程中必然要经过由一子到两子 两子到三子 三子到四子的过程。因 此说,把各种形状和各个方面上的二 三 四等子力结构烂熟于胸,做到举一反三,是学习五子棋的基本功,更是能灵活运用五种取胜技巧的基础。 3 Java 3.1 Java简介 J

20、ava 是美国 Sun 公司开发的语言,它使用解释器执行代码,因此,无需对源代码进行任何更改即可在不同计算机上运行,是真正跨平台的编程开发语言。 Java 有以下主要 特点 : 1:简单( Simple) 制定 Java 的原则之一,是要建立一种结构简单而且使用容易的系统,可以让用户不必接受很深的训练就可以开始设计程序 ,所以 Java 的语法尽可能与在当前许多程序设计师都采用的 C及 C语言相似。并且, Java 删除了 C及 C+许多极少使用、不易理解或常被混淆的功能,多多重继承、指针等。 2:面向对象 (Object-Oriented) 面向对象是近年来信息界广为使用的概念和技术。它有许

21、多良好的特性。对象的封装性可以使对象的接口定义明确;继承性可以增加软件的可重用性,有助于分类及模版设计等。实现面向对象的概念及其各种良好的特性是 Java 的设计理念之一。 3:分布式 ( Distributed) 计算机网络的发展使得信息 应用朝着分布式 的环境发展,所以现代的信息开发语言及环境要有配合分布式的特性及功能。 Java 具有一个网络功能的程序库,其中包含与如 HTTP 和 FTP 等 TCP/IP 网络通信协议整合的能力。 4:强壮性 (Robust) 由 Java 所编写的程序要能在各种情况下运行,而且必须具有高的稳定性。Java 在制定时即加入了能防止存储器被覆写和数据损坏的相关处理机制。 5:安全性 (Secure) Java 是被设计用于网络及分布式环境中的,所以安全性是一个很重要的考虑。 Java 拥有数个从简单到复杂的安全保护措施,能有效地防止病毒的侵入和破坏行为 的发生。 6:结构中立性 (Architecture Neutral)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。