毕业设计(论文)-基于JAVA的中国象棋的有效的设计与实现.doc_第1页
毕业设计(论文)-基于JAVA的中国象棋的有效的设计与实现.doc_第2页
毕业设计(论文)-基于JAVA的中国象棋的有效的设计与实现.doc_第3页
毕业设计(论文)-基于JAVA的中国象棋的有效的设计与实现.doc_第4页
毕业设计(论文)-基于JAVA的中国象棋的有效的设计与实现.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

太原理工大学毕业设计(论文)用纸基于Java的中国象棋的有效的设计与实现摘 要近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此我选用了Java语言作为中国象棋游戏的开发语言。并且中国象棋文化源远流长,博大精深,不止在古代,就是在新中国成立不久,象棋作为益智休闲类游戏,更是成为一项不可缺少的国家体育项目。这篇论文就是采用Java语言技术来实现的中国象棋对弈系统。在论文中只要用到了Java的GUI,事件监听机制及Applet、Swing和net等相关内容,参考了Java相关技术、资料、文献等进行分析与设计,得出系统的大体功能框架,即为实现游戏玩家能够按照象棋规则进行对弈,并分出胜负。 在此基础上,添加一些辅助功能,实现在对弈过程中的悔棋,求和,认输以及新游戏等,并对游戏界面进行美化。最后进行测试,确保功能的正确实现,使项目更加完善。关键词:中国象棋;Java语言;游戏;象棋规则全套设计加扣 3012250582IThe Design and Implementation of ChineseChess Based on JavaAbstractIn recent years, Java technology is more and more mature, its cross-platform, robustness as well as the number of users increase has demonstrated its popularity rising, so I choose the Java language as Chinese chess game development language. And Chinese chess culture has a very long and profound history, not only in ancient times, is the new China was founded soon after, as a chess puzzle casual games, it is becoming an indispensable national sport.This paper is the use of Java language to make a Chinese chess chess system. In the paper as long as the use of Java in the GUI, the event listener mechanism and Applet, Swing and net other related content, see the Java-related technology, materials, literature and other analysis and design, the system generally functions derived framework, namely to achieve Games chess player can be in accordance with the rules of chess, and a winner. On this basis, add some functionality, implemented in chess during undo, sum, throw in the towel and new games, and beautification game interface. Finally, check and test, to ensure proper function of the realization, to make the project more perfect. Key words:Chinese chess; Java; games; chess rulesII目 录1绪论11.1研究背景11.2研究意义11.3现状及发展趋势21.4研究目标42 可行性研究52.1 经济可行性52.2 技术可行性62.2.1 Java语言的历史及Java技术62.2.2 开发工具是否成熟92.3 社会可行性102.4 时间可行性103 需求分析113.1功能需求分析113.2象棋规则需求分析123.3性能需求分析153.4开发环境需求154总体设计164.1 总体结构设计164.2菜单栏设计174.3棋盘棋子界面的设计174.4 类图说明185 详细设计215.1程序流程设计215.2游戏界面设计225.3游戏功能设计225.3.1新游戏功能235.3.2悔棋功能245.3.3求和功能255.3.4认输功能265.3.5 背景音乐的添加285.4 象棋规则设计285.4.1总的走棋吃棋流程285.4.2 各棋子的走棋吃棋规则296 系统实现326.1 象棋界面的实现326.2 象棋对弈的实现336.3 象棋辅助功能的实现357 系统测试367.1测试用例的设计367.2功能测试377.2.1新游戏功能测试377.2.2悔棋功能测试397.2.3认输功能测试397.2.4求和功能测试407.2.5信息提示测试407.2.6对弈功能测试417.3总结与展望41结束语43参考文献44致谢45III1 绪 论1.1 研究背景现如今,人们生活节奏加快,很多人会在繁忙的工作后放松一下,休闲益智类游戏便应运而生。相对于一些对战、角色扮演以及射击类游戏,作为休闲益智类游戏的棋类游戏以其简单易学,上手快,耗时短,更适合人们缓解压力,放松心情。中国象棋文化源远流长,有着其独特的魅力。 中国象棋其实是中国封建社会体制的一个缩影。作为一类智力运动的中国象棋,不但可以开发人类的智力,锻炼人类的思维,而且可以陶冶情操,丰富大众的文化生活,也影响着大众性格的形成。现下比较好的国际象棋设计有WinBoard和ChessRule,WinBoard包含有象棋棋谱的编辑。这些软件不仅为爱好国际象棋着提供了方便,也为我们国内象棋软件的策划做出了可借鉴的范例。1.2 研究意义中国经济实力的迅速提高,使中国在国际上的影响力也逐步攀升。然而,中国文化已经不是中国在世界经济中的地位。如何提升文化软实力?首要的一点就是进行文化的传播,加大宣传力度。中国象棋游戏的传播到目前为止已有几千年的历史,中国象棋是一种古老的文化,它将文化、智慧、经济、艺术集合于一体,不仅有利于人类智慧的开发,人类思维的锻炼,人的意志力的培养,还能够增强人的竞争意识,是一款非常不错的游戏。自从有了计算机,它逐步深入到各个领域,直到如今计算机已成为大家现在天天工作和学习、娱乐不可或缺的一部分,在这个过程中,各类游戏也渐渐地融入到我们每个人的日常生活中。在电脑(笔记本)遍布各个角落的今日,对于使用电脑笔记本进行工作编写代码开发项目的程序设计师而言,写出属于自己的游戏,显然不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,它作为智力运动的一类更是作为了所要开发游戏的首要目标。中国象棋文化起源于战国,至今已有两千多年,可谓源远流长,象棋的设计,包含棋盘格局,棋子命名,象棋规则都蕴含着深厚的中国文化。然而,在国外,中国象棋并不广为人知,人们多熟悉的是国际象棋。为普及中国象棋,我们应设计一款基础的,适合大众的中国象棋软件。它应该尽可能人性化,易学易上手。1.3 现状及发展趋势象棋起初是可以携带的实体棋盘、棋子,后来出现了最先的象棋软件,那是一种可以携带到室外的电子棋盘,再其后就进晋级为电视游戏机。起初有一些小容量的象棋软件浮现,就像运行于DOS界面的将族、中国象棋之类,与其说是人类输给了电脑,还不如说人类根本木有时间与足够的耐心去恭候电脑CPU慢悠悠的算法查询,有时人们甚至都要质疑程序是否于搜索查询中挂掉了。后来,Internet前后涌现出许多Windows 7界面窗口的高级专业象棋软件,诸如棋隐、象棋世家、棋海无涯、象棋奇兵等等。归根结底,各式各样的象棋软件除了携带有自己本身的益处,也同时享有同样的劣势,就比如:这些软件的算法不可能像人脑一样,不能够更加全面、整体地从整体、大局去审视整个棋局,在残局的处理中,更是做不出舍小取大,明显达不到人脑的高度。在未来,中国象棋软件经历了市场连续上涨,可能会有一个逐渐冷却的滑坡趋势。国内有很多象棋软件诞生,腾讯象棋、楚汉棋缘,JJ象棋、棋海无涯等都是。现在有许多象棋软件,大多数为网络游戏软件。五子棋和国际象棋的设计都取得了成功,但中国象棋因规则比较复杂,较难实现,一直没有一个较为基础的完善的软件,仍然处于初始阶段。棋类游戏的发展将面向多平台、智能化。国内外象棋软件介绍:自从电脑问世以来,人们就一直在研究将游戏移植到电脑上,让人类与电脑进行游戏。于国际象棋而言,深蓝已经深入人心,因为他于1996年的与卡斯帕罗夫对战中,在首局便成功打败了卡斯帕罗这位世界级的大师。“在对弈中,我深刻感受到来自于我对面的一种新的智慧。”卡斯帕罗夫如是说,下面介绍几个当时小有名气的中国象棋软件:象棋大师,是一款很早的中国象棋软件,在同时期的相同象棋对弈软件中棋力算是最高的。该软件只能稳定运行于Dos环境下,即使这样它的棋力亦不可小觑。随着棋盘游戏程序的开发,后来的象棋软件的棋力已然到达了顶尖的水准。棋海无涯象棋软件特点:电脑象棋对弈功能强大;强大的计算机象棋后端数据处理功能;棋谱搜寻、分析算法也很独特。并因此获得过很多荣誉:弈天快刀杯第五;弈天长征杯第三十五;2004世界电脑象棋赛第四;2004启泰杯六段赛第五。象棋奇兵软件因其搜索速度而闻名。即使是用旧的赛扬机器,也能快速搜索到顶部,在速度上优势明显,适合快棋。在双核系统中,速度能够提升一倍。具有特别强的攻杀能力。在对攻情况复杂时,拓展后的延伸搜索能力使得算法对当前棋局了解分析得更清晰。象棋奇兵能够在棋局混乱中获胜。能够严谨的审视格局。着意注意各棋子位置和棋子所组棋形,对于棋子的相互牵制和多个棋子归边这两种情形都做过详细考虑,走棋路数更具有人性化。谢谢大师软件该中国象棋软件棋力强大。当下出版的官方版的谢谢大师软件,它的棋力已经很高,甚至可以媲美真正的象棋大师,是当下中国最强的象棋软件之一。于2003年的11月份世界奥林匹克电脑软件比赛中,获得了银牌奖项。在2004年6月份在台湾的中国象棋软件争霸赛,更击败众多强大的棋软,荣获冠军。其特点:中残局实力强大。时常在开始吃亏的情况下,在对局进行到一半局势逆转,最终获胜。在对局中处于劣势时,也能抵住对方的强攻。学习走棋方法的能力也强。通常对对手下的好棋具有记忆功能,在下次遇到相同情况时就会将其重现出来,有它山之石,可以攻玉的效果。用它的用户数越多,它自身会便能够吸收更多好的棋路、奇招,就会让用户感觉它越来越强。可以通过调校它的智能引擎来使它更机器人化或者更人性化。中国象棋软件技术:在游戏类软件中,搜索算法是关键,它的好坏往往体现着软件的优劣,比较常见的搜索算法有:a-b搜索、置换表法、最小-最大搜索、迭代加深。此外,随着时代的发展,人们研究出了一些新的高级搜索方法。这些高级搜索方法均以“带置换表的启发式a-b搜索”为基础进行扩展,当中中静态搜索和空着裁剪是消除“水平线效应”的基本方式,而主要变、例期望窗口搜索和MTD都是a-b搜索的进一步化步。然而也不是所有的棋类游戏都会使用到这些算法,因为他们使用起来也会有一定的负作用,因此归入高级搜索方法一点也不过分。比较常用的还是是空着技术。空着向前裁剪:空着向前裁剪,运用它有可能会忽视掉一些重要路线,是一种比较冒险的策略,它大大减少了象棋的分枝因子,也就是说他明显减少了搜索进行的次数及数量,而这样做会很大程度上加深搜索的深度。他的工作原理便是将大量无用的操作去除,而只保留好的那部分操作。1.4 研究目标首先进行理论研究,进行一些前期准备,熟悉象棋规则,学习相关Java基础知识。熟悉使用开发工具,研究出项目的具体功能框架,实现目标及实现步骤。其次进行具体的实现,因为象棋复杂的行棋规则,这里只实现人人对弈,不连接服务器实现人机对弈。主要实现人与人按正确的规则对弈,能够正确吃棋子,能够分出胜负。其次,在时间允许的情况下,添加一些辅助功能,像新游戏,求和,悔棋,认输,计时等,也可以对界面进行美化,添加背景音乐等。最后是代码实现及测试,依据框架编写程序,并对程序进行测试,确保程序正确运行。最终实现基于JAVA的中国象棋游戏,做出符合预期目标的完整的中国象棋游戏。2 可行性分析可行性研究的最终目的就是在于去分析软件是否能够以付出最小代价并在规定时限内以最短的时间来完成。因此可行性研究应该去从各个方面来分析以得出该项目是否可行,是否值得开发。如果没有经过可行性分析就去进行开发,有很大的机会会使项目中途失败或是被迫停止,这都会带来巨大的损失,甚至于导致一些小的企业破产,所以说可行性的分析必不可少,并且可行性的研究应该找尽可能开发经验丰富的开发工程师来分析以将提高项目的成功率。可行性分析也包括针对项目需求做出多套实施方案,然后从几套方案中选出最符合,最可行的方案,然后按照选定方案进行实施。可行性研究包括各个方面,像经济可行性、技术可行性、政策可行性、法律可行性等。2.1 经济可行性经济上是否可行主要是在进行成本与效益的核算后,从公司的具体情况出发于经济角度判断预期的经济效益能否超过它的开发成本,开发该项目是否有利可图。这里的开发经济成本包括开发人员的工资、所耗时间等。当系统开发人员接到开发任务书时,首要要进行的工作便是去仔细阅读开发任务书,然后分析该项目是否具有简单合理并且可行的解决方案,是否可以节约成本增加效率以达到利益的最大化。事实上,很多问题不能够在预期的规模、预定时间内解决,如果不能很好的处理这些麻烦,那么花费在该项目上的任何人力、物力都是无济于事的,这也就是项目开发前为什么需要进行经济可行性分析的缘由。该Java中国象棋项目是由Java开发环境Eclipse开发工具所完成的,所用到的软件EclipseJDK等都是从开源网站直接下载下来的,都不收费,并由项目由自己通过参考资料文献来独立完成,不需花费特别大的代价,因此,Java中国象棋游戏这个项目在经济上具有一定的可行性。2.2 技术可行性Java中国象棋游戏开发在技术方面是否可行,是指在项目技术方面是否足够支撑支持该Java项目的开发。包括硬件软件技术是否成熟,开发语言Java是否成熟,是否有具有丰富开发经验的开发团队、开发人员等。并且开发团队中的每个人是否能够很好的交流合作以完成该Java的开发。Java开发语言是由Sun Microsystem公司所开发的编程语言,Java语言具备面向对象、通用性、可移植性和安全性等特点。Java语言可以以命令行的形式在DOS下编译运行,也可以由Java集成开发软件Eclipse来编码运行。当然这里为了Java项目开发的方便便使用集成开发工具Eclipse软件进行编写,并进行编译运行。2.2.1 Java语言的历史及Java技术事物的产生于发展均不是无缘无故的,都有着它的原因,无论是社会大背景的推动,还是偶然发生。java语言的产生便是应IT行业的需要而生。1991年,美国Sun Microsystems公司为了能够在电子产品上占据一席之地,研发应用程序,积极探求合适的编程语言。然而消费电子产品已经有众多种类,PDA、机顶盒、手机等等都是,即使是同一类消费电子产品,它们所采用的处理芯片和操作系统也不尽相同,它们不能在同一平台上使用,这就需要我们研发一种新的语言来解决这一问题。在当时,C语言和C+语言应用广泛,Sun公司的研究人员就思考C语言、C语言是否能够担当程序跨平台使用的重任,经过研究,研究人员发现C和C语言开发的程序特别的复杂和冗大,并不适用,修改起来也不方便,安全性也低。因而,Bill Joy带领着他的研究小组着手设计并成功开发出一种编程语言,也就是最初的Java即Oak。Oak语言和以前的C语言在语法上有很多相似点,但它提高了安全性,并且面向对象编程,尽管如此,Oak语言还是没有能够在商业中获取它的胜利。1995年,互联网迅速发展,遍布于世界各地,这让Sun公司发觉Oak语言所具有的优势,跨平台、面向对象、安全性高等,这些在互联网遍布的情况不正契合了公司的需要,于是研究人员对Oak语言进行了完善,以期达到下面几个目标:创建一种面向对象的程序设计语言,而不是面向过程的语言;提供一个解释执行的程序运行环境,是程序代码独立于平台;集C和C+语言的有点于一身,使程序员便于学习、掌握;取消C和C语言中的不好的部分,像是指针、内存的释放与申请,增加程序的健壮性,使程序更具安全性;这种编程语言拥有多线程,使程序能同时执行多个任务;提供动态下载程序代码的机制;提供代码校验机制以保证安全性;Sun公司最后给该语言取名为java语言,造就了一种以后非常流行的编程语言。Java语言是一种简单的颇受欢迎的语言,具有通用性、多线程、动态性、面向对象、健壮安全、可移植、跨平台、垃圾回收机制等特点。Java语言相对于其它其他编程语言有以下显著优势:(1)Java语言是面向对象的并且灵活性很强Java是一种非常新的开发语言,它的灵活性很强,支持在部署和开发环境中的各种细微变化。由于Java语言构建于面向对象的基础平台上,是以较容易在基本的语言上进行延伸。Java学习C+面向对象的概念,将数据封装于类中,以类的优点,使程序简单,易于维护。封装性、继承性、多态性等有关对象的特性,使程序代码能够一次编译,多次运行,如有更改,需要再次编译。Java语言有一设计原则:面向接口,程序员的设计只需要关注类和接口。Java可以将一些共性抽象成父类也就是一般对象的类,子类通过继承可以使用父类的方法,也可以在子类中对父类的方法进行重写。在Java中,类不可以多继承,一个子类只能继承一个父类,不能同时继承多个父类。Java语言的类关系够成树形,Java提供的Object类是一切子类的父类,Object为根类,其功能强大,编程中经常使用它和及它的派生类。(2) Java语言有多厂商支持与多用户支持该项目使用Java语言的一个很重要的原因就是Java有厂商的广泛支持,Java的供应厂商不止一家,许多厂家都支持并生产Java产品。Java产品不光是受到多家厂商支持,也有许多的用户使用,而且Java的开源代码以及Java良好的开发工具也为广大Java程序员提供了极大的方便。(3)Java语言性能高与其它解释型高级程序设计语言相比,Java的确有很好的性能。并且,随着JIT(Just-In-Time)编译器技术的发展,Java运行的速度也越来越接近于C+。 (4)Java语言可以跨平台 Java可以跨平台使用也即Java具有平台独立性,这也是Java的一大亮点。因此,在Windows下编译并运行成功的Java程序,无需任何修改在Unix/Linux下依然可以部署运行成功。这也让更多的需要在特定操作系统开发项目又需要部署到多个操作系统的企业选择了Java。Java引进虚拟机,有了Java虚拟机,Java程序才可以运行于多个平台之间,Java程序运行在虚拟机,实现在不同平台的Java接口之间。Java的跨平台是他编写的程序能在全世界内公用。Java的数据类型与它所处的机器无关,Java虚拟机(Java Virtual Machine)是在硬件和操作系统之上建立的,它能够实现Java二进制代码的解释执行功能,提供不同平台的接口 。 (5)Java语言具有动态性Java 程序是由类组成的,而类又由对象构成,类可以自己编写,也可以简单的引入包或者从类库中引入类,而类又是可以在运行时动态装载的,这就使Java 可以不像C+那样必须在类库升级有新版本后,进行程序的手动修改,重新编译运行,Java可以在分布环境中动态地维护程序及类库,不需要自己操作。(6)Java语言具有多线程Java 还有一个特点,那就是Java虚拟机支持多线程。多线程能够同时完成多个任务。Java的多线程听起来会让人感觉它可以同时处理多个线程,事实并非如此,只是处理器快速地在不同线程间切换所产生的错觉,处理器处理的速度远远超过了人眼接收信息的速度,所以会让人误会多个任务在同一时刻运行。实际上,计算机处理器在一个时间点还是只能处理单个线程。(7)Java语言与C+Java提供了优秀程序设计语言具有的所有功能,但它仍然具备自己的风格,没有和别的语言含糊不清。C+虽然安全性不怎么好,但C和C+语言仍然被大家广泛,所以使用,Java借鉴C+,面向对象,让大家容易学习接受这门新语言。Java删除C+语言中的指针、Struct、typedef、#define、需要程序员手动释放内存等容易让程序出错的功能,降低了程序的出错率,也使Java语言功能更加精炼,更加健壮。除此之外,Java很小,整个解释器也不足300kb的内存,Java还增加了一些有用的功能,如垃圾回收器,对内存进行自动回收。Java再实现C+的面象对象技术基础上,有所增强(为了语言简洁,删除了一些不实用功能)。Java处理数据的方式和用接口处理对象数据的方式相同。Java与C和C+直接相关。Java保留了C语言的语法,Java 的面向对象则是由C+语言而来的。编程语言最早是C,再往后过渡到C+,最后是JAVA盛行。通过大量类的继承与多态的使用,JAVA提供了一个强大的功能,可以更好地利用已有成果,逻辑一致的程序设计环境。最最重要的一点是三种语言相互关联,C,C+和JAVA之间的相似性为专业程序员定义了一个统一的概念架构。使程序员从一门语言转学另一门语言时不会太难,不需要从头学起。2.2.2 开发工具是否成熟Eclipse是一个集成的Java开发工具,Eclipse 源码开放并且可以跨平台使用。就Eclipse自身而言,它内部包含一些服务和框架,在Eclipse内创建项目时,可以从外部导入一些框架,方便程序员写程序。它的开发环境主要由一些插件组件支撑,这些插件组件可以手动下载或升级。Eclipse软件本身自带标准插件集,里面有一些列的Java开发工具(Java Development Tools,JDT)。即使有大批量的用户特别喜欢将 Eclipse 当作 Java集成开发环境(IDE)来使用,但 Eclipse的用途作用并不是只有这一点,它还有许多它的高明之处。就说Eclipse,它内部还拥有插件的开发环境(Plug-in Development Environmen,PDE),插件开发环境主要用来满足那些希望使用Eclipse更多功能的软件编程工作者,插件开发环境能够构建出与Eclipse环境无缝集成的工具。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成Eclipse Platform、JDT、CDT和PDE。JDT作用于Java开发、CDT作用于C开发、PDE则作用于插件的开发,Eclipse Platform则是一个开放的可扩展集成开发环境,它为我们提供了一个通用的软件开发平台。Eclipse软件的设计思想是:一切由插件构成。Eclipse本身不大,但它功能强大,这是为什么呢?因为他的大部分功能都以插件的形式作用于Eclipse自身之上。Eclipse的基础组成为:图形API (SWT/Jface), Java开发环境的插件(JDT ),插件开发的环境(PDE)等等。像Eclipse这样功能完整并且比较成熟的开发软件、开发环境,大多数是由一些知名外国软件企业开发而来,比如说美国的IBM公司,但是仍然有一小部分是由的软件联盟主导开发而来。2.3 社会可行性自改革后,我国经济迅速发展,电脑出现在每家每户,基本已经普及,有很多人都能够熟练使用电脑上网工作、娱乐、查资料等,无论是小孩、还是中老年人都已经学会使用电脑、网络,便利我们的生活,这样做更有利于人力资源的合理而有效的利用。并且,此次设计的象棋软件简单基础,并且不用联网,可以随时随地的使用。为很多上班族和象棋爱好者提供了很大的方便,使得人们能够用该程序进行对弈。法律因素:全部软件均由官方开源网站下载而来;硬件设备通过正当途径购得;所有软件都用正版,技术资料都通过正经学术站下载而来或通过图书馆查阅得到,数据信息均可保证合法来源。所以,在法律方面是可行的。用户使用可行性:首先,中国象棋使用的是图形用户界面,简单易操作,无论是任何阶段的象棋爱好者都可以使用这款软件进行游戏。政策可行性:这款软件的开发在国家政策许可的范围内,不受国家以及任何地区机构的限制,在政策上是可行的。2.4 时间可行性时间可行性分析是指项目开发方对项目多方衡量、分析(包括项目开发人员人数、硬软件开发环境、开发项目的技术等)来判定该目是否可以在规定时间内完工并出现问题。综合大学所学课程Java开发语言的学习及后期培训所学核心Java,在老师的帮助下,中国象棋游戏在5月底完成没有太大问题,在时间上可行。3 需求分析Java中国象棋属于计算机博弈的范畴,计算机博弈程序都具有几个基本要素,能够完成两方正常下棋的中国象棋软件的实现应该至少包括下面几个部分:(1)和实体象棋一样,象棋软件的设计也需要有一个类似于实体的棋盘,棋盘上的棋子需要用集合或数组进行保存,以此来分析棋局;(2)任何游戏都需要设定规则,中国象棋的设计也需要设计象棋的规则类,这个类的设计至关重要,因为整个对弈过程依赖的便是象棋规则,否则,游戏就无法进行下去。(3)游戏能够判断出每个棋子可以选择的所有走法,这样,棋子才能够选择出当前棋局下最有利于当下的走法。(4)用户界面,用户界面除了需要包括所涉及的棋盘棋子外,还需要模拟现实对弈中的悔棋、在下一盘,和棋、输棋等,这些将做成菜单栏显示在游戏界面方便使用。计算机博弈(也称机器博弈)领域,是一个有着无限挑战空间的研究领域,他属于研究人工智能领域的一个范畴,它是一些领域的基础,即智能机器、棋法推算、模拟人工决策系等方面的基础部分。博弈算法实现被称作是人工智能领域非常有挑战性的研究方向之一。计算机博弈始于国外,因而国际象棋的博弈算法已经经历了很长的时间,并且经历了多次学术上的争论,在其中“深蓝”计算机博弈曾经获得过辉煌,它的的成就给人类留下了不可磨灭的印象。虽然起步晚于国外,中国象棋计算机博弈的难度并不会简单于国际象棋,因为这方面的资料并不很多,而且研究人员较少。借鉴国际象棋的成熟技术,我们可以结合多位专家学者在中国象棋机器博弈方面的多年实践经验,总结出一套过程建模、状态表示、着法生成、棋局评估、博弈树搜索、开局库与残局库开发、系统测试与参数优化等核心技术要点,最后总结出了当前研究的热点与方向。3.1 功能需求分析中国象棋游戏需要实现以下几个功能:(1)新游戏:玩家在游戏进行中或游戏结束,按新游戏按钮,开始新的一局游戏。(2)悔棋:玩家在游戏中需要悔棋,按下悔棋按钮,退回一步,这里可以退任意步数,也可以一直回退,直至退回游戏开始状态。(3)求和:玩家在游戏中发现双方陷入僵局,可由下棋一方向另一方发送求和请求。求和后,若对方同意和棋,则此次游戏结束,双方可以选择退出游戏或者进行下一局对弈;若对方不同意和棋,则返回游戏,继续进行这次对弈,直至游戏结束。(4)认输:如果玩家在游戏中自觉不敌,可以向对方发送认输请求,接到对方认输请求后另一方获胜。双方可进行新游戏或者退出游戏不再继续。(5)退出:在选择退出时,提示一下是否真的退出,若不退出,继续留在本页。(6)信息提示:一方面,在鼠标放在按钮上,提示按钮功能;另一方面,提示该红方还是黑方下棋,默认由红方先开始下棋。(7)背景音乐:在打开界面就开始循环播放背景音乐,直至退出游戏,背景音乐 消失。(8)对弈:游戏双方按象棋规则下棋,最后可以分出胜负。3.2 象棋规则需求分析俗话说“没有规矩不成方圆”,在中国象棋游戏中,规则更是无处不在,对棋子的移动和吃子起着严格的限制作用。在对弈时,双方需要遵守的简单规则:1、每个棋子需要按照它的走棋规则正在走起。马走“日”字、象走“田”字、士则需要在田字九宫格内行走,且只能斜着走,车和炮必须走沿一条直线行走线等等(这里需要特别注意的是卒(兵)的行子规则会随其所在位置的不同而发生变化过河后可以左右平移,象不可以过楚河汉界)。2、每个棋子都必须在棋盘内走棋,不能越界。也就是说所有棋子都不能走到棋盘的外面,同时有一些比较特殊的棋子还设置了棋子的移动范围,如将和士的移动范围为它们所在的九宫格,象不能过了自家阵营,也就是说象不能过楚河汉界。3、有的棋子在满足了移动范围,走棋规则行子的仍然不能走动,比如说马和象,需要判断是否会被其他棋子挡住半路上不能有其它子阻拦而不能走动,当然它们也不能吃掉自己的棋子。4、双方的最高首领将和帅不能直接相对,这是不符合规定的。除此之外,各种棋子还有各自的规则:(1)卒(兵)的移动及吃棋规则走棋规则: 根据所涉及的项目来讲,黑卒只能向下移动,红兵只能向上移动(每次都只能移动一步),都只能向前不能后退,但过了楚河汉界后可以向左向右移动。通过相关算法得到合法坐标,执行移动、吃棋和过河等操作。吃棋规则:黑卒向下移动吃棋,过了楚河汉界后可以向左或向右吃棋,红兵向上移动吃棋,过了楚河汉界后可以向左或向右吃棋,双方都不能隔子吃棋。(2)炮和车的移动及吃棋规则车在象棋中威力最大。走棋规则:首先判断起始位置和终点位置是否有棋子,炮和车只能上下和左右移动来走棋吃棋,并且可走步数都是任意步,可以是一步、两步或者多步。起初要指定所有模糊的Y(X)坐标,移动的Y(X)坐标是否有指定坐标相近的所有棋子,找出在同一条竖线(横线)的所有棋子,并不包括自己,从起点到终点判断中间是否有棋子,如果中间有棋子就不可以从这条竖线(横线)过去,从起点到终点找起点和终点的棋子,起点和终点没有棋子就可以移动了。吃棋规则:找出起始位置即炮或车,判断同一条线上无论横线还是竖线之间是否有棋子,找出之间的所有棋子,不包含当前要走的棋子,自己是起点,被吃的棋子是终点。车吃棋时要求车所在位置和要走位置之间的这条线上不能有任何棋子,并且所吃掉的必须是对方棋子;炮吃棋时需要在炮和炮要走位置之间搁置一个棋子,中间放置的棋子不仅可以是自己的棋子,也可以是对方的棋子,但是炮不能去吃自己的棋子,若终点是己方棋子,不能吃棋(也即不能移动)。(3)马的移动和吃棋规则走棋规则:新建集合用来保存新设置的棋子和障碍,取到马的坐标X、Y,再看马的前后左右是否有别的棋子(无论是对方棋子还是己方棋子)拦路,以此来判断马是否可以移动,来实现马飞日的走法。吃棋规则:吃棋时也要遵守马的走棋规则,首先需要判断马的正方有没有棋子阻挡,有棋子拦路则不能吃正前方的两个棋子,若没有马则可以代替被吃棋子的位置,马不能吃己方的棋子,棋子被吃后,不显示被吃棋子,显示马,停止闪烁。(4)象(相)的走棋和吃棋规则 走棋规则:新建集合用来保存新设置的棋子和障碍,用相关算法(飞田算法),并且(相)均不可过河汉界。吃棋规则:新建集合用来保存当前坐标和象的障碍棋子,吃左上方棋子的方法,首先判断左上方是否有棋子,如果有对方棋子,就可以实现吃左上方的敌方棋子。吃右上方棋子的方法,首先判断右上方是否有棋子,如果有对方棋子,就可以实现吃右上方的敌方棋子。吃左下方棋子的方法,首先判断左下方是否有棋子,如果有对方棋子,就可以实现吃左下方的敌方棋子。吃右下方棋子的方法,首先判断右下方是否有棋子,如果有对方棋子,就可以实现吃右下方的敌方棋子。(5)士(仕)的走棋和吃棋规则走棋规则:不管是士,还是仕,只能在田字方格内移动一个格的斜线。士不能超越自己的界限。吃棋规则:士吃棋时也必须遵守它的走棋规则,判断能否吃掉对方棋子也就是判断被吃的棋子与士是否在相近的位置,如果是则可以吃掉,且不能吃掉自己的棋子。(6)将帅的走棋和吃棋规则帅和将是双方军队的首脑,是两边竭力要拿下的目标。走棋规则:将帅只能在田字方格内移动,可向上向下移动,也可向左向右移动,每次只能沿着竖线或着横线移动一格,不能斜着走。将帅不能超越自己的界限,将与帅不能在同一直线上直接相对,否则走的一方被判输棋。吃棋规则:将帅吃棋时也需遵守走棋规则,判断能否吃掉对方棋子也就是判断被吃的棋子与将帅是否在相近的位置,如果是则可以吃掉,且不能吃掉自己的棋子。判断胜负有以下四种情况:1. 双方一方将帅被吃,游戏结束,将帅被吃为输;2. 一方认输,另一方为胜利方;3. 一方求和,对方同意,此局为平局;4. 导致将帅碰面的一方输棋;3.3 性能需求分析在游戏设计中,性能的高低起着非常重要的作用,性能不好的游戏,不管游戏设计的多好,游戏多好玩,也会使其受欢迎程度大打折扣,因此应该尽可能的提高游戏的性能,加快游戏的响应时间。除此之外,游戏的界面也应该尽可能设计的美观大方。在游戏中的鼠标点击事件响应中,比如各个棋子的走棋、吃棋,其时间应不超过0.5秒;提示双方走棋也应在控制在1秒内,否则会因为响应延迟起不到提示的作用或者还会出现提示出信息错误的情况,其它按钮的信息提示应在1秒内,可以稍微慢点。3.4 开发环境需求 硬件环境需求:本系统需要在Windows Server 2003及以上的操作系统上进行编码及测 试,硬件要求并不高,普通电脑即可。 软件环境需求:1.jdk1.7及以上的安装及环境变量的配置 2.开发工具:Eclipse或者My Eclipse4 总体设计4.1 总体结构设计 中国象棋的总体层次结构如下图4-1所示 图4-1 层次图1. 中国象棋对弈系统是:图形界面,线程,监听器与文件等技术的综合应用。2. 图形界面的实现:考虑到中国象棋的特点本身,程序使用GridLayout布局来实现,由于使用鼠标操作,程序使用JButton组件。3. 对弈的实现:利用鼠标的监听来实现对象棋走法的操作。4.2 菜单栏设计菜单栏设计图4-2所示: 图4-2菜单栏4.3 棋盘棋子界面的设计打开程序后棋盘界面如图4-3所示: 图4-3棋盘棋子设计图棋盘是棋子放置的地方,是由九条竖线和和十条横线相交而成的长方形平面。棋盘共有九十个交叉点,棋子摆放于部分交叉点上。棋盘中间,即第五六条横线之间的空白区域为“楚河汉界”,也称“河界”。棋盘上下两端的正中间,以斜交叉线构成的“米”字方格,称作“九宫格”(因有九个交叉点而命名)。象棋共有三十二个棋子,红黑双方各持十六个棋子。兵的种类是相同的,各有七种,依次为:将(帅)、士(仕)、车、马、象(相)、兵(卒)。红方所持棋子:一帅,两仕,两相,两车,两马,两炮,五个兵。黑方所持棋子:一将,两士,两象,两车,两马,两炮,五个卒。4.4 类图说明该程序的类结构如4-4所示,程序引用的音乐与图片文件如图4-5(a)4-5(b)、所示,程序的方法如图4-6、4-7(a)4-7(b)所示。 图4-5(b)图片文件 图4-6 方法 图4-7(a)方法大纲 图4-4 类结构图 图4-5(a)音乐文件 图4-7(b)方法大纲 在图4-4中,本程序的源代码由主类Chess、主框架类ChessMainFram和规则类ChessRule组成。图4-5(a)为游戏背景音乐源文件高山流水古琴版,图4-5(b)为游戏棋子所引用的图片。图4-6为构造菜单栏的成员变量,也是程序中需要使用的参数。图4-7(a),图4-7(b)游戏系统中的方法的层次结构,显示了它们的层次关系。图4-7(a)中的主框架类用来实现游戏界面的初始化,添加相应的按钮到菜单栏,主框架类下的drawChessMan()方法用来添加棋子到棋盘界面上。mouseClick()单击棋子方法用来移动棋子、吃棋子,线程方法控制棋子闪烁,actionPerformed用来定义按钮的事件响应,实现新游戏、求和、认输、悔棋等功能。 图4-7(b)中ChessRule类用来定义车、马、兵、象、士、将、炮各个棋子的移动和吃棋规则,mouseClick中移动和吃棋子会调用到规则类,玩家能够对弈全依赖规则类,在游戏的设计中举足轻重。5 详细设计5.1 程序流程设计程序的主体流程如图5-1所示程序的主体流程图是在不悔棋、认输、求和、新游戏的情况下的游戏流程,若程序中间有悔棋、认输、求和、新游戏等,就转而执行悔棋、认输、求和、新游戏的方法。 图5-1程序主体流程图5.2 游戏界面设计该游戏界面主要包括:菜单栏和棋盘棋子界面两部分。菜单栏包括:新游戏、悔棋、认输、求和、退出、信息提示六部分,是程序的主要功能。菜单栏放于容器Container中,用JToolBar、JButton、JLabel定义,并放置在容器最上方即界面顶端,其中的新游戏、求和、认输、退出、悔棋功能均可以用ActionListener进行监听,由ActionPerformed方法进行事件响应。信息提示由JLabel定义,主要用来显示游戏进行状态,即该哪方持棋,游戏是否结束,哪方获胜,它的初始状态为欢迎使用象棋游戏,其次,也提示按钮的功能作用。棋盘棋子界面的实现如4.3所介绍,本中国象棋有限的棋盘和棋子采用的都是图片,采用图片比较简单,不用绘制那么多条线,用图片来代替棋盘和棋子,这里需对棋子添加监听,即鼠标监听MouseListener,来监听棋子的移动和吃棋行为。棋子是通过图片调用实现,用数组play依次对应32个棋子,由playi.setBounds方法来设置棋子位置坐标,双方所持棋子也如4.3所介绍的。5.3 游戏功能设计 这个游戏软件需要实现人人对弈,采用鼠标监听棋子的方法来实现对棋子的移动与吃棋,默认红方先走棋,双方轮流走棋,在菜单栏的最后一项有相关的走棋提示,主要提示该轮到哪方走棋了。如果一方认输,对方获胜,在征求对方同意的情况下可以开始新的游戏。如果一方悔棋,点击悔棋按钮,可连续悔棋。一方认输,对方同意后和棋,在征求双方意见后可以开始新游戏;不同意和棋,则必须继续此局游戏,直至分出胜负。点击新游戏可以开始新的一局开始对弈。为防止误操作关闭下棋界面,在退出时进行提示,如果确认退出,点击是,否则点击否返回下棋按钮。象棋功能的设计与实现用到了软件设计中的观察者模式,这是整个项目用到最多的部分。5.3.1 新游戏功能在游戏进行过程中,往往会因为种种原因需要重新开始游戏,玩家不可能关闭游戏界面重启客户端,为了让游戏有更好的客户体验,解决上述问题,新游戏功能不可避免。新游戏可以在游戏开始、游戏结束是否新开一局和游戏中间进行使用。棋子的动作由Vector保存,新游戏功能实现即重新排列各个棋子,使各个棋子位于游戏开局时的位置,然后清除Vector中之前所保存的记录,以便记录新游戏的棋子动态。下面即为新游戏功能的实现代码:/新游戏按钮响应if (ae1.getSource().equals(anew)int i,k;/重新排列棋子,重置棋子的位置/黑色棋/车for (i=0,k=24;i2;i+,k+=456)playi.setBounds(k,56,55,55);/马for (i=4,k=81;i6;i+,k+=342)playi.setBounds(k,56,55,55);/象for (i=8,k=138;i10;i+,k+=228)playi.setBounds(k,56,55,5

温馨提示

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

评论

0/150

提交评论