兰 伟
(重庆科创职业学院 信息工程系, 重庆 永川 402160)
棋牌对弈类游戏是玩家利用休闲时消遣的主要竞技性游戏,因具有良好的娱乐性和智慧性,深受玩家喜爱。同时软件程序员也热衷编写棋牌对弈类游戏,原因是棋牌对弈类游戏可以训练程序员面向对象设计能力,同时也能学习和应用人工智能相关知识。中国象棋,是由两人轮流走子,以“将死”或“困毙”对方将(帅)为胜的一种棋类运动。由于用具简单,趣味性强,是当今国内最流行棋艺活动之一。
Java语言是一款非常优秀的面向对象程序设计语言,因其具有极高的安全性和跨平台性,广泛应用于互联网、嵌入式智能终端、游戏开发等领域。[1]本文以Java语言为例,利用面向对象设计思想设计一款网络对弈版的中国象棋游戏。
本系统主要需要完成网络对战时开始新局、走棋、认输、求和、悔棋、网络连接设置等基本操作。
本系统完成中国象棋网络对弈功能。除了满足功能需求外,还需要考虑网络质量问题,因为良好的网络环境才能增加游戏乐趣。用户对网络性能要求主要体现连接时延、棋局同步时延和连接稳定性方面。连接时延是指对弈双方建立网格连接的平均时延,棋局同步时延是指一方玩家落子后到另一方玩家游戏界面显示的时间差,网络稳定性是规定时间内连接玩家之间棋局同步成功的概率。性能需求见表1。[2]
表1 网络对弈版的中国象棋性能需求
网络编程需要解决两个问题:一个是如何在网络中准确定位一台或多台主机,另一个是当找到所需要的主机后如何进行可靠高效的数据传输。Java Socket(中文翻译成:套接字)技术就是用来解决Java网络编程中主机定位和数据传输的,Socket实质是双向连通的输入输出流。无论是服务器端还是客户端都可以向流中写入和读取信息,从而实现服务器与客户端的通信功能。[3]
本系统主要需要解决两个核心问题,第一是中国象棋棋盘、棋子等各元素的抽象,即类的设计;第二是对游戏友好界面的设计。
中国象棋棋盘是一个由10条横线和9条竖线构成的网络,共90个交叉点。这些交叉点又称为棋点,每一个棋子只能在棋点上行走。为了能准确记录下棋盘的每个棋点,可以选择一个大小为90的数组模拟棋盘上的90个棋点。如图1所示。
图1 中国象棋棋盘模型
因此可以设计一个棋点类(ChessPoint)和一个类盘类(ChessBoard),设计如下:
中国象棋共有32颗棋子,双方各16颗。类型有“车”、“马”、“相/象”、“士”、“帅/将”、“炮”、“兵/士”。红方的“帅”和黑方的“将”只是所加载的图片不同,棋子的功能是一样的。类似的还有“兵/士”和“相/象”。棋子另外还有所在位置、是否显示、红方或黑方等属性。因此中国象棋棋子可抽象出的棋子类(ChessPiece)如下:[4]
不同的棋子有不同的走法,即走棋规则。例如“车”的走棋规则是按水平或垂直方向无障碍行走或吃棋子。因为中国象棋走棋规则较复杂,因此单独设计一个规则类(Rule)。[5]
游戏主界面类ChineseChess是一个可视化的界面,因此需要继承JFrame类。在该界面中我们通过菜单完成网络设置、开始新棋局、认输、求和等操作。另外还要显示棋盘及棋子,可以完成走棋操作。[6]因此,ChineseChess类设计如下:
因为本系统为一款网络对弈版的中国象棋游戏,因此需要设计网络通信模块。根据面向对象的编程思想,一切皆为对象,网络通信模块可以设计成一个网络通信类,完成网络对弈的需要。网络通信类需要使用Socket技术。因网络对弈需要两台电脑通过Internet完成对弈,因此需要输入和输出Socket,即服务器端和客户端两个方向的流实现数据传输。
在服务器端,首先需要根据端口(port)建立一个serverSocket,然后建立一个等待客户端的监听Socket,然后再各创建一个输入输出流。在客户端需要根据服务器的IP地址和Port创建客户端Socket,同样需要各创建一个输入输出流,这样服务器端和客户端就可以通信了。另外网络通信类中设计一个调度方法 dispatcher(String s),通过提取字符 s的信息,可以得出调用者的操作类别,包括走棋、悔棋、新游戏申请等,再根据操作类别做相应的处理。
本文在分析中国象棋走棋规则后,采用Java技术、网络通信技术和面向对象的设计方法,完成了网络对弈版中国象棋设计,实现玩家通过网络完成对弈功能。通过实验运行,证明本次设计可行,并达到了预期效果。
[1]Bruce Eckel.Java 编程思想[M].北京:机械工业出版社,2007:680-688.
[2]臧利萍,程文静,王卫振.基于Android的中国象棋游戏的模拟[J].电脑知识与技术,2014(32):7742-7743.
[3]杜帮国.基于Java平台的中国象棋游戏的设计与实现[D].大连:大连理工大学,2013.
[4]高伟,郭瑾,张昊.基于JAVA技术的中国象棋游戏设计与实现[J].大连民族学院学报,2007(5):17-19.
[5]李勇.基于移动互联网的国际象棋对弈系统的设计与实现[D].武汉:华中科技大学,2011.
[6]戴锦馄.计算机象棋[J].微计算机应用,1994(3):5-11.