基于JAVA技术象棋游戏的分析与设计

来源 :课程教育研究·学法教法研究 | 被引量 : 0次 | 上传用户:echo_seaman
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】Java语言具有平台无关性、易移植性等诸多特征,得到了广泛的应用。程序开发费用少,工作效率高,并拥有很好的用户界面和强大的开发工具。网上数据编程体现的非常充分,是其它语言无法做到的。
  本论文着眼于Java技术的应用,开发中国象棋游戏程序,完成基于Java技术象棋游戏的分析与设计,充分在游戏中体现了java的优势。
  【关键词】Java 象棋 游戏 类 接口
  【中图分类号】TP311 【文献标识码】A 【文章编号】2095-3089(2017)06-0063-02
  中国象棋被誉为中国的“国粹”,从诞生到现在已经成为国人最喜欢的棋类竞技游戏,对青少年的影响也是很广泛,双方在象棋的对弈过程中,体验着智慧对垒的快乐。
  随着游戏与Java技术平台的合作,越来越多的游戏编程爱好者把Java作为了实现游戏程序的首选。如今Java技术在游戏产业中发展迅猛,并在网络的支持下,在游戏领域中开辟了自己的广阔天地。
  游戏设计目的及意义
  象棋历史悠久,棋类博弈游戏越来越受广大游戏爱好者的喜爱,它不仅能给对弈的双方带来快乐,而且还在竞技的过程中感受使用计策战术,战胜对手的自豪感。
  功能需求
  通过对中国象棋游戏的需求分析,该游戏应实现棋盘界面的显示功能,双方下棋使用鼠标挪动棋子并吃子的功能,每走一步棋对棋谱进行记录的功能,严格实现中国象棋走棋规则的功能,关闭退出游戏等功能。
  象棋游戏设计的几个要点
  对弈的程序,至少应具备如下几个部分:
  ①在机器中表示棋盘的方法,能够提供一个最基本的操作界面,有了这个界面才能运行。
  ②产生中国象棋走法的规则,以使对弈正确地进行,并可判断双方是否乱走。
  ③实现吃子过程中的图形替换、重绘,使得双方能看出游戏当前的形势。
  象棋游戏棋盘的设计
  中国象棋的棋盘与其它博弈类的棋盘不同,对阵双方各执一方战场,中间有空白河界相隔,俗称“楚河汉界”。在己方各有一个交点互相连接的田字格,俗称“九宫格”,“将”和“士”只能在这个范围内走动,不能踏出。
  中国象棋的棋盘如图1-1所示:
  棋盘表示就是使用一种数据结构来描述棋盘及棋盘上的棋子,通常是使用一个二维数组。一个典型的中国象棋棋盘是使用9×10的二维数组表示。每一个元素代表棋盘上的一个交点。在Java中我们在ChessBoard这个类下来具体实现,定义一个ChessPoint point[ ][ ]二维数组,纵列从1到9,横列从A到J,这样就表示了象棋棋盘的9×10的方阵,为每个棋子提供了放置位置。
  中国象棋游戏规则的实现描述
  从中国象棋游戏的棋子和规则可以看出,由于将或帅、仕和士、象和相、卒和兵的走法相同,只是棋子的标示不同,再加上车、马、炮,所以规则的主要实现点有七点,以下对中国象棋游戏的部分棋子行棋规则实现加以描述。
  首先我们对每个棋子行棋时的初始和中止位置设置为startI,startJ,endI,endJ。这样我们就可以用这四个值表示出棋子的初始及中止位置的坐标点。
  接着,我们再定义两个整形变量xAxle和yAxle,他们分别表示初始与终止坐标值之间差值的绝对值。
  将或帅:只能在王宫内移动。每一步只可以水平或垂直移动一点。
  将或帅的行棋思路如图1-2所示:
  分析描述:对于帅的活动范围,通过if(endI<=6&&endI>=4&&endJ>=8)语句限定,如果满足则可以走棋,不满足则不能走棋,这就限定棋盘下方的帅不能走出九宫格。对于将的活动范围,通过if(endI<=6&&endI>=4&&endJ<=3)语句限定,原理同上。
  行棋规则则通过if((xAxle==1&&yAxle==0)||(xAxle==0&&yAxle==1))这条语句限定,就图1-2所示,帅只能移动到(x2,y1)、(x2,y3)、(x1,y2)、(x3,y2)四个点,他们的坐标差绝对值只有满足上面语句这两种情况才可以行棋。
  象或相:河界的一侧。每一步只可以沿对角线方向移动两点,另外,在移动的过程中不能够穿越障碍。
  象或相的行棋思路如图1-3所示:
  分析描述:对于象的活动范围,通过if(endJ<=5)语句就可限定,如果满足则可以走棋,不满足则不能走棋,这就限定了象不能越过河界到对方盘面去。对于相的活动范围,通过if(endJ>=6)语句限定,原理同上。
  行棋规则比较特殊,它是沿对角线方向移动两點,另外,在移动的过程中不能够穿越障碍。就图1-3所示,象要走到(x3,y3)这一点上的前提条件是(x2,y2)这个田字格的中心,也就是“象眼”的位置没有棋子,对于这一点的坐标,我们要定义两个变量centerI=(startI+endI)/2和centerJ=(startJ+endJ)/2,这样当我们行棋时,就可以用if(point[centerI][centerJ].isPiece())这条语句判断“象眼”位置是否有棋子,如果有则返回false,无则返回true。对于沿对角线方向移动两点的实现,则通过if(xAxle==2&&yAxle==2)语句来限定,他们的坐标差绝对值只有满足上面语句这种情况才可以行棋。
  马:任何位置。每一步只可以水平或垂直移动一点,再按对角线方面向左或者右移动。另移动的过程中不能够穿越障碍。
  马的行棋思路如图1-4,1-5所示,有两种形式:
  分析描述:行棋規则比较特殊,每一步只可以水平或垂直移动一点,再按对角线方面向左或者右移动。另外移动的过程中不能够穿越障碍。   就图1-4所示,这种跳跃形式属于if(xAxle==2&&yAxle==1)这一情况,马可以走到(x1,y1)(x5,y1)(x1,y3)(x5,y3)这四个点上的前提条件是(x2,y2)(x4,y2)这两个点上,也就是“马腿”的位置没有棋子。
  对于棋子向右侧跳的情况,即满足if(endI>startI)时,我们判断“马腿”位置的棋子通过if(point[startI+1][startJ].isPiece())语句来判断;对于棋子向左侧跳的情况,即满足if(endI  车:任何位置。可以水平或垂直方向移动任意个无阻碍的点。
  车的行棋思路如图1-6所示:
  分析描述:可以水平或垂直方向移动任意个无阻碍的点。就图1-6所示,对于车纵向行棋情况,即if(startI==endI),先赋j=0,通过对车初始位置和中止位置之间进行扫描,通过if(point[startI][j].isPiece())这条语句判断有无阻碍的棋子。对于车横向行棋情况,即if(startJ==endJ),先赋i=0,通过对车初始位置和中止位置之间进行扫描,通过if(point[i][startJ].isPiece())这条语句判断有无阻碍的棋子。
  炮:任何位置。移动起来和车很相似,但它必须跳过一个棋子来吃掉对方的一个棋子。
  炮的行棋思路如图1-7所示:
  分析描述:移动起来和车很相似,但它必须跳过一个棋子来吃掉对方的一个棋子。就图1-7所示,对于炮纵向行棋情况,即if(startI==endI),我们为了判断行棋路线上是否有棋子,引入一个变量number,然后赋j=0,通过对炮初始位置和中止位置之间进行扫描,通过if(point[startI][j].isPiece())这条语句判断有无阻碍的棋子,如果有棋子,则number++,这样number这个变量就相当于一个计数器,对炮初始位置和中止位置之间棋子的数量进行统计。if(number>1),则表示初始位置和中止位置之间多于1个棋子,返回值false,不能走棋;if(number==1),则表示初始位置和中止位置之间有1个棋子,且if(point[endI][endJ].isPiece()),表示中止位置上有对方棋子,则可以走棋吃子;if(number==0&&!point[endI][endJ].isPiece()),表示初始位置和中止位置之间没有棋子,则可以行棋。對于炮横向行棋情况,原理同上。
  本论文主要研究基于Java技术象棋游戏的分析与设计,对java 在中国象棋游戏编程中的方法和思想进行了深刻的分析,对中国象棋特殊的走棋规则给予了细致理解,充分体现了在中国象棋游戏中java的优势。
  参考文献:
  [1]耿祥义编著.《JAVA 课程设计》.清华大学出版社.
  [2]王克宏编著.《Java技术教程(基础篇)》.2002年4月第一版.清华大学出版社.
  [3]孙鑫编著. 《Java Web开发详解》. 2006年4月第一版. 电子工业出版社.
  [4]朱战立,沈伟编著. 《Java程序设计实用教程》. 电子工业出版社.
  [5]《Java Web开发详解》光盘视频教程
  [6]Thomas Petche编著.《Java游戏编程》.清华大学出版社.
  [7]王小春编著.《PC游戏编程》.重庆大学出版社.
  [8]中文Java技术网 http://www.cn-java.com/
  [9]Sun中国技术社区http://developers.sun.com.cn/home/sdnchina/home
  [10]Java高级编程专区 http://dev.yesky.com/javagaoji/
其他文献
2月10日上午,刘新民副省长在省政府主持召开会议,专门听取消防工作专题汇报。省政府副秘书长米剑锋、省公安厅副厅长刘国庆,省消防总队政委朱学义,副总队长张增慧、程敬忠,防火监
MRI诊断脑垂体微腺瘤是影像检查的首选方法已为共识,并有文献报告,笔者结合临床表现、内分泌(泌乳素)检测,应用MRIT1WI冠状位扫描及Gd-DTPA增强,对垂体泌乳素微腺瘤20例MRI表现进行分析,旨在提出垂体泌乳素
【摘 要】高中生物课堂上普遍存在着学生学习的积极性不高、课堂效率低下的情况,学生的学习成绩也面临着下降的趋势。本文将结合笔者自身的教学经验着重探究如何提高高中生物课堂的教学效率。  【关键词】高中生物 学生学习 课堂效率  【中图分类号】G633.91 【文献标识码】A 【文章编号】2095-3089(2017)06-0062-01  新一轮课程改革已经在全国范围内全面展开,这无疑对培养适应新时代
目的:探讨齐拉西酮和氟哌啶醇对老年期痴呆患者精神行为症状(BPSD)的疗效和安全性。方法:将60例老年期痴呆伴BPSD患者随机分成两组,分别使用齐拉西酮和氟哌啶醇治疗8周,采用痴呆
【摘要】《中国现当代文学》课是普通高等院校中文系学生的必修课,它的开设旨在建立中文系学生对于中国现当代文学史知识的熟悉,培养学生对作家作品的分析,鉴赏能力,并尝试进行文学创作。然而由于民族高校的课时限制,学生的民族差异性,必然导致这门课教学与非民族院校教学的相异性,本篇论文就这些问题做出思考。  【关键词】现当代 差异 思考  【中图分类号】G647.38 【文献标识码】A 【文章编号】2095-
【摘要】近几年来,在农村小学中的语文教学质量及水准远远不及城市小学。伴随着我国对农村基础教学的改革力度不断加大,使大部分农村地区的小学语文教学得到良好的发展,但由于受条件因素及观念制约的等等因素,导致农村小学语文教学当中还普遍存在着多数问题。因此,本篇文章主要进行对农村小学语文教学中存在的问题研究,并将其整理提供出相对应的对策建议,希望对农村小学语文教学将来的发展奠定良好的基础。  【关键词】农村
有关精神分裂症白细胞介素6(IL-6)水平的研究,结果不一,但大多认为IL-6水平增高。我们对精神分裂症患者IL-6水平与性别、发病年龄的关系进行研究,报告如下。
1病例例1:男,50岁,农民,因"反复凭空闻人语,疑被害10多年,加剧1个多月"于2010年3月23日入院。诊断为偏执型精神分裂症。既往曾不规则服用过奋乃静、氯氮平等,未能坚持长期用药。
目的:探讨行为治疗对长期住院慢性精神疾病患者的康复作用。方法:将222例长期住院慢性精神疾病患者,随机分为行为治疗组和对照组各111例,两组维持原药物治疗12周,行为治疗组加