基于J2ME和蓝牙技术的中国象棋游戏的研究

发布时间:2010-11-8 阅读量:2303 来源: 发布人:

中心议题
    * 提出了基于J2ME和蓝牙技术的中国象棋游戏
    * 给出了设计与实现
解决方案
    * 基于MIDP2.0游戏API的基础上研究手机游戏的基本架构设计
    * 在JSR82的J2ME应用开发架构的基础上搭建蓝牙网络

0
引言

Java手机游戏在国内大约开始于2004年,经过多年的发展,已经形成了一定的规模。但是目前手机本身存在着屏幕有限、CPU运算速度有限、有限的存储空间等硬件问题的制约,不同手机产品存在的差异和不足之处以及手机联网游戏中网络传输速度的问题,这些在一定程度上都对手机游戏的发展产生了一定的影响。蓝牙手机游戏的出现,在一定程度上缓解了这种矛盾,蓝牙与手机结合体现了其低成本和便捷性的特点,适用范围广。在以J2ME平台和Java蓝牙无线API的基础上,本文设计并实现了一个既能单机智能引擎又可以双人联网游戏的蓝牙手机游戏—中国象棋,为手机游戏的研究与开发提出一种新的解决思路。

1系统设计与实现

游戏系统的主要目标是设计并实现一个J2ME环境下的蓝牙手机游戏,并对实现手机游戏的一些关键技术进行研究。

主要研究内容有以下几个方面:

(1)探索手机游戏开发的基本流程;

(2)基于MIDP2.0游戏API的基础上研究手机游戏的基本架构设计;

(3)JSR82J2ME应用开发架构的基础上搭建蓝牙网络;

(4)分析研究人机博弈中的博弈树搜索,棋局局面评估等核心技术;

(5)J2ME和蓝牙技术的基础上设计并实现蓝牙手机游戏—中国象棋。

1.1系统结构

本系统的结构图如图1所示。

界面模块:负责与用户交互,包括显示和对用户输入的响应。

象棋引擎模块:负责生成人工智能的象棋走法。

蓝牙通信模块:负责双人游戏过程中的所有消息的传递。

存储模块:负责存储游戏设置和单人游戏时的游戏存档。

音效模块:负责根据游戏设置播放背景音效和下棋音效。

辅助模块:用于显示一些提示和帮助信息。

系统主要流程图如图2所示。

 

1.2系统实现

1.2.1界面模块

界面是整个游戏最重要的部分,通过继承Canvas类来实现。所有的图形图像绘制和用户交互(包括按键、指针和Command)都由Canvas类来实现。

1.2.2象棋引擎模块

首先对某一特定的棋局信息由走法生成器生成当前下棋方所有合法的走法并存入走法队列。然后通过搜索算法来逐一读取走法并调用局面评估函数对该走法所产生的后继局面进行评估打分,从中选出一个最有可能导致走棋方取胜的走法。在搜索的过程中采用了一些辅助手段来提高搜索的效率。其过程如图3所示。

游戏界面通过调用象棋引擎的控制类中的Think()方法开始引擎的工作。引擎工作的序列图如图4所示。Chess对象调用Alphabeta_HH对象的SearchAGoodMove()方法,紧接着Alphabeta_HH对象调用MoveGenerator对象的CreatePossibleMove()方法生成每一个棋子的所有合法走法,然后对这些走法用Eveluation对象的Eveluate()方法进行估值比较,找出其中得分最高的走法,最后返回给Chess对象。

1.2.3蓝牙通信模块

蓝牙游戏流程图如图5所示。进入服务端或客户端界面后,分别生成蓝牙连接服务类和客户类进行联网,联网成功后创建游戏界面并把用于消息发送和接收的连接类注册给游戏界面。游戏过程中由游戏界面作为控制器进行游戏控制。因为游戏过程中还涉及到聊天功能,信箱类采用GOFSingleton模式设计,保证了整个游戏过程中只有一个信箱。发送和接收的信息都保存在信箱中,随时可以查看。当建立连接后,服务端和客户端分别创建发送、接收消息线程,采用多线程方式以防止连接操作时间过长而阻塞主线程。在服务端和客户端各有一个while(true)循环,用于监听对方发过来的消息。然后根据消息的类型,做出不同的操作。

 

1.2.4声音播放模块

本模块主要是在玩家进行游戏时播放背景音乐和游戏音效。这部分功能封装在Sound类中,该类也采用GOFSingleton模式设计,以保证在整个游戏过程中游戏声音不会重叠。声音播放通过继续MMAPI可选包中的Player类来实现。

LPAudioPlayer类:以独占方式播放声音,用于播放短促的游戏音效。

ThreadAudioPLayer类:以线程的方式播放声音,用于背景音乐的播放。

Sound类:声音播放模块的控制类,外部类要调用声音模块就是通过获取Sound类的实例来调用。

2系统关键技术的研究

2.1象棋搜索算法

搜索算法对于整个下棋引擎来说都是至关重要的。它如同程序的心脏,驱动着整个程序。搜索算法的好坏直接影响着程序执行的效率。

可以用一棵“博弈树”(n叉树)来表示象棋的下棋过程——树中每一个结点代表棋盘上的一个局面,对每一个局面(结点)根据不同的走法又产生不同的局面(生出新的结点),如此不断直到再无可选择的走法,即到达叶子结点(棋局结束)。中国象棋的博弈树的模型如图6所示。

该树包含3种类型的结点:

(1)奇数层的中间结点(以及根结点),表示轮到红方走棋;

(2)偶数层的中间结点,表示轮到黑方走棋;

(3)叶子结点,表示棋局结束。

现在让引擎下棋,它应当选择一步对它最有利的走法(最终导致它取胜的走法)。获得最佳走法的方法就是“试走”每一种可能的走法,比较它们所产生的不同后果,然后从中选出能够产生对自己最有利的局面的走法。如果考虑到下棋是一个你来我往的交替进行并且相互“较劲”的过程。由于每一方都会尽可能将局面导向对自己有利而对对方不利的方向,那么某些局面由于能够产生出很糟糕的局面因而根本没有再继续考虑的价值。所以当看到某个局面有可能产生很糟糕的局面时,应当立刻停止对其剩余子结点的分析。这样便可以在很大程度上减少搜索的工作量,提高搜索效率,这称为“树的裁剪”。

下面用图7来进一步说明“树的裁剪”。这里我们假设博弈树的每个结点只有3个分支。

假定棋盘上的局面发展到了结点A,现在轮到“最大者”走棋了——即“最大者”希望棋局的分值尽可能的高。可以用下面的算法实现“树的裁剪”,从而提高搜索效率。“最小-最大”的思想再加上“对树的裁剪”,这就是本搜索算法的核心。

基本的代码如下:

2.2棋局局面评估

棋局局面评估简单来说就是给棋局打分,它是评估一个棋局局面优劣的过程。如果说搜索算法是心脏,那么局面评估就是大脑。由于象棋需要走很多的步数才能将对方将死。

在棋局进行过程中判别棋局局面的优劣,可行的办法就是对棋局局面进行数值量化来判别棋局局面的优劣。在中国象棋棋局局面评估中所要考虑的最基本的几个因素包括如下:

(1)棋子的价值评估

这是最简单有效的一种评估手段。简单的说就是对双方都在棋盘上的棋子进行数值量化评估。根据我们的经验,可以设定:车-700,马-300,炮-350,仕-100,相-100,兵-60,将帅-无穷大(通常用一个远大于其它棋子的数)等等。一方的棋子价值总值就是棋盘上现有的的该方棋子乘以棋子价值的总和。

可用如下的式子表达

Side_Value=Sum(Piece_Number*Piece_Value)

其中Piece_Number是某种棋子的数量,Piece_Value是该种棋子的价值,Sum是对各种棋子的总价值求和。如果红方的棋子价值总和大于黑方的棋子价值总和,通常表示红方的棋局局面优于黑方。红黑双方的Side_Value值相差越大,就表示棋局局面的优势也就越大。

(2)棋子的灵活度与棋盘控制价值评估

棋子的灵活性是指棋子能够活动的范围,活动范围通常是越大越好。如一个不能移动的炮很难在棋局中发挥大的作用;一个蹲在边角里的车也是用处不大的。评估棋子的灵活性较为简单,将一个棋子的所有合法走法全部罗列出来,如果能多一个可走位置就加上一定分值。可用如下的式子表达

Piece_Mobility=Sum(Piece_MoveNumber*Piece_MoveValue)

其中,Piece_MoveNumber是某种棋子的合法走法数量,Piece_MoveValue是该种棋子每种走法的价值,Sum是对所有棋子的灵活性价值求和。Piece_Mobility就是所有棋子的灵活性分数。

还可以评估博弈双方对棋盘上位置的控制能力。在象棋中,如果某一位置落在某方棋子的合法走步上,就可以认为被该方控制。如果某一位置同时落在双方的合法走步上,我们可以根据双方控制该位置的棋子数量及棋子价值来决定孰优孰劣。

(3)棋子关系的评估

棋子间的关系也是棋局局面评估的重要内容之一,我们可以将某个棋子被对方棋子威胁看成是一个对己方不利的因素。如红马的位置正在黑炮的合法走步当中,面临被黑炮“吃”掉的危险。此时我们可以把红马的价值减去一定分值。而如果红马在黑车的合法走步之中,红马同时也在红卒的合法走步之中,这时候我们可以认为红马置于红卒的保护之下,没有受到威胁,价值不变。

棋子关系的评估也应当考虑到该哪方走棋的问题。如果某个红马落在黑车的合法走步之中,但此时轮到红方走棋,应认为红马受到的威胁较轻。而如果此时轮到黑方走棋,就应认为红马受到的威胁很大,应减去一个相对较大的分值了。

 

3系统运行结果及关键代码

游戏启动后首先进入登陆界面,而后会进入主界面选择单人游戏,多人对战或音效设置等选项。在主菜单界面选择双人对弈,对蓝牙联网游戏进行测试。选择创建游戏或加入游戏进入联网界面,在服务端界面选择启动服务,在客户端界面选择搜索服务,在各自界面提示联网成功后,服务端可以选择开始游戏,双方就同时进入游戏界面。进入游戏界面后即可通过移动手形图标选择要走的棋的棋子要走到的位置,按下确定或数字键5,就完成了一次走棋。走棋后在服务端界面和客户端界面的棋盘都会有同样的改变,两个棋盘是一致的。如图8、图9所示。

蓝牙服务端创建服务的关键代码如下:

4结束语

本文设计并实现了一个基于J2ME和蓝牙技术的手机游戏——中国象棋,分析了其中涉及的关键技术-象棋搜索算法,局面评估等。程序开发采用了Java语言,使系统具有较好的可移植性,能在主流的手机平台上正常运行。但游戏程序不同于其它应用程序,手机这种嵌入式设备也不同于其它的开发环境,二者都具有相当的特殊性。游戏是一种综合了图形图像、人工智能等多种技术的应用,而且是对性能有着苛刻的要求。在普通的PC游戏开发中,如何实现性能优良的图形引擎、如何模拟逼真的人工智能和如何平衡游戏的功能和性能,都是十分棘手的问题。手机设备处理能力有限,内存容量有限,屏幕尺寸和效果均差强人意,这样一种环境下如何实现丰富的效果,达到不错的性能,而且还要适应各种不同的性能参数,更是一种挑战。

相关资讯
华为、地平线、大众、东风、起亚等引领汽车技术变革, 来AMTS 2025了解更多未来汽车开发解决方案!

鸿蒙座舱正式启动基于HarmonyOS NEXT的鸿蒙车机操作系统应用先行者开发计划

高可靠+低功耗:虹扬SOT23封装ESD二极管领跑车规级防护市场

随着汽车电子化、智能化加速,车载系统对ESD(静电放电)防护的要求日益严苛。虹扬电子推出的车规级ESD保护二极管AH05C325V0L,采用SOT23封装,符合AEC-Q101标准,专为CAN总线、车身控制单元(BCU)及电子控制单元(ECU)等场景设计。其核心特性包括80W浪涌吸收能力、5V反向工作电压、单向电流设计,以及低漏电流和高抗静电能力(±30kV接触放电),为敏感电子元件提供高效防护。

消费电子补贴效应凸显,中小尺寸驱动IC需求三连增

全球显示面板核心元器件市场呈现企稳态势。根据TrendForce最新研究报告显示,2023年第一季度面板驱动IC产品均价环比下降幅度收窄至1%-3%区间,第二季度虽仍存在价格下行压力,但降幅预计将控制在2个百分点以内。这标志着自2020年疫情引发的剧烈市场波动后,驱动IC价格曲线首次出现明显筑底信号。

成本直降40%!易飞扬硅光模块如何重构DCI市场格局?

在全球5G网络部署与边缘计算需求井喷的背景下,易飞扬创新推出基于O波段的100G QSFP28 DWDM光模块,直击城域网络升级痛点。该产品通过零色散传输架构与硅光集成技术,突破传统C波段方案在中短距场景下的性能瓶颈,以低于3.5W的功耗实现30km无补偿传输,同时兼容开放光网络架构。据行业测算,其部署成本较同类方案降低40%,为5G前传、分布式AI算力互联及绿色数据中心建设提供了高性价比选择,或将成为运营商边缘网络改造的关键技术引擎。

充电效率94.8% vs 国际竞品:国产IC技术路线图全解析

在全球能源转型与欧盟新电池法规(EU 2023/1542)的驱动下,旭化成微电子(AKM)于2025年2月正式量产AP4413系列充电控制IC,以52nA超低功耗、94.8%充电效率及多电压适配等核心技术,重新定义小型设备供电逻辑。该产品通过电容器预充电机制破解完全放电恢复难题,并凭借动态电压调节算法兼容光能、振动等微瓦级能源输入,显著优于TI、ADI等国际竞品。面对国产替代窗口期,AP4413依托BCD工艺与专利壁垒抢占先机,有望在智能家居、工业传感等千亿级市场替代传统一次性电池方案,成为环保供电赛道的标杆级解决方案。