ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:158.50KB ,
资源ID:5970851      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5970851.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java ME炸弹人 课程设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java ME炸弹人 课程设计报告.docx

1、Java ME 炸弹人 课程设计报告JAVA ME游戏程序设计实验报告所在院(系): 数学与信息技术计算机学院学 号 :学生姓名 :年级专业 : 指导教师 : 提交日期 : 2012 年 6 月如需源代码请单独联系我QQ:452937595 博客: 1、游戏设计 1.游戏构想 本游戏的创意来自原版游戏泡泡堂,游戏主角在一个随机生成的地图中放置炸弹,以消灭地图中所有的敌人为目的。游戏地图被设计成一个多行多列的棋盘,游戏中的主角和敌人每次都只能按照棋盘中相邻的棋盘进行移动,而且在地图中还存在不同的障碍物,这些障碍物将阻挡游戏主角和敌人的移动。游戏的主角可以在没有任何障碍物的棋盘格中放置炸弹,炸弹爆

2、炸时候将摧毁与该棋盘格上下左右的四个棋盘格中的某些障碍物和敌人,当然游戏主角如果也处于这个范围内,游戏主角自己也被炸死。 2.游戏结构A.角色游戏主角:游戏中由玩家控制的一方,可以在任何空白区域随便移动,也可以在任何空白区域放置炸弹。敌人:地图中需要被游戏玩家消灭的一方,游戏主角需要放置炸弹将其炸死,敌人被杀死后,其所处的位置将变为空白区域,敌人可以在地图上的任何空白区域随便移动,当游戏主角碰到敌人时候,也会被杀死,游戏就结束了。B.炸弹游戏主角可以在地图上的任何空白区域放置炸弹,一定延时后炸弹爆炸,爆炸后以炸弹所在位置为中心向上下左右产生爆炸效果。 1、可以炸死敌人2、可以炸死游戏主角3、可

3、以摧毁砖墙,摧毁后砖墙位置变为空白区域4、遇到岩石没有任何作用C.地图整个游戏地图被划分为11*11的棋盘,每个棋盘格中放置一个游戏元素,游戏中各个游戏元素的详细功能介绍如下:空白区域:是地图中游戏主角和敌人可以移动到的位置,也是游戏主角可以放置炸弹的位置。岩石:地图中的障碍物能够阻止游戏主角和敌人的移动,并且不能够被炸弹摧毁。砖墙:地图中的另一种障碍物,也能够阻止游戏主角和敌人的移动,但是可以被炸弹摧毁掉,摧毁后的砖墙的位置变为空白区域。使用如下字符来表示游戏中的各种类型的元素N:表示空白区域W:表示砖墙L:表示岩石P:表示游戏主角E:表示敌人B:表示炸弹U:表示游戏主角正在放置炸弹X:表示

4、炸弹爆炸我们可以使用一个char型的二维数组中的数据来表示游戏中的元素以及各元素在游戏中的位置,当游戏中的敌人或者游戏主角根据游戏动作进行移动时,只需要修改二维数组中对应的数据元素的内容就可以了,游戏的视图在绘制时只需要遍历这个二维数组,就可以根据游戏动作绘制出当前的游戏运行画面。3.游戏的类 Board类:该类作为程序的模型定义类,在其中定义了游戏中所使用的数据结构以及对这些数据结构中的数据进行设置和获取的方法。 BoardView类:该类作为程序的视图定义类,也是游戏的画布屏幕类,在该类中定义了如何根据用户的游戏动作绘制对应的游戏运行画面的方法。 Bomb类:该类表示游戏中的炸弹,定义了如

5、何显示炸弹的爆炸效果以及炸弹爆炸后对其他相关元素的影响的方法。 Enemy类:该类表示游戏中的敌人,具体定义了敌人如何移动以及判断敌人是否死亡的方法。 Player类:该类表示游戏中的主角,定义了游戏主角如何移动、如何放置炸弹以及如何判断游戏主角是否死亡的方法。 Img类:该类定义了游戏中各种图像的构造方法。 jBombMan类:该类是程序的MIDlet类。2、代码分析 1./定义棋盘的初始化方法 public void init() /表示游戏结束的标识设置为false isGameOver = false; /表示玩家获胜的标识设置为false isWin = false; /遍历二维数组

6、,为数组的每个元素设置值为N,表示游戏中每个棋盘格上都为空 for( int i=0; iiCols; i+ ) for( int j=0; jiRows; j+ ) chBoardij = N; / 遍历二维数组,每相隔一个元素设置值为L,表示游戏中每相隔的棋盘格上放置一个岩石 for( int i=1; iiCols; i+=2 ) for( int j=1; jiRows; j+=2 ) chBoardij = L; / 遍历二维数组,在棋盘上非岩石的位置随机放置砖墙 for( int i=0; iiCols; i+ ) for( int j=0; joBoard.iRows ) h =

7、 oBoard.iRows; /根据工作区的位置,开始绘制棋盘中的元素 for( int i=x; ix+w; i+ ) for( int j=y; jy+h; j+ ) /根据遍历得到的数组中的元素类型进行绘制 switch( oBoard.chBoardij ) case N: /当前数组元素中的类型表示空白区域,则绘制空白区域的图像 g.setColor( BackgroundColor ); g.fillRect( iLeft + i*iCellSize, iTop + j*iCellSize, iCellSize, iCellSize ); break; case W: /当前数组元

8、素中的类型表示砖墙,则绘制砖墙的图像 g.drawImage( Img.imgWall, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; case L: /当前数组元素中的类型表示岩石,则绘制岩石的图像 g.drawImage( Img.imgPillar, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; case P: /当前数组元素中的类型表示游戏主角,则绘制游戏主角的图像 c

9、ase U: /当前数组元素中的类型表示主角正在放置炸弹,则绘制游戏主角的图像 g.drawImage( Img.imgPlayer, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; case E: /当前数组元素中的类型表示敌人,则绘制敌人的图像 g.drawImage( Img.imgEnemy, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; case B: /当前数组元素中

10、的类型表示炸弹,则绘制炸弹的图像 g.drawImage( Img.imgBomb, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; case X: /当前数组元素中的类型表示炸弹爆炸,则绘制炸弹爆炸的图像 g.drawImage( Img.imgExploding, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP ); break; paintBoard()方法是绘制游戏棋盘的,在该方法中首先调用p

11、aintFrame()方法来绘制棋盘的边框,然后遍历游戏模型类中定义的二维数组,根据数组中的每个元素的具体值来绘制对应的游戏元素的图像。3./游戏主角的初始化方法 public void init() while( true ) /获取游戏主角初始化的随机位置 iX = Math.abs( random.nextInt() ) % oBoard.iCols; iY = Math.abs( random.nextInt() ) % oBoard.iRows; /如果随机位置上不为空,则跳出当前本次循环,再重新获取随机位置 if( oBoard.chBoardiXiY != N ) continu

12、e; /如果随机位置在敌人的攻击范围内,则跳出当前本次循环,再重新获取随机位置 if( oBoard.near( E, iX, iY ) ) continue; /如果随机位置不能够向任何方向移动2步,则跳出当前本次循环,再重新获取随机位置 if( !oBoard.near2( N, iX, iY ) ) continue; /如果获得一个合适的随机位置,则跳出死循环,继续向下执行 break; /在棋盘中根据获取的随机位置设置对应的棋盘格中的元素为游戏主角 oBoard.chBoardiXiY = P; Init()方法定义了游戏主角的初始化,该方法将把游戏主角随机放置在游戏棋盘上的某个棋盘

13、格中。4./定义给定位置上的敌人死亡的方法 public void die( int x, int y ) System.out.println( Bomb die: x= + x + , y= + y ); int i; /遍历游戏中的全部敌人,判断是否有敌人在给定的棋盘格上,如果有则设置其列值为-1,表示该敌人已经死亡 for( i=0; iiNumbers; i+ ) if( (arrPositionsi0 = x)&(arrPositionsi1 = y) ) arrPositionsi0 = -1; break; /再次重新遍历游戏中的全部敌人,如果碰到一个未死亡的,则结束循环,如果

14、循环的计数值等于游戏中全部敌人的数量,则表示玩家获胜 for( i=0; iiNumbers; i+ ) if( arrPositionsi0 != -1 ) break; /判断循环计数值是否等于游戏中全部敌人的数量,如果是,则设置玩家获胜的标识,并重新绘制画布屏幕 if( i = iNumbers ) oBoard.isWin = true; oBoardView.repaint(); /定义游戏中的所有敌人对象全部死亡的方法 public void dieAll() /遍历全部游戏中的敌人,设置它们的列值为-1,表示它们全部死亡 for( int i=0; iiNumbers; i+ )

15、 arrPositionsi0 = -1; 设置在给定位置上的敌人死亡的方法die(),该方法首先判断给定位置上是否有敌人元素,如果有则将对应该位置的二维数组arrPositions中的值设置为-1,这就表示该数组元素表示的敌人已经死亡,然后遍历整个二维数组,如果数组中的-1的个数等于初始化游戏生成的敌人的个数,则表示游戏中的敌人全部被消灭,玩家获胜。5./敌人对象的初始化方法 public void init() int x, y; /随机将游戏中的敌人放置在棋盘中 for( int i=0; iiNumbers; ) /随机得到每个敌人在棋盘格中的位置 x = Math.abs( rand

16、om.nextInt() ) % oBoard.iCols; y = Math.abs( random.nextInt() ) % oBoard.iRows; /如果得到的随机位置上已经有其他元素了,则跳出本次循环 if( oBoard.chBoardxy != N ) continue; /如果得到的随机位置上为空,则将敌人元素放置在该单元格中 oBoard.chBoardxy = E; /将敌人对象所处的单元格位置保存在数组中 arrPositionsi0 = x; arrPositionsi1 = y; /继续本次循环 i+; 定义了游戏中初始化敌人的方法init(),在该方法中将随机产

17、生敌人所在的棋盘格位置,如果生成的位置上恰好是空白区域,则将敌人放置在该位置上,并将该位置定义在一个记录全部敌人位置的二维数组arrPositions中,如果生成的位置上有其他游戏元素,则重新生成随机位置再进行判断。6. /根据给定的单元格判断炸弹爆炸后的结果的方法 private void explode( int x, int y ) /如果给定的单元格中是游戏主角或者是游戏主角正在放置炸弹,则游戏主角死掉 if( oBoard.isElement( P, x, y )|oBoard.isElement( U, x, y ) ) oPlayer.die(); /如果给定的单元格中是敌人,则

18、敌人死掉 else if ( oBoard.isElement( E, x, y ) ) oEnemy.die( x, y ); /只要给定的单元格不是岩石和炸弹爆炸的元素,则给定的单元格中设置炸弹爆炸元素 if ( oBoard.isElement( N, x, y )|oBoard.isElement( W, x, y ) |oBoard.isElement( P, x, y )|oBoard.isElement( E, x, y ) |oBoard.isElement( U, x, y )|oBoard.isElement( B, x, y ) ) oBoard.chBoardxy =

19、X; Explode()方法定义了在给定位置放置炸弹后,炸弹爆炸所影响到的其他棋盘格的情况。如果炸弹爆炸时影响的棋盘格中是游戏主角元素,则调用Player类的die()方法使游戏主角死掉。如果炸弹爆炸时影响的棋盘格中是敌人元素,则调用Enemy类的die()方法使敌人死掉。3、调试 游戏初始画面游戏结束画面游戏获胜界面4、个人总结 以前我们只知道玩手机游戏的乐趣,对于手机游戏也充满了好奇,内心也是很崇拜那些开发这些游戏的人们。这学期我们开设了Java ME 这门课程,让我们开始接触学习游戏开发,也慢慢的学会了如何开发小型简单类的手机游戏。只有理论结合实践,才能提高自己的实际动手能力和独立思考的

20、能力。所以期末的手机游戏设计才是检验自己到底学到了多少,到底哪里有不足,如何改善这些不足的地方,才能更好的学习下去。在这几周我开发“炸弹人”的过程中,遇到了各种各样的困难和错误,但是面对错误和困难,我还是想尽办法去解决。或是上网查找资料、或是请教其他同学、或是查阅书籍、或是咨询老师,总算游戏还是完成了。通过这次实战,首先是对eclipse这个软件有了更深一步的了解和深入,其次J2ME类库的使用也有很了大大的提高。以前上课的时候,有时候遇到不懂的地方,现在才明白那是由于我没有在课后及时对老师所讲的内容进行实践操作,所以才记住了内容,却没有融会贯通,自然时间长了越积越多也就不会了,所以不管学习什么,特别是我们软件编程开发这方面,更重要的是实践。这次游戏设计还算顺利的完成了,付出的心血和努力没有白费。其实这个炸弹人游戏可以继续完善下去,例如可以记分数排名、加入一些道具等,在不断实践中完善。在这里还得衷心的感谢老师,平时上机给我的很多指导,也给我们大家充足的上机实践时间,使得大家很认真去学习这门课程,也顺利完成这门课程的设计。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1