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

2017-05-09 11:27张昊
关键词:接口游戏

张昊

【摘 要】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/

猜你喜欢
接口游戏
某电站工程设计管理与施工、质量控制接口关系研究
爆笑游戏