基于J2ME手机的网络象棋游戏源代码的阅读分析.doc

上传人:marr****208 文档编号:132132087 上传时间:2020-05-12 格式:DOC 页数:19 大小:1.47MB
返回 下载 相关 举报
基于J2ME手机的网络象棋游戏源代码的阅读分析.doc_第1页
第1页 / 共19页
基于J2ME手机的网络象棋游戏源代码的阅读分析.doc_第2页
第2页 / 共19页
基于J2ME手机的网络象棋游戏源代码的阅读分析.doc_第3页
第3页 / 共19页
基于J2ME手机的网络象棋游戏源代码的阅读分析.doc_第4页
第4页 / 共19页
基于J2ME手机的网络象棋游戏源代码的阅读分析.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《基于J2ME手机的网络象棋游戏源代码的阅读分析.doc》由会员分享,可在线阅读,更多相关《基于J2ME手机的网络象棋游戏源代码的阅读分析.doc(19页珍藏版)》请在金锄头文库上搜索。

1、游戏程序设计课程大作业专 业:班 级:学 号:姓 名:指导教师姓名:张文胜报 告 日 期:2012年6月游戏程序设计课程大作业 基于J2ME手机的网络象棋游戏源代码的阅读分析1 游戏简介随着通信技术的高速发展,移动通信技术规模的不断扩大,手机越来越普及。手机已从最初的通信工具,演变成今天的一个多功能的电子设备,通话功能只不过是手机的基本功能,如今,游戏、上网、音乐、摄像等功能才是用户购买手机产品时的参考因素。在琳琅满目的手机应用程序中,手机游戏所占的份额是很大的。近几年来,伴随着移动网络和移动终端性能的不断提高与完善,其增长势头远远超过其他移动数据业务,已经逐渐成为一个生机勃勃而又潜力巨大的文

2、化产业。手机游戏极高的普及率和巨大的使用量使得这个市场商机无限,并已经成为移动运营商、服务提供商、内容提供商的重要收入来源,可以说是一座名副其实的“金矿”。目前,手机游戏的收费模式主要包含三类。一类是单机下载的收费模式,通过下载的不同游戏收取一定的费用。另一类是联网游戏的收费模式。还有一种模式,游戏本身是免费的,但用户为了能够获得更为丰富的游戏体验,需要在游戏进行过程中支付一定的费用购买商品、用品、增值服务、服装、道具等。即将开通的3G网络,也将为手机网游带来全新的发展。但是根据目前手机硬件的制约,网络游戏时间的延缓,导致很多手机用户并不愿为手机网游付费。蓝牙手机游戏的出现,缓解了这种矛盾。蓝

3、牙与手机结合体现了其低成本和便捷性的特点,适用范围广。拥有蓝牙功能的手机越来越普遍,具有强大游戏功能的手机越来越多,用户对游戏的要求也越来越高,具有交互性质的蓝牙游戏必定能获得用户青睐。近年来在世界范围内,随着手机的日渐普及,手机游戏已经成为整个视频游戏领域发展速度最快的部分。与PC游戏不同,手机游戏摆脱了线缆的束缚,具有随时、随地、随身的特点,更适合人们在移动中休闲和娱乐。显然,手机游戏产业一旦启动,其能量将不亚于目前的电脑网络游戏。根据信息产业部公布的最新统计结果,截止到2008年12月底,我国移动电话用户数已经达到64123万户,即使考虑一个以上电话号码的手机用户,国内的手机用户数量也是

4、居世界前列1。国内有着庞大的手机用户数量,即使只有10%的用户,每月只下载一款游戏,也足以使其形成一个规模庞大的产业。但是目前仅有不足1%的用户下载过手机游戏,这使得这块被无数人看好的市场并没有达到和人们预期相吻合的水平。人们似乎更容易接受其他的增值业务(比如彩信、彩铃等),而对手机游戏的认知度却相当低。JAVA手机游戏在国内大约开始于2004年,经过多年的发展,已经形成了一定的规模。据统计,2007年中国手机游戏市场超过8亿人民币,目前手机游戏市场活跃用户已经达到了500多万,随着手机网游用户数量和产品大规模增加,预测至2011年中国手机游戏市场规模将达37亿元2。目前国内手机游戏己走过了从

5、最初的文字类游戏、嵌入式游戏、可下载的单机版游戏到大型手机网络游戏的发展历程,手机游戏的业务形态日益成熟。开发环境:装有jdk的xp及其以上系统的电脑1台,eclipse工具,Wireless Toolkit 2.5.2模拟器。1.1 J2ME的分层体系结构J2ME体系结构通过一个分层软件模型来实现,该模型构建于本地操作系统之上。J2ME的分层体系结构依照各种设备的资源特性,将J2ME技术架构分为简表(Profile)、配置(Configuration)和Java Virtual Machine(JVM)三层,然后进一步细分,这使J2ME能够在每一类设备的限制下工作,而同时提供最低限度的Jav

6、a语言功能性,如图所示。J2ME的分层体系结构(1)操作系统层:特定硬件设备的操作系统层。(2)Java虚拟机层(JVM):针对设备本地操作系统定制的Java虚拟机的实现,支持特定的J2ME配置。(3)配置层(Configuration):J2ME将设备进行分类,提取设备的一些共性出来形成适合于某个范畴中设备可用的规范,称为“配置”。(4)简表层(Profile):定义了特定系列设备上可用的应用程序编程接口(API)的最小集。(5)可选包(Option Package):通常是一些本身具有独立价值的API,厂商依照自己的需求,选择性的实现其中某些Optional Packages规范。2.2

7、J2ME配置(Configuration)配置在3层体系结构中起到承上启下的作用,定义了针对在总存储空间、电源、网络连接等硬件功能有类似需求的某个水平范畴或者一组设备的Java平台。配置规定了所支持的Java编程语言特征、Java虚拟机特征和基本Java类库及其API。到目前为止,通过Java规范定义的只有两种配置,它们是:(1) 有限连接设备配置 (CLDC, Connected Limited Device Configuration):这个配置致力于低端的消费类设备。这些设备的特点是无线连接、没有稳定的电源供应(通常使用电池)、设备资源少。(2)连接设备配置 (CDC, Connecte

8、d Device Configuration):这个配置致力于高端的消费类设备。这些设备的特点是高带宽的网络连接、电源稳定、设备资源比较受限。CDC和CLDC的大部分功能都来源于J2SE。它们之间的关系如图2-2所示。CDC是加上一些额外类的J2SE的子集, CDC是CLDC的完整超集,包含了所有的CLDC规范,所以基于CLDC的程序在CDC内是完全兼容的。图2-2 J2SE、CDC、CLDC类库之间的关系2 游戏组成 图1 连接网络服务 图2 红方走棋 图3 选择游戏房间 图4 两个玩家对战 图5 两个玩家对战 图6 比赛完胜后的截图3 代码分析3.1游戏引擎的设计分析首先使用一个数据结构来

9、描述棋局信息,对某一特定的棋局信息由走法生成器生成当前下棋方所有合法的走法并依次存入走法队列。然后通过搜索算法来逐一读取走法并调用局面评估函数对该走法所产生的后继局面进行评估打分,从中选出一个最有可能导致走棋方取胜的走法。在搜索的过程中还可以采用一些辅助手段来提高搜索的效率。其过程如图3-1所示:引擎工作流程通常,用一个二维数组来描述棋盘及其上的棋子信息。中国象棋的棋盘可以用一个910个字节的二维数组来表示,数组中每一个字节代表棋盘上的一个交点,其值表明这个交点上放置的是一个什么棋子或是没有棋子。棋盘表示好比是整个象棋引擎部分的地基,之后所有的操作都将建立在其基础上。搜索算法搜索算法对于整个下

10、棋引擎来说都是至关重要的。它如同程序的心脏,驱动着整个程序。搜索算法的好坏直接影响着程序执行的效率(从某种角度上,它影响着引擎的下棋水平。因为,引擎必须在有限的时间内完成思考,搜索速度快意味着在相同的时间内程序可以“看”得更远,“想”的更多)。关于棋类对弈程序中的搜索算法,经前人的努力已形成了非常成熟的Alpha-Beta搜索算法以及其它一些辅助增强算法(还有众多基于Alpha-Beta算法的派生、变种算法)。鉴于目前知识储备、时间、精力等均达不到推陈出新、另开炉灶的要求,再加之前人的算法着实已相当完善,所以我在程序中直接借鉴了Alpha-Beta搜索算法并辅以了历史启发。用一棵“博弈树”(一

11、棵n叉树)来表示下棋的过程树中每一个结点代表棋盘上的一个局面,对每一个局面(结点)根据不同的走法又产生不同的局面(生出新的结点),如此不断直到再无可选择的走法,即到达叶子结点(棋局结束)。中国象棋的博弈树的模型如图3-3所示:图3-3 象棋博弈树3.1.1 发送信息等待用户读取:public void sendMessage(Player p, String str) / 发送信息,等待用户读取p.data.push(new String(str);3.1.2 更新所有客户桌面:public void updateClientsDesk(int deskid) / 更新所有客户桌面for (E

12、numeration en = players.elements(); en.hasMoreElements();) Player player = (Player) en.nextElement();if (player != null)updateDesk(player, deskid);3.1.3 更新单个桌面:public void updateDesk(Player isa, int deskid) / 更新单个桌面String message = updatedesk, + deskid;String str = ;for (int i = 0; i desksdeskid.get

13、PlayersCounter(); i+) if (i = 0) if (desksdeskid.isEmpty(i) str = 0;else str = 1; else if (desksdeskid.isEmpty(i) str = str + ,0;else str = str + ,1;message = message + : + str;sendMessage(isa, message);3.1.4 获得桌面列表:public void sendDeskList(Player player) / 获得桌面列表String message = desks, + DESKNUM;fo

14、r (int i = 0; i DESKNUM; i+) String str = ;for (int j = 0; j desksi.getPlayersCounter(); j+) if (j = 0) if (desksi.isEmpty(j) str = 0;else str = 1; else if (desksi.isEmpty(j)str = str + ,0;else str = str + ,1;message = message + : + str;sendMessage(player, message);3.1.5 处理登陆信息:public void denglu(HttpServletRequest request) / 处理登陆信息Player player = new Player(request.getRemoteAddr(), request.getRemotePort();player.setID(counter);counter+;players.put(request.getRemoteAddr() + : + request.getR

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号