基于J2ME五子棋手机游戏开发

上传人:卷*** 文档编号:141475575 上传时间:2022-08-24 格式:DOC 页数:33 大小:414.50KB
收藏 版权申诉 举报 下载
基于J2ME五子棋手机游戏开发_第1页
第1页 / 共33页
基于J2ME五子棋手机游戏开发_第2页
第2页 / 共33页
基于J2ME五子棋手机游戏开发_第3页
第3页 / 共33页
资源描述:

《基于J2ME五子棋手机游戏开发》由会员分享,可在线阅读,更多相关《基于J2ME五子棋手机游戏开发(33页珍藏版)》请在装配图网上搜索。

1、 基于J2ME五子棋手机游戏开发摘要 基于J2ME 技术,设计并开发了一款五子棋手机游戏,程序实验取用Java语言,便于游戏软件的移植,采用手机模拟器进行模拟测试,便于检查游戏功能的实现。在构建了完善的游戏思维的基本上,划分功能模块,实现整套游戏的开发。整个程序完毕的功能是一种人机对战的五子棋游戏,游戏的重点与难点在于计算机人工智能算法,总的来说就是根据棋型选择最优的点下子。核心词 J2ME;手机游戏;人工智能 ABSTRACT Based on J2ME technology, we designed and developed a mobile game backgammon, proce

2、dures, experimental access to java language, to facilitate the transplant games, mobile simulator used to simulate the test, easy to check the function of the realization of the game. Construction of a perfect game in mind, based on division of function modules, to achieve complete game development.

3、 Complete the whole process is the function of a human-computer play against a backgammon game, the game is important and difficult computer AI algorithms, in general is to choose the best according to point type chess erupted.KEY WORDS J2ME;Games of Mobile;Artificial Intelligence目录1. 前 言12.有关简介22.1

4、 J2ME简介22.2 Configuration和CLDC22.3 手机游戏特点33.棋类游戏的有关探讨43.1 逻辑层和体现层的分离43.2 自适应尺寸和可移植性44.五子棋游戏的架构54.1 事件驱动游戏54.2 游戏的类构造54.3 游戏的流程74.4 五子棋的人工智能84.4.1 五子棋的获胜组合84.4.2 设计获胜棋型95.游戏设计与实现95.1 MIDlet简介95.1.1 MIDlet生命周期105.1.3 FIRMIDlet类代码片断125.2 游戏简介表单的实现125.3 游戏设立表单的实现135.3.1 Gauge与ChoiceGroup组件简介135.3.2 Opti

5、on类设计145.3.3 Option类代码片断155.4 棋子Dot类的实现165.5 对战逻辑FIRlogic类的实现175.5.1 落子与悔棋175.5.2 棋型检测的实现175.5.3 FIRlogic类代码片断195.6 游戏画布205.6.1 Canvas类简介205.6.2 FIRCanvas类实现215.6.3 顾客输入236. 结束语24参照文献25道谢27基于J2ME的五子棋手机游戏开发1. 前 言随着手机网络的日益进化,手机硬件性能的不断提高,手机功能越来越多, 人们对于掌上数字娱乐的追求与日俱增,随着越来越多的智能手机的上市,手机的功能已经不再局限于收发短信、接听电话等

6、人们的基本通信需求,手机的游戏功能得以彰显。对于多媒体的支持,使得在手机上开发游戏应用程序更加得心应手,并且游戏的体现力也得到了极大的发挥。随着计算机软件技术的不断发展,嵌入手机等移动设备的软件开发逐渐浮现了新的突破。Java 技术的兴起,解决了移动设备软件开发固有的某些弊端,也使高档手机游戏的开发成为现实,其良好的跨平台特性和面向对象的优势在嵌入移动设备的软件开发中显示出了巨大的威力。而J2ME(Java 2 Micro Edition) 的诞生给高档手机游戏的开发又带来了新的生机。J2ME 技术用于手机游戏开发,不仅便于查看游戏运营过程中内存的占用量和程序的每一部分代码消耗了多少解决器时间

7、,并且可以不断地优化代码,使用J2ME 和MIDP 进行手机游戏开发已越来越受到人们的关注。忙碌的人们,在等车时、在公交车上、在偶尔的闲暇时间,掏出口袋中的手机,玩起手机游戏,短暂的娱乐使紧张的神经得以放松,从而以更加良好的状态投入到学习工作中去。本游戏重要的内容是人机对战,先达到五子连株者为胜,棋盘大小范畴是10x10至20x20,游戏难度分为三级别(初阶、中阶和高阶),玩家自行设立。玩家使用四个方向键的上(2)、下(8)、左(4)、右(6)来移动落子点位,移动到空白位置使用拟定键(5)来落子,游戏过程中容许悔棋(最多持续悔5步)。整个程序完毕的功能是一种人机对战的五子棋游戏,游戏重点与难点

8、在于如何设计一套迅速有效的人工智能算法,尽量增长游戏的可玩性。本程序取用根据盘面形势,判断在某个位置落子后会形成什么棋型(如“五连”、“冲四”、“活三”等),然后通览全盘选出最佳落子点的措施。2.有关简介本次毕业设计采用了J2ME技术,Java是目前占据优势的手机软件开发技术,并且它是一种开放平台,这意味着可以开发一组代码并使其在众多的移动设备上运营。下面将述J2ME的某些有关知识。2.1 J2ME简介Sun公司将J2ME(java 2 Micro Edition,Java2微型版)定义为“一种以广泛的消费性产品为目的、高度优化的Java运营时环境”。J2ME是为了那些使用有限能源、有限网络连

9、接(常常是无线连接),以及有限图形顾客界面的设备而开发的。从1999年6月在Java One Developer Conference上声明之后,J2ME便进入了小型设备开发的行列。当时,由于分布式编程深受Java开发者团队的欢迎,大多数与会者都只对J2EE的功能感爱好。富有戏剧性的是,在随后的两年里,开发者意识到了运营Java的小型组件同样具有很高的价值,J2ME逐渐流行。J2ME不只是一种单独的技术规范,而是一系列技术规范的总称。这些规范定义了Java技术在资源限制的设备中的体现形式,并且新规范在不断制定当中,并且这些规范的制定是完全向公众开放的。目前所说的手机游戏其实是其中规范的一种,即

10、MIDP(移动信息设备规范),该规范应用最为一般,因此习惯上也被人们笼统地称为J2ME技术。J2ME重要应用于手机等小型嵌入式设备,这些设备由不同的厂商设计生产,功千差万别。J2ME在应用于这些设备的同步也保存了Java的老式特性,即任何时间和任何地点的代码都具有可移值性、部署灵活性、安全的网络传播性,以及代码稳定性。2.2 Configuration和CLDCJ2ME 平台是由配备(Configuration) 和简表( Pro2 file) 构成的。配备是提供应最大范畴设备使用的最小类库集合,在配备中同步涉及Java 虚拟机。简表是针对一系列设备提供的开发包集合。在J2ME 中尚有一种重要

11、的概念是可选包(Optional Package) ,它是针对特定设备提供的类库,例如某些设备是支持蓝牙的,针对此功能J2ME 中制定了JSR82 (BluetoothAPI) 提供了对蓝牙的支持。目前,J2ME 中有2 个最重要的配备, 分别是Connected Limited Devices Configuration (CLDC) 和Con2nected Devices Configuration (CDC) 。CLDC 是两个配备中较小的一种,为具有间断性联网能力、较慢的解决器和有限内存的设备设计的。这些设备涉及移动电话、双工呼喊器和入门级的PDA ,它们一般具有16 位或32 位的C

12、PU、128KB512KB 可用于Java 平台实现和有关应用程序的内存。CDC 是为解决能力较强、内存空间更大、联网能力更杰出的设备设计的。这些设备涉及电视机顶盒、车载娱乐系统、高品位PDA 等。CDC 涉及一种具有完备特性的Java 虚拟机,比CLDC 更大的Java SE的子集。CDC 的目的设备一般具有32 位或64 位的解决器,2MB 以上的可用于Java 平台实现和有关应用程序的内存空间。2.3 手机游戏特点一种手机游戏应当具有如下特性:易于学习:既然手机游戏面向的是一般消费者而不是计算机专家,那么她们不也许进一步的学习游戏技巧。消费者不会花几种小时去研究一种3 元的手动操作的游戏

13、。保持游戏的简朴是最基本的规定。可中断性: 多任务解决是手机生活方式的基本特性。手机顾客常常在任务(如等一种电子邮件或者等车) 之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一种设备。因此一种好的手机游戏应当提供短时间的娱乐功能,并且容许顾客在游戏和工作模式之间顺利切换。基于订阅:手机游戏的赚钱成功取决于她们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一种手机游戏开发者要获利的话,重要的是:同一种游戏引擎,多种标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最佳措施。丰富的社会交互:不管一种游戏设计得多好,只要玩家找到了它的主线模式或者玩完了所有的游戏途径不

14、久就会厌烦这个游戏。对于一种基于订阅的游戏,重要的是与别的玩家合伙以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。3.棋类游戏的有关探讨3.1 逻辑层和体现层的分离棋类游戏是移动设立比较擅长体现的游戏,相对于动作类游戏的快节奏,棋类游戏的特点就是玩起来速度慢,比较优雅,重要来培养玩家在某方面的思考和判断能力。棋类游戏的开发常常带有人工智能算法,因此,需要注重逻辑层和体现层的分离。逻辑层解决所有的判断、推算,可采用多种比较复杂的算法,而体现层则只管与玩家交互。3.2 自适应尺寸和可移植性MIDP设备也许有不同的屏幕尺寸、不同的键盘布局以及不同的可用A

15、PI。在设计游戏时必须考虑这些不同点,以便获得移值性最佳的游戏软件。游戏中所使用的棋盘大小是顾客设定的,尺寸也并非固定,而是应用程序从系统获得屏幕的尺寸,并进行计算得出,这些可以避免在屏幕上绘画时对坐标使用的硬代码。使用Canvas类的getHeight和getWidth措施可以完毕上述任务。此外,一种良好的做法是让游戏既支持键盘操作也支持指针操作,这一般不需要增长太多的代码,但可以提高游戏的可移值性。4.五子棋游戏的架构五子棋游戏的架构波及游戏驱动、类构造和流程的初步设计,由于人机对战五子棋采用了人工智能算法,因此,还对获胜棋型和攻守方略进行了探讨。4.1 事件驱动游戏棋类游戏一般具有两个重

16、要特性,一方面是对战双方轮流落子,另一方面是落子间隔一般是不拟定的,特别是对战后期,也许每一步棋都需要通过深思熟虑,无论是人方或是计算机方,都无法对间隔时间有实现的预期。基于以上两个特性,本游戏摒弃了大多数游戏采用的线程或定期器驱动游戏的措施,而采用事件驱动的措施,即玩家的键盘或触摸笔触发游戏的下一步动作。事件驱动大大减少了不必要的工作量,只有玩家发出消息时,计算机才启动运算,而在玩家思考期间,计算机不做任何运算和重绘操作。事件驱动的游戏循环如图3.1:4.2 游戏的类构造整个游戏共由六个类构成,如图3.2所示。游戏的FIRMIDlet类负责保持display对象,并且提供各屏幕之间的切换。整

17、个程序涉及四个屏幕:游戏主屏幕表单,实际玩家进行游戏的FIRCanvas,提供某些有关游戏选项的Option表单,以及一种用来显示有关信息的About表单。此外,Dot和FIRLogic类是分别用来构造游戏棋子和算法逻辑的。图4.1 事件驱动游戏循环图4.2 类构造4.3 游戏的流程游戏启动时,FIRMIDlet对象先显示游戏主屏,在屏幕下方一侧是退出软键,另一侧是用软键构成的菜单,菜单元素重要有“设立”和“有关”选项。当玩家选择“设立”软键时,则显示游戏参数设立表单;当玩家选择“开局”软键时,则显示游戏对战主屏;当玩家选择“有关”软键时,则显示游戏简介表单。玩家进入游戏参数设立表单,当玩家按

18、下“拟定”软键时,则确认目前游戏参数,返回游戏主屏;当玩家按下“取消”软键时,则放弃本次对游戏的修改,直接返回游戏主屏幕。玩家进入游戏对战画布,对战中画布有两个软键,当玩家按下“退出”软键时,则退出游戏;当玩家按下“悔棋”软键时,则进行悔棋操作;当游戏结束时,“悔棋”软键被换成“重玩”软键。整个游戏的界面切换流程图如图3.3所示。图4.3 游戏的界面切换游戏图4.4 五子棋的人工智能人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术(或者也可以称之为艺术),游戏中的AI可以在遵循一定规则的状况下,依程序设计者自身的思考逻辑制作。可以这样觉得,人工智

19、能的核心是使计算机具有自动解决事件的能力,而设计者的所有研究也应当环绕着这一方向进行。最常用的AI游戏就是棋盘式游戏。在此类游戏中,一般的方略类AI程序都是使计算机根据目前状况计算所有可走的棋与也许的获胜状况,并计算目前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一种最佳法。下面简介一下五子棋的AI设想。4.4.1 五子棋的获胜组合在一场五子棋的游戏中,计算机必须要懂得有哪些获胜组合,因此我们必须求得获胜组合的总数。目前假定目前的棋盘为15x15:1) 计算水平方向的获胜组合数,每一列的获胜组合是11,共15列,因此水平方向的获胜组合数为:11x15=165。2) 计算垂直

20、方向的获胜组合数,每一行的获胜组合是11,共15列,因此垂直方向的获胜组合数为:11x15=165。3) 计算正对角线方向的获胜组合数,正对角线上的获胜组合总数为11+(10+9+8+7+6+5+4+3+2+1)x2=121。 4) 计算反对角线方向的获胜组合数,反对角线上的获胜组合总数为11+(10+9+8+7+6+5+4+3+2+1)x2=121。 这样所有的获胜组合数为:165+165+121+121=572。4.4.2 设计获胜棋型我们已经计算出了一种15x15的五子棋盘会有572种获胜方式,这样我们可以运用数组建立某些常规棋型,棋型重要作用是:判断与否有任何一方获胜;根据目前格局判断

21、最也许的落子方式。然而在现实中,人们总结了诸多可以构成获胜棋型的“前奏” ,它们是通向胜利的捷径,如“冲四” 、“活三” 、“双三”等等。5.游戏设计与实现5.1 MIDlet简介 MIDlet是用J2ME APIs开发的程序,用于移动计算环境中。MIDlet需要一种特殊的运营环境,这个环境重要涉及一种应用程序管理器,它为在移动设备上选择和运营MIDlet提供以便。 5.1.1 MIDlet生命周期所有MIDlet都继承自java.microedition.midlet.MIDlet,该类涉及了MIDP平台控制应用程序执行过程的措施。当MIDlet被初始化后就进入它的生命周期,该生命周期涉及三

22、种状态:激活态(Active)、暂停态(Paused)和销毁态(Destroyed),这三种状态的控制完全由JAM来完毕。当浮现状态迁移时,JAM会自动调用相应的措施,MIDlet状态迁移图如4.1.1所示。图5.1.1 MIDlet状态迁移触发的措施调用JAM加载MIDlet后,一方面进行初始化的工作,然后将状态设立暂停态,如果在初始化过程中没有浮现异常,那么将MIDlet的状态设立为激活状态,否则将MIDlet的状态设立为销毁状态。在每次状态转换的时候都要高用相应的措施。5.1.2 主类FIRMIDlet类的实现FIRMIDlet类继承了MIDlet类,负责程序的启动和屏幕切换,该类用高档

23、界面中的软键来实现游戏菜单,在不同的手机上,软键也许有不同的分布。FIRMIDlet类的UML图如图4.1.2(1)所示,主界面如图4.1.2(2)与4.1.2(3)所示。图5.1.2 FIRMIDlet类的UML图 图5.1.2 (2) 初屏 图5.1.2 (3) 按下菜单后的屏幕5.1.3 FIRMIDlet类代码片断/构建主屏表单public FIRMIDlet() display=Display.getDisplay(this); form=new Form(null); try imgSplash=Image.createImage(/theme.png);/加载屏幕图片 catch

24、(IOException e) imgSplash=Image.createImage(1, 1); form.append(imgSplash); CMD_EXIT=new Command(退出,7,1); /创立退出软键 CMD_GO=new Command(开局,4,2); /创立开局软键 CMD_OPTION=new Command(设立,1,3);/创立设立软键 CMD_ABOUT=new Command(有关,5,3);/创立有关软键 form.addCommand(CMD_EXIT); /将退出软键添加到主表单 form.addCommand(CMD_GO); /将开局软键添加到

25、主表单 form.addCommand(CMD_OPTION); /将设立软键添加到主表单 form.addCommand(CMD_ABOUT); /将有关软键添加到主表单 form.setCommandListener(this); /监听主表单软键事件 myCanvas=new FIRCanvas(this); /创立画布 options=new Options(this); /创立设立表单 about=new About(this); /创立有关表单5.2 游戏简介表单的实现 About是游戏简介表单类,重要是向玩家论述五子棋的某些信息。其UML图如4.2(1)所示,游戏截图如4.2(2

26、)所示。图5.2(1) About类的UML图图5.2(2) 有关表单界面5.3 游戏设立表单的实现游戏设立表单Option类用来对游戏的参数进行设立,涉及棋盘大小,游戏难度,与否先手,过程中使用了Gauge和ChoiceGroup两种高档顾客界面组件。5.3.1 Gauge与ChoiceGroup组件简介Gauge组件实现了一种图形标尺,一般被用来表达一种过程的进展状况或者某些系列数字的选择状况。Gauge的构造措施根据指定的标签、交互模式、最大值、初始值生成一种新的Gauge对象,原型如下:Gauge(String label,Boolean interactive,int maxValu

27、e,int initialValue)l Gauge构造措施有4个参数:label、interactive、maxValue、initialValuel 参数label用作label对象的标签,设立为null表达标签为空l 参数interactive是一种boolean变量,表达这个Gauge对象的交互模式,设立为true表达交互模式,即顾客可以变化Gauge对象的值:如果设立为flase,则表达非交互模式,即顾客不可以变化Gauge的值。l 参数maxValue是一种不小于0的整数,表达Gauge对象的最大值(Gauge值的范畴为0,maxValue)。这个值必须不小于0,否则会抛出Ille

28、gaArgumentException。l 参数initialValue是一种整数值,表达Gauge对象的初始值,它的范畴是0,maxValue。如果initialValue不不小于0,则Gauge对象的初始值被设立为0;如果initialValue不小于maxValue,则被设立为maxValue。ChoiceGroup组件用来构造选择框,棋构造措施如下:ChoiceGroup(String label,int choiceType)该构造措施有两个参数,其中参数label用来设立此选项组的标签。Label可以设立为null,表达此Item对象的标签为空白。构造完毕后,还可以使用setLab

29、el措施和getLabel措施来分别设立和获取对象的标签。参数choiceType用来设立ChoiceGroup的类型,ChoiceGroup类继承了Choise接口的三种类型:l EXCLUSIVE,值为1,一次只有一种元素被选择。l MULTIPLE,值为2,一次可以有多种元素被选择。l IMPLICIT,值为3,类似软键菜单或者按钮,当被选择时,立即触发Command事件。l POPUP,值为4,弹出式菜单,当被选择时,弹出选项。5.3.2 Option类设计该类实现游戏参数的设立,其UML图如图4.3.2(1)所示,游戏截图如4.3.2(2)所示。图5.3.2 (1) Option类的

30、UML图图5.3.2 (2) 设立表单界面5.3.3 Option类代码片断/保存记录的措施public void saveOptions() try RecordStore rs=RecordStore.openRecordStore(Options, true);/打开记录,如果没有则创立 byte bs=new byte3; bs0=(byte)boardSize; /棋盘大小 bs1=(byte)(isComputerFirst?1:0); /先手 bs2=(byte)degree; /难度 if(rs.getNumRecords()0) /如果有记录则ID为1的记录内容为目前参数 r

31、s.setRecord(1,bs,0,3); else rs.addRecord(bs,0,3); /如果不存在记录,则添加新记录,内容为目前的参数 rs.closeRecordStore(); /关闭记录 catch(RecordStoreException e) 5.4 棋子Dot类的实现Dot类代表了现实中的棋子,该类重要和于记录棋子的位置和检查落子的合法性(与否越界)。五子棋是一种二维棋类游戏,因此一方面想到的是定义一种Dot类来表达棋子。考虑到移动设备的资源有限,以及尽量减少系统资源占用,程序不在下每一步棋时生成一种对象,而是在游戏进行时,玩家或者计算机每下一步棋,在数组相应位置生成

32、该棋子的对象,而将已经下过的棋子保存到数组中随时检索,这样可以避免过多的棋子对象占用系统内存。Dot类的UML图如4.4所示。图5.4 Dot类的UML图5.5 对战逻辑FIRlogic类的实现FIRLogic类是整个游戏的逻辑类,涉及了人工智能算法,这些算法重要体目前对多种棋型的检测并计算一种最佳的落子点。除此之外,该类还解决双方落子功能和悔棋功能,判断与否游戏结束,谁是胜利者。5.5.1 落子与悔棋当对战某一方在棋盘上落子时,就将棋盘数组的相应位置设立为该方代码(计算机方为1,玩家方为2)。双方落子后,程序人使用一种Dot类棋子对象来记录最后一步棋的位置,当玩家下了一步棋后需要将上一步重新

33、绘制,以消除棋子上的引导框。此外,还使用堆栈来存储近来的10步棋,以便玩家悔棋。为了实现悔棋功能,该程序采用了堆栈来存储近来的棋子,当玩家取用悔棋功能时,程序就会将堆栈里的头两步棋的对象移出,这时本来位于第三的棋子对象就变成了栈顶,然后将栈顶的棋子设立为最后一步,并重新绘制棋盘。5.5.2 棋型检测的实现connectedIn1D措施用于检测棋盘上任意一点在指定方向上的同类棋子相连个数,传入落子方标志(辨别计算机还是玩家)、检测位置的行列坐标和检测方向,返回在该方向上相连棋子的个数,若检测到对方棋子或者空白棋面则停止检测。connectedIn8D措施是基于connectedIn1D措施的一种

34、升级措施,是对8个方向都进行检测,最后返回一种整型的数组,背面用cdi表达。expandedIn1D措施跟connectedIn1D措施相似,不同的是expandedIn1D措施是检测自己棋子以及空白棋子(最多持续四空白点)的个数,当遇上敌方棋子,棋子边沿或持续5点空白棋子,则停止检测。expandedIn8D措施是基于expandedIn1D措施的一种升级措施,是对8个方向都进行检测,最后返回一种整型的数组,背面用edi表达。设计好connectedIn8D和expandedIn8D措施后,即可轻松地检测棋型。当执行connectedIn8D措施得到一种等于5的值时,则检测到五子连株的棋型,

35、这时游戏结束,通过连株的落子代码可以判断出谁是赢家。“活四”是五子棋中常用的棋型,在下棋的过程中常常遇到,有两个点能形成“连五”的四就是活四。观测“活四”的棋型,可以发现,如果在某点落子能形成该棋型,那么加上自身落子,同类棋子的持续数目将不小于等于4(事实上,不小于4的状况已经被“连五”运算检测出),并且两端留有空白区域,即(edicdi&edi+4cdi+4)。只有一种点可以形成“连五”的四叫做“冲四”,也叫做“单四” 。已方再落一子便能成为“活四”的三叫做“活三” ,分为“连活三”和“跳活三”两种状况。“双四” 、“四三”与“双三” ,其检测原理为:在某一空白点,如果落下已方的棋子,并且在

36、不同方向分别检测出“冲四”或者“活三” ,那么判断为存在“双四” 、“四三”或“双三”状况。该程序是通过棋型检测来作出最佳的落子点,棋型检测顺序为:已方与否存在“五连” ,敌方与否存在“五连” ,已方与否存在“活四” ,敌方与否存在“活四” ,已方与否存在“双四” ,敌方与否存在“双四” ,已方与否存在“四三” ,敌方与否存在“四三” ,已方与否存“双三” ,敌方与否存在“双三” ,已方与否存在“活三” ,敌方与否存在“活三” 。按上述顺序对局势进行检测,若检测出相应的棋型就在该点落子。如果不存在任何棋型,就遵从评分的方式来落子。棋规则是:计算指定位置在某个方向上的得分,从指定位置向某个方向逐

37、渐移动,在移动过程中发现已方棋了,得分权重为5;若发现敌方棋子,得分权重为3;若发现空白点,得分权重为1。该位置的得分还与移动的步长有关,离出发位置越远其影响力越小,步长的计算公式为:gain=(boardSize-step)/2,其中boardSize为棋盘的大小,step为步长值。最后得分最高的点为最佳点,则在该点落子。 下面是FIRlogic类的UML图。图5.5.1FIRlogic类的UML图5.5.3 FIRlogic类代码片断/检测持续棋子数目的措施private int connectedIn1D(int player,int row,int col,int direction)

38、 int n=0; Dot d=new Dot(row,col); /在目前位置创立棋子 do d.copyFrom(moveOneStep(d,direction); /返回在指定方向上移动后的棋子 if(d.isInBoard(boardSize) & tabled.rowd.col=player) /移动后仍然在棋盘上有同类的棋子 n+; /计数器加1 else return n; while(true);/检测持续棋子与空白点(最多持续4点)数目的措施private int expandedIn1D(int player,int row,int col,int direction) i

39、nt n=0; /检测计数器 int c=0; /循环记数器 Dot d=new Dot(row,col); /在目前位置创立棋子 while(c4) d.copyFrom(moveOneStep(d,direction); /返回在指定方向上移动后的棋子 if(!d.isInBoard(boardSize) /如果超过棋盘则终结检测 break; int p=tabled.rowd.col; /获取棋盘在该位置的状态 if(p=0) /如果移动后的位置是空白 c+; /循环记数器就加1 if(p!=player&p!=0) /如果碰见对手棋子,则停止检测 break; n+; return

40、n; 5.6 游戏画布游戏画布是人机对战的交互界面。5.6.1 Canvas类简介Canvas类的重要功能在于对低层顾客事件的解决,涉及按键事件和指针事件,它负责监听这些事件,并做出相应的解决。除此之外,Canvas类还定义了屏幕属性、全屏的运营模式以及后台运营的功能,其重要措施如表4.6.1。表5.6.1 Canvas类重要措施措施名称返回值类型参数类型含义阐明getGameActionintint获得与游戏键有关的键码getKeyCodeintint获得键码keyPressedvoidint按键被按下所触发的措施keyReleassedvoidint按键被释放时所触发的措施keyRepea

41、tedvoidint按键被反复按下时所触发的措施painvoidGraphics绘制屏幕的措施Canvas类是Displayable类的子类,使用setCurrent措施,将Canvas类的实例设立为目前的屏幕。由于Canvas类自身并不提供具体绘制屏幕的过程,它需要依托一种抽象的措施向系统提供一种绘制屏幕的过程,这个措施就是pain,它具体定义了图形绘制的过程。由此可以Canvas类只是屏幕绘制的一种中介,Graphic类完毕了绘制的过程。5.6.2 FIRCanvas类实现FIRCanvas类继承了Canvas类,负责游戏界面的绘制,涉及棋盘、棋子和状态提示。该类重要负责获取顾客输入,根据

42、屏幕大小计算棋盘,绘制屏幕等。绘制措施:一方面是绘制棋盘,在绘制区域用底色填充,然后逐条绘制行和列线条。根据与否计算机先行设立计算机和玩家的颜色,保证先手的棋子为黑色。根据getTable返回的数组绘制棋盘的棋子,并在最后一步棋的位置绘制引导框。其UML图和游戏截图如下:图5.6.2 (1)FIRCanvas类的UML图 图5.6.2 (2) 游戏截图5.6.3 顾客输入游戏支持键盘输入和指针输入。当游戏并未结束且计算机方不在思考当中时,玩家可以选择空白处落子。落子后,一方面将上一步棋子重新绘制,消除引导框。引导框将跟随玩家的方向移动,当按下确认键后,则调用落子措施,进行玩家落子。按键输入表如

43、下:表5.6.3顾客输入表按键作用LEFT或按键4左移RIGHT或按键6右移UP或按键2上移DOWN或按键8下移FIRE或按键5确认顾客输入代码:protected void keyPressed(int keyCode) if(!logic.isGameOver&!logic.isThinking) int bs=boardSize; Dot lastDot=logic.lastDot(); int r=lastDot.row; int c=lastDot.col; repaintAt(r,c); int input=getGameAction(keyCode); /将键盘码转化为游戏动作

44、if(input=Canvas.LEFT|keyCode=52) /顾客按下左键 if(-cbs-1) /列加1 c=0; lastDot.setRowCol(r, c); repaintAt(r,c); else if(input=Canvas.UP|keyCode=50) /顾客按下上键 if(-rbs-1) /行加1 r=0; lastDot.setRowCol(r, c); repaintAt(r,c); else if(input=Canvas.FIRE|keyCode=53) /顾客按下拟定键 logic.manGo(r, c); /玩家落子 6. 结束语基于J2ME 技术,设计并

45、开发了一款嵌入式棋牌类手机游戏,最后整套游戏以人机对战方式完毕,先达到五子连株者为赢家。游戏上能设立棋盘大小,范畴是10x10至20x20,内设“初阶” 、“中阶” 、“高阶”三个难度,提供先手选择。较为强大的人工智能,游戏具有一定的可玩性。参照文献1 Klimmt Christoph, Hefner Dorothe, Vorderer Peter. The Video Game Experience as “True” Identification: A Theory of Enjoyable Alterations of Players Self-Perception J. Communi

46、cation Theory, , 19(4): 351-373.2 Kuan-Ta Chen, Polly Huang, Chin-Laung Lei. Effect of Network Quality on Player Departure Behavior in Online GamesJ. IEEE Transactions on Parallel and Distributed Systems. , 20(5): 593-606.3 Patrick TullmannJanos. A Java-oriented OS for Active Network M .University o

47、f Utah, .4 王昊, 邓达平. 手机游戏的可视化开发环境Djomeg的设计与实现J. 计算机与现代化.(11). 96-99.5 庞国明. 智能设备基于J2ME平台的3D开发技术J. 电脑编程技巧与维护.(21). 68-72.6 宋敦波,卢如海. VoIP体系在移动设备上的Java实现J. 实验科学与技术.(5). 63-65.7 杨冬武. 基于J2ME的移动话费查询系统的研究与开发J. 邮电设计技术.(9). 29-32.8 王昌龙,纪全艳. 基于J2ME记录管理器的索引与缓存技术J. 计算机时代.(10). 42-43.9 范财友,李治洪. 基于J2MEMobileSVG的移动地

48、理信息服务客户端技术研究J. 计算机应用与软件., 26(9). 146-148,152.10 李明江. 基于J2ME的手机游戏优化探讨J. 科学征询.(21). 59-59.11 臧海峰. 基于多平台的移动终端网络应用研究J. 科技信息.(24). 357-357.12 邓珍荣,张敬伟. 基于J2ME手机游戏设计及实现J. 计算机与现代化.(9). 122-124.13 康晓宇,罗元兵. J2ME游戏设计框架改善模型J. 民营科技.(9). 20-20,93.14 杨丽萍,王薇. 基于手机平台的教学信息系统的研发J. 长春大学学报.,19(8). 15-17.15 李静, 许建. 浅析J2EE应用的迅速原型开发J. 开封大学学报.,(3). 79-81.16 施铮. J2ME无线移动游戏开发M. 人民邮电出版社. (5). 14-15.17 詹建飞. J2ME 应用程序开发- 手机、PDA 程序开发捷径M . 中国铁道出版社. (6). 22-24.18 郝玉龙,李向前. J2ME 移动应用开发M . 清华大学出版社. (7).3-4.19 卢军. J2ME 应用程序开发- 手机、PDA 程序开发捷径M . 中国铁道出版社. (11). 23-25.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!