基于java语言的中国象棋设计与实现毕业(论文)设计.doc
《基于java语言的中国象棋设计与实现毕业(论文)设计.doc》由会员分享,可在线阅读,更多相关《基于java语言的中国象棋设计与实现毕业(论文)设计.doc(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、题目:基于JAVA语言的中国象棋设计与实现毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;
2、学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 【摘要】电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来,随着人工智能及计算机硬件的发展,计算机象棋程序的水平也不断地得到提高。本文通过研究中国象棋的国内外研究现状、分析中国象棋的需求和用JAVA语言设计中国象棋程序的可行性,同时根据国际象棋程序设计的一些成功经验,主要借鉴了位棋盘、Z
3、obrist键值等,针对中国象棋程序设计的一系列问题,总结出一些中国象棋程序的设计方法。根据该方法设计出了符合中国象棋行棋和吃子规则,能够判断胜负,能够实现悔棋、重新开始等多种功能,而且界面十分美观的中国象棋程序,并给出了JAVA语言的实现方法。关 键 词:中国象棋,位棋盘,Zobrist键值,着发生成【Abstract】The implement of playing Chinese Chess on computer has just started. Although large numbers of professional websites and professional ches
4、s software arised in domestic, the lack of necessary basic work causes the advantage of computer technology applications in Chinese chess cant be reflected. With the development of artificial intelligence and computer hardware, the level of computer chess program continues to be improved.This paper
5、studies the research status of Chinese chess, analyzes the demand of Chinese chess, and learns the feasibility of Chinese chess that is designed by Java language. At the same time, the function is designed with the successful experience of chess program, such as the place board, Zobrist keys, etc. C
6、hinese chess program is summarized some ways to design Chinese chess program for solve a range of issues. Follow this ways, it designs all the rules and funtions which adapt to the requirement of Chinese chess, including of movement, judgement, undo, re-start and so on.The application gives the impl
7、ementation method in JAVA language and beautiful interface. Keywords: Chinese Chess, bit board, zobrist keys目 录1绪论11.1研究背景11.2研究意义11.3预期目标12分析32.1需求分析32.2可行性分析32.3功能分析32.4硬件环境42.4.1开发环境42.4.2运行环境43界面设计框架53.1程序的框架53.2.基本数据结构位棋盘53.2.1 什么是位棋盘53.2.2 位棋盘的作用63.2.3 位棋盘的基本运算63.2.4 Java中位棋盘的实现63.3.基本数据结构Zobr
8、ist键值93.3.1 比较局面的方法93.3.2 Zobrist键值的工作原理93.3.3 Zobrist键值的实现方法103.3.4 Java中实现Zobrist键值104系统实现124.1着法生成124.1.1伪合法着法的生成124.1.2 合法着法的生成174.2算法实现204.2.1 行棋规则算法实现204.2.2界面功能算法实现235结论26参考文献27附录28附录1算法主程序28附录2程序截图53外文文献与翻译54致 谢63北京物资学院2010届毕业论文(设计)1绪论1.1研究背景计算机现在已经成为每天工作和生活必不可少的一部分,电子游戏在计算机产业的带动下也逐步深入我们每个人的
9、娱乐活动中,棋牌游戏作为休闲类电子游戏,相对于角色扮演类游戏和即时战略类游戏等其它游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。棋类运动的推广和发展是需要靠信息技术来推动的,时下盛行的国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台WinBoard平台,另一个是商业的国际象棋数据库和对弈软件ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利,也极大的促进了国际象棋的发展。国际象棋软件有着成功的商业运作,已发展成一种产业。在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成
10、功经验和优秀的思想。1.2研究意义我国现在正处于飞速发展的阶段,想要提高我国的国际地位、让世界更好的了解我国,不仅要依靠经济和政治的影响,更要注重文化传播的作用。中国象棋是我国起源最早(最早出现于战国时期)、也是我国保存最为完整的棋类运动之一,他的行棋规则和棋子、棋盘的设计都蕴函着丰富的中国文化。中国象棋的艺术和棋理折射着以儒家思想为正统的东方民族文化精神,深为我国各阶层人民喜爱。但是中国象棋在国际上的普及率仍然很低,并因此未被入选2010年广州亚运会的竞赛项目。想要提高中国象棋的知名度和普及率,就必须要有一个大众化的中国象棋游戏平台,电脑游戏无疑是最佳选择。然而,电脑在中国象棋上的运用还刚刚
11、起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。因此,我们迫切的需要一个更加基础、更加实用的中国象棋对战平台。1.3预期目标首先进行理论的研究,研究JAVA编程的基础,包括JAVA编成的主要步骤及所需要的工具和软件,熟悉编程软件后,开始着手进行研究,设计出论文的主要框架和具体实现的步骤、目标。其次具体的实现。设计出一个基于JAVA语言的中国象棋对战平台,由于中国象棋比较复杂,所以主要设计出一个人、人对战的平台,这个平台必须符合中国象棋规则(包括胜负、走棋、悔棋、吃子、判断胜负等主要功能,各棋子按象棋规则走动),如
12、果时间允许,可进一步实现一些附加功能,包括美观的界面、对战双方交流、添加背景音乐等。最后,依据框架和目标编写代码,实现主要功能并且进行测试,直至程序运行成功。最终在深入研究理论的基础上,实现基于JAVA语言设计的中国象棋,做出预期的完整游戏。2分析2.1需求分析现在全球超过十亿台计算机正在被使用,并且这个数目还在逐渐增加,计算机已经深入到我们生活的各个方面。而我们使用计算机时,游戏所占的比重很大。棋类游戏作为一种简单易学的休闲游戏,一直深受广大群众的喜爱。JAVA作为一种程序编写的语言,在软件市场的影响力快速提高,潜力巨大。因此用JAVA编写的中国象棋游戏有着很大的开发潜力。与网络游戏相比,单
13、机游戏有着不可匹敌的简约性。人们可以随心所欲的选择任何时间进行游戏,而且人人对战还可以实现对战双方的直接交流,尤其随着笔记本电脑的普及,基本上可以随时随地都把它们带在身边,在人们离开家或者想玩的时候,可以不受任何时间地点限制地玩自己选择的游戏。2.2可行性分析随着计算机的普及和应用,电子游戏已经深入到我们生活的各个方面,利用电子游戏推广我国文化、增加我国传统游戏的市场占有率,是将我国文化推向世界的比较便捷的一种方式。中国象棋作为我国保存最完整、最能代表我国古代文化的游戏之一,它的推广能够让世界更加了解中国。JAVA与C+语言非常相近,但JAVA比C+简单,它抛弃了C+中的一些非必要的功能。用J
14、AVA编写的中国象棋程序实现了人与人的对弈,符合中国象棋的行棋规则,界面美观,能够激起玩家的兴趣,同时单机游戏对计算机的环境要求十分简单、易于实现。2.3功能分析打开游戏,鼠标所在的功能键会突出显示,点开新游戏后,原本的“欢迎使用象棋对弈系统”会变成提示“红棋走棋”或“黑棋走棋”。单击选中的棋子时,该棋子会不停闪烁,如果符合规则,则可以移动到指定位置。在进行人与人之间对战时,按照红先黑后的顺序进行,并把下棋的每一步过程记录下来,在对战时能进行悔棋功能,对悔棋次数没有限定,玩家可以再玩之前自己约定,增加了游戏的灵活性。在行棋时依照“马走日,象走田,车、炮走直线、士在框内走斜线,卒未过河是上下走、
15、过河可左右行走且不能回头,将、帅只能在框内行走”等行走规则,且按照“炮必须隔一个棋子才能吃棋子,其他棋子按棋子行走规则的位置实现吃子”的规则,完全符合象棋的行棋规则。2.4硬件环境2.4.1开发环境1、硬件环境CPU:AMD Turion(tm)64*2 1.80GH内存:DDR 1.5G 硬盘:80G2、软件环境操作系统:WINDOWS XP开发语言:JAVA2.4.2运行环境1、32M以上内存,4G以上硬盘。2、Microsoft Windows 9X/NT/vista操作系统。3、800*600或以上的屏幕分辨率。3界面设计框架3.1程序的框架从程序的结构上讲,大体上可以将引擎部分划分为
16、四大块:棋局表示;着法生成;搜索算法;局面评估。程序的大概的思想是:首先使用一个数据结构来描述棋局信息,对某一特定的棋局信息由着法生成器生成当前下棋方所有合法的着法并依次存入着法队列。然后通过搜索算法来逐一读取着法并调用局面评估函数对该着法所产生的后继局面进行评估打分,从中选出一个最有可能导致走棋方取胜的着法。在搜索的过程中还可以采用一些辅助手段来提高搜索的效率。其过程如下所示(图1):图1 着法生成3.2.基本数据结构位棋盘3.2.1 什么是位棋盘在中国象棋中,棋盘有90个交叉点。位棋盘其实就是一个长度为90位的变量,每个位对应一个交叉点,用来记录棋盘上的某些布尔值。在Java中,用3 个i
17、nt类型数据(每个32位,共96位多余的6位不用)表示一个位棋盘。3.2.2 位棋盘的作用 记录所有棋子位置的位棋盘AllPieces。AllPieces告诉我们棋盘上哪些格子有棋子,哪些没有。当棋子处于最初位置的时候,“AllPieces”看上去是这个样子的(以下描述中,格子的下标从0开始):(Hi,89,a9)111111111 000000000 101010101 000000000 000000000 101010101 000000000 010000010 000000000 111111111(Low,0,i0) 其最高位对应第89格(a9格,左上角),最低位对应第0格(a8格
18、,右下角)。有子的位对应1,没有子的位对应0。这样显示位棋盘可能更形象一点: 黑棋111111111000000000010000010101010101000000000000000000101010101000000000010000010000000000111111111红棋3.2.3 位棋盘的基本运算 631、与(&) 0 1 0 1 1 0 0 1 0 0 0 1 2、或(|) 0 1 0 1 1 0 0 1 1 1 0 1 3、异或() 0 1 0 1 1 0 0 1 1 1 0 0 4、取补() a = 0001,a = 1110。 3.2.4 Java中位棋盘的实现3.2.4
19、.1 位棋盘类的实现Java中,位棋盘用3个int型的数据表示,最高六位不用。Java中“与、或、非、异或、左位移,右位移(注意,位棋盘的右位移是无符号位移)”分别是“&、|、”。代码摘要(详细代码见附件)及相关说明如下:public class BitBoardprivate int Low,Mid,Hi/用3个int字段表示位棋盘,最高位Hi的高/6位不用public BitBoard(int Arg1, int Arg2, int Arg3) /构造函数Low = Arg1;Mid = Arg2;Hi = Arg3;public static BitBoard opAnd(BitBoar
20、d arg1,BitBoard arg2) /位棋盘的“与”操作,保存结果。int low=arg1.Low & arg2.Low;int mid=arg1.Mid & arg2.Mid;int hi=arg1.Hi & arg2.Hi;return new BitBoard(low,mid,hi);public static BitBoard opOr(BitBoard arg1,BitBoard arg2) /位棋盘的“或”操作,保存结果。public static BitBoard opXor(BitBoard arg1,BitBoard arg2) /位棋盘的“异或”操作,保存结果。p
21、ublic static int count(BitBoard arg) /计算位棋盘中非零位的个数 public static BitBoard duplicate(int arg) /复制位棋盘 public static boolean equals(BitBoard arg1,BitBoard arg2) /位棋盘是否相等(所有90位对应的位相同即/为相等) public static BitBoard leftShift(BitBoard arg,int num) /位棋盘arg左位移num位 public static rightShift(BitBoard,int num) /位
22、棋盘右位移num位 public static int LSB(BitBoard Arg) /位棋盘最低非0位的位置(从0开始计数)public static int MSB(BitBoard Arg) /位棋盘最高非0位的位置(从0开始计数)public static boolean notZero(BitBoard Arg) /是否非“0”。当90位中有非0位时返回true。3.2.4.2 位棋盘的初始化某些位棋盘从程序开始运行到结束都不会改变。例如上面所述的那个位棋盘数组“knight90”。(他实际上记录了当“马”在任意格子上时,它下一步可以走的格子。)这个数组将在程序开始执行的时候被
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 语言 中国象棋 设计 实现 毕业 论文
限制150内