发布时间:2010-11-8 阅读量:2356 来源: 发布人:
中心议题
* 提出了基于J2ME和蓝牙技术的中国象棋游戏
* 给出了设计与实现
解决方案
* 基于MIDP2.0游戏API的基础上研究手机游戏的基本架构设计
* 在JSR82的J2ME应用开发架构的基础上搭建蓝牙网络
0引言
Java手机游戏在国内大约开始于2004年,经过多年的发展,已经形成了一定的规模。但是目前手机本身存在着屏幕有限、CPU运算速度有限、有限的存储空间等硬件问题的制约,不同手机产品存在的差异和不足之处以及手机联网游戏中网络传输速度的问题,这些在一定程度上都对手机游戏的发展产生了一定的影响。蓝牙手机游戏的出现,在一定程度上缓解了这种矛盾,蓝牙与手机结合体现了其低成本和便捷性的特点,适用范围广。在以J2ME平台和Java蓝牙无线API的基础上,本文设计并实现了一个既能单机智能引擎又可以双人联网游戏的蓝牙手机游戏—中国象棋,为手机游戏的研究与开发提出一种新的解决思路。
1系统设计与实现
游戏系统的主要目标是设计并实现一个J2ME环境下的蓝牙手机游戏,并对实现手机游戏的一些关键技术进行研究。
主要研究内容有以下几个方面:
(1)探索手机游戏开发的基本流程;
(2)基于MIDP2.0游戏API的基础上研究手机游戏的基本架构设计;
(3)在JSR82的J2ME应用开发架构的基础上搭建蓝牙网络;
(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所示。进入服务端或客户端界面后,分别生成蓝牙连接服务类和客户类进行联网,联网成功后创建游戏界面并把用于消息发送和接收的连接类注册给游戏界面。游戏过程中由游戏界面作为控制器进行游戏控制。因为游戏过程中还涉及到聊天功能,信箱类采用GOF的Singleton模式设计,保证了整个游戏过程中只有一个信箱。发送和接收的信息都保存在信箱中,随时可以查看。当建立连接后,服务端和客户端分别创建发送、接收消息线程,采用多线程方式以防止连接操作时间过长而阻塞主线程。在服务端和客户端各有一个while(true)循环,用于监听对方发过来的消息。然后根据消息的类型,做出不同的操作。
1.2.4声音播放模块
本模块主要是在玩家进行游戏时播放背景音乐和游戏音效。这部分功能封装在Sound类中,该类也采用GOF的Singleton模式设计,以保证在整个游戏过程中游戏声音不会重叠。声音播放通过继续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游戏开发中,如何实现性能优良的图形引擎、如何模拟逼真的人工智能和如何平衡游戏的功能和性能,都是十分棘手的问题。手机设备处理能力有限,内存容量有限,屏幕尺寸和效果均差强人意,这样一种环境下如何实现丰富的效果,达到不错的性能,而且还要适应各种不同的性能参数,更是一种挑战。
英特尔公司新一轮全球裁员行动正式启动。根据内部信息,其核心制造部门——英特尔代工厂(Intel Foundry)的“初步”裁员已于7月中旬展开,预计在本月底完成首阶段人员调整。公司高层在致工厂员工的备忘录中强调,该决策旨在“打造一个更精简、更敏捷、以工程及技术能力驱动的制造体系”,此举对于“赢得客户信任”及提升市场竞争力至关重要。
全球三大DRAM巨头——三星电子、SK海力士和美光科技——已正式拉开DDR4内存大规模停产的序幕,标志着主流内存技术加速进入更新换代期。继三星率先宣布其DDR4产品线将在2025年底结束生命周期后,美光也正式向核心客户发出通知,确认其DDR4/LPDDR4产品在未来2-3个季度内将逐步停止出货。
据行业消息,三星电子近期在其越南工厂启动115英寸RGB MicroLED电视的试生产。电视业务负责人Yong Seok-woo亲赴产线视察流程,标志着该技术正式进入量产准备阶段。尽管产品命名包含"MicroLED",但技术本质为采用RGB三色MiniLED背光的液晶电视(LCD),通过创新背光方案实现画质跃升。
AMD在AI Advancing 2025大会上正式宣布,其新一代MI350系列AI加速器将搭载三星电子与美光的12层堆叠HBM3E高带宽内存芯片。这是AMD首次公开确认三星的HBM3E供货身份,标志着双方战略合作进入新阶段。MI350X与MI355X两款芯片采用相同架构设计,仅在散热方案上存在差异,均配备288GB HBM3E内存,较上一代MI300X的192GB提升50%,比MI325X提升12.5%。
全球光学龙头舜宇光学科技(02382.HK)近期披露2025年5月出货量数据,呈现“车载领跑、手机承压、新兴品类崛起”的鲜明态势。在汽车智能化浪潮与消费电子结构性升级的双重驱动下,公司业务版图正经历深度调整。