版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大学学生毕业论文题 目: java“五子棋”游戏开发 作 者: 指导老师: XXX 电子信息工程 学院 电信 系 XXX 专业 级 三年 年制 班 2011 年 4 月 1 日指导老师性名职 称论文评语成 绩指导老师签名总评意见: 评审人: 年 月 日注:1.评语、成绩由指导老师填写。 2.评语及总评意见应包括学术价值、实际意义、达到水平、学术观点和论证有无错误。java的“五子棋”游戏开发内容摘要:五子棋作为中国古代的传统黑白棋种之一,有着广泛的群众基础,是一种老少皆宜的棋类休闲游戏。开发一款五子棋游戏可以使广大棋牌游戏爱好者在闲暇时间切磋棋艺,对互联网技术的推广和个人棋艺的提高都有好处。的
2、提高都有好处。 本文是采用JAVA语言写的五子棋游戏,JAVA语言无论体现在跨平台还是在面向对象,可移植性,安全性,并发机制和可视化图形界面的支持都是很好的。选用它作为开发语言,对程序开发来说,很具有高效性。关 键 词: JAVA语言 棋牌游戏 跨平台性一、系统概述(一)五子棋简介1五子棋五子棋是起源于中国古代的传统黑白棋种之一。亦“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。玩家根据自身等级和习惯,可以自由选择不同的游戏房间。其游戏规则也有所不同。详细分为三种棋室:普通棋室、国标棋室、职业棋室。其中普通棋室不受任何规则限制;国标棋室有禁手规则限制;而职业棋室则在
3、国标棋室的基础上增加“三手交换”和“五手两打”两项规则。(三手交换:是指黑棋下盘面第3着棋后,白方在应白之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。五手两打:是指黑棋在下盘面上关键的第5手棋时,必须下两步棋,让白棋在这两步棋中任选一步,然后再继续对弈。)国际比赛规则规定:对局中如黑方出现禁手,白方应立即指出禁手点,黑方即负。如白方在黑方出现禁手后,又落一步白子,黑棋禁手则不成立了。所以 在有禁手的房间里,如果黑方出现禁手,白方应立即按下禁手按钮。程序会判黑方负。如果这时白方又在棋盘上落一子,黑棋禁手则不成立了。为了简化用户对禁手按钮的使用,也有走禁
4、手就输和禁手不能落子规则的房间,顾名思义不多介绍。虽然采取了禁手的限制,黑棋先行仍有优势,黑棋仍可以必胜。所以如果用户是高段位的棋手,或者想成为高手一定要选择国际上比赛选用的比赛标准,即“三手交换,五手两打”。2五子棋棋盘棋盘正中一点为“天元”。棋盘两端的横线称端线。棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。以持黑方为准,棋盘上的纵轴线从左到右用英文字母AO标记。横行线从近到远用阿拉伯数字115标记。纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。如“天元”H8,四个“星
5、”分别为D4、D12、L12、L4等。图 1.1.2 五子棋棋盘3五子棋棋盘行棋顺序黑先、白后,从天元开始相互顺序落子。判断胜负(1)最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 (2)黑棋禁手判负(Lose),白棋无禁手。黑棋禁手包括“三、三”(Double Three)(包括“四、三、三”)、“四、四”(Double Four)(包括“四、四、三”)、“长连”(Overline)。黑棋只能以“四、三”取胜。 (3)如分不出胜负,则定为平局(Draw)。 (4)对局中中途退场判为负。(5)五连与禁手同时形成,先五为胜。 (6)黑方禁手形成时,白方应立即指出。若白方未发现或发
6、现后未指明而继续应子,则不能判黑方负。(二)课题背景及意义1开发背景五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为连珠,英译为Renju,英文称之为Gobang或FIR(FiveinaRow的缩写),亦有连五子、五子连、串珠、五目、五目碰、五格等多种称谓。五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,
7、同时也成为一种国际比赛棋。Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能。近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国
8、际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱。2开发的意义越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工智能比较感兴趣,而五子棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独
9、特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相关的。这个题目核心是人工智能和Socekt编程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学
10、习,也是很实用且很有必要的3本课题的研究方法 在进行游戏设计之前,首先决定的第一个问题就是,使用什么开发环境来编写环境? 自己虽然比较熟悉Java语言,但是实际开发项目经验很少,所以决定用Jcreator,其拥有高亮语法编辑、使用向导以及完全定制的用户界面,最主要的是能够自动查找文件于 Main 方法或 Html 文件以支持Java 小应用程序,然后启动相应的工具。 其次确定整个程序的结构框架。由于Applet运行速度较慢,如果在加上算法搜索时间,显然不符合程序的设计要求,决定用Java应用程序开发.整个程序的功能实现流程是这样的:网络对战涉及算法较少,所以先实现网络部分,实现基本的棋盘和棋子
11、的类,添加判断胜负条件,这部是基础,也是很重要的,电脑AI也在这些基础上添加上来的。这个题目的2个功能包括2个重要算法,电脑AI和胜负条件,胜负条件运算量不大,有固定的模式。难点是人工智能,可以这样说,人工智能的好坏决定了这个题目的完成深度。所以,大部份时间花在AI算法的研究和改进上,对于算法我掌握的不多,研究了一些国内的五子棋算法,参考了一些游戏设计算法,详细比较各种算法的优缺点,而且参考了现代五子棋比赛的各种规则和技巧,尽量联系实际,努力提高电脑AI4 JAVA简介Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。它不只是一
12、门编程语言,也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。Java技术的重要性就不讲了,从最近流行的一个统计数据上来说,目前世界上编程语言Java 、C 、VB、C+依次排名前4位,这排名本身不说明什么,至少也是工业界对编程语言使用上一个侧面的反映吧。二、系统分析(一)系统需求我们在设计游戏的时候有以下一些要求:1. 软件的界面简洁明了,操作简单容易。我们设计的软件界面必须是简洁的,游戏需要设计得易操作。2. 软件具有人工智能算法原理要简单,并且运行快速。游戏是需要快速反应的。我们需要使用简单实用的智能算法。3. 游戏要设置几个难度,便于不同玩家选择.玩家的游戏水平不
13、一样,我们设置不同难度供各个水平的玩家选择。游戏玩法及规则 现代五子棋专用棋盘为十五路(15X15),共225个交叉点。棋盘正中一点为天元。对局开始时,先由执黑棋一方将一枚棋子落在天元点上,然后由执白棋一方在黑棋周围的交叉点上落子。但是,为了尊重对方和礼貌起见,持白棋的一方通常将盘面的第二着棋布在自己河界的一侧,即直止或斜止。此后黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子或五子以上仅对白棋而言,则该方就算获胜 。连珠五子棋的一个特点是先行的一方优势很大,因此在职业比赛中对黑方做了种种限制,以利公平竞争。五子棋的比赛规则如下: 1、黑先、白后,从天元开始相互顺序落子;
14、 2、最先在棋盘横向、纵向或斜向形成连续的同色五个棋子的一方为胜; 3、 黑棋禁手判负、白棋无禁手。黑棋禁手有“三、三”、“四、四”和“长连”, 包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取胜;4、如分不出胜负,则到为平局;5、五连与禁手同时形成,判胜;6、黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指出,反而继续落子,则禁手失效,不再判黑方负。(二)系统的功能简介人机对弈的程序,至少应具备如下几个部分:(1)某种在机器中表示棋局的方法,能够让程序知道博弈的状态。(2)产生合法走法的规则,以使博弈公正地进行,并可以判断人类对手是否乱走。 (3)从所有合法走法中选择最
15、佳走法的技术。(4)一种评估局面优劣的方法,用以同上面的技术配合做出智能的选择。(5)一个界面,有了它,这个程序才能用。1棋盘表示棋盘表示就是使用一种数据结构来描述棋盘及棋盘上的棋子,通常使用一个二维数组。棋盘的数据表示直接影响到程序的时间及空间复杂度。为了追求更高的效率,研究人员针对不同棋类提出了多种不同的表示方法。有些方法具有更高的效率如比特棋盘表示法。2走法产生博弈的规则决定了哪些走法是合法的。对有的游戏来说,这很简单,比如五子棋,任何空白的位置都是合法的落子点。但是对于象棋来说,就有马走日,象走田等一系列复杂的规则。走法产生是博弈程序中一个相当复杂而且耗费运算时间的过程。不过,通过良好
16、的数据结构可以显著的提高走法生成的速度。3搜索技术对于计算机来说,直接通过棋盘信息判断走法的好坏并不精确。除了输赢这样的局面可以准确判断外,其它的判断都只能做到大致估计。判断两种走法孰优孰劣的一个好方法就是观看棋局走下去的结果。也就是向下搜索若干步,然后比较发展下去的结果。为了避免差错,我们假定对手的思考也和我们一样,也就是,我们想到的内容,对手也想到了。这就是极大极小搜索算法的基本原则。极大极小搜索算法的时间复杂度是O(bn)。这里b是分枝因子,指棋局在各种情况下的合法走步的平均值;n是搜索的最大深度,也就是向下搜索的博弈双方的走步之和。例如向下搜索甲乙双方各走一步的情形,n就是2。显然对于
17、五子棋这种分枝因子在200左右的棋类游戏,时间开销随着n的增大会急剧的增长,不出几层就会超出计算机的处理能力,这将导致在有限时间内得不到令人满意的结果。人们在开发高效的搜索算法上投入了大量的研究。在过去的几十年中,一些相当成功的改进大大提高了极大极小搜索的效率。Alpha-Beta剪枝、迭代深化、置换表、历史启发等手段的综合运用将搜索效率提高了几个数量级。4用户功能用户可以直接使用的游戏功能,通过按键进行操作。每个用例的简要说明如下:(1)新游戏:初始化相关变量,清空棋盘。(2)步数计算:计算当前是第几步(3)棋子坐标:显示当前所下棋子坐标。(4)下棋提示:提示该哪方下棋子。(5)重新开局:初
18、始化相关变量,清空棋盘。(三)系统的可行性分析1经济可行性本游戏使用模块化设计方案,易于编写和维护,核心代码易于移植,总体开发成本低。游戏短小精悍,对目标设备要求低,产品面向受众广,可以带来可观的经济效益。2技术可行性JAVA提供了丰富的接口和类服务,本游戏的开发只需要用到基本的绘图接口和系统的文件服务,实现起来非常简单。使用JAVA封装好的数据类可以简化编码实现,避免不必要的错误。对于以处理数据为主的棋类游戏,编码实现没有困难。3系统安全性分析本游戏的开发只使用很少的系统接口和系统服务,数据处理都是在程序内部解决,不涉及与其它程序的数据交互。使用JAVA定义好的构造法分配内存空间,这样不会在
19、构造出现异常时产生内存泄露。系统会根据已经入栈的对象指针,通过析构函数收回内存。所以即使程序因为内存不足无法运行,也不会因此而影响系统本身的稳定性和安全性。另外,使用模块化方法进行设计编码,可以很方便的调整算法的搜索深度,减小内存的使用量,提高程序的兼容性三 、系统设计(一)系统关键类介绍1Chess类是游戏的主类,负责初始化游戏棋盘,其实Chess类就是游戏的入口,只有启动了此类,才有游戏菜单,才可以进行选择游戏。代码如下 setVisible(true);setLayout(null);Label label = new Label(Gobang v1.0, Label.CENTER);a
20、dd(label);label.setBounds(10, 50, 440, 26);label.setBackground(Color.orange);add(chesspad);chesspad.setBounds(10, 90, 440, 440);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););pack();setSize(460, 540);2Evaluate类是用来估算估值点的坐标,返回的是这个点的价值。代码如下:int max_x, ma
21、x_y, max; /定义坐标 x,y及最大值public void evaluate(int shape) int i = 0, j = 0;for (i = 0; i 19; i+)for (j = 0; j 19; j+) switch (shapeij0) case 5:shapeij4 = 200;break;case 4:switch (shapeij1) case 4:shapeij4 = 150 + shapeij2 + shapeij3;break;case 3:shapeij4 = 100 + shapeij2 + shapeij3;break;default:shapei
22、j4 = 50 + shapeij2 + shapeij3;break;case 3:switch (shapeij1) case 3:shapeij4 = 75 + shapeij2 + shapeij3;break;default:shapeij4 = 20 + shapeij2 + shapeij3;break;case 2:shapeij4 = 10 + shapeij1 + shapeij2+ shapeij3;break;case 1:shapeij4 = shapeij0 + shapeij1+ shapeij2 + shapeij3;default:shapeij4 = 0;i
23、nt x = 0, y = 0;max = 0;for (x = 0; x 19; x+)for (y = 0; y 19; y+)if (max shapexy4) max = shapexy4;max_x = x;max_y = y;(二)胜负判断Judge类中的judge方法是通过扫描当前点周围的同色棋子数进行判断,如果胜利则返回True,否则返回False。这个方法需要配合使用,电脑会在下子之后调用这个方法。这个方法实现的伪代码如下:static boolean judge(int a, int color) int i, j, flag;for (i = 0; i 19; i+) flag = 0;for (j = 0; j 19; j+)if (aij = color) flag+;if (flag = 5)return true; elseflag = 0;for (j = 0; j 19; j+) flag =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高教版(第2版)教学设计-2025-2026学年中职中职专业课计算机类71 电子与信息大类
- 七年级生物下册 第五单元 第11章 地面上的生物 第2节 地面上的动物教学设计1 (新版)苏科版
- 第一单元整体教学设计 2025-2026学年统编版语文八年级下册
- 护理伦理与医疗伦理挑战
- 公司老员工欢送会
- 本册综合教学设计初中劳动初中全一册粤教版
- 超声科甲状腺结节超声检查操作要点
- 2026年及未来5年市场数据中国汽车无纺布行业市场调查研究及投资潜力预测报告
- 2026年及未来5年市场数据中国填料塔行业市场发展数据监测及投资潜力预测报告
- 生殖健康咨询服务
- 机械识图全套课件
- 2025年江苏省南通市中考生物试卷(含答案解析)
- 管理心理学 权利与政治
- NB/T 11440-2023生产煤矿储量估算规范
- 招投标挂靠合同范本
- DL∕T 523-2017 化学清洗缓蚀剂应用性能评价指标及试验方法
- HJ 651-2013 矿山生态环境保护与恢复治理技术规范(试行)
- 《数字道路路侧毫米波雷达技术要求》(征求意见稿)
- 人教版初中英语七至九年级单词汇总表(七年级至九年级全5册)
- 青岛科技大学2023年综合评价招生考试诚信承诺书
- 辉瑞标准销售模式
评论
0/150
提交评论