J2ME贪吃蛇.doc_第1页
J2ME贪吃蛇.doc_第2页
J2ME贪吃蛇.doc_第3页
J2ME贪吃蛇.doc_第4页
J2ME贪吃蛇.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2ME贪吃蛇游戏开发实训报告姓名:曹梅玲学号:0602213107班级:动漫0611指导教师:胡光永时间:2008.6.25一、项目名称J2ME贪吃蛇游戏开发二、 项目主要内容及要求1、项目功能及要求a) 游戏策划,定义游戏规则。b) 游戏规则实现;c) 积分计算。d) 界面清晰,功能完备。e) 能在模拟器上运行。2、 项目内容和要求a) J2ME手机游戏开发MIDP程序编制;b) 综合掌握调试手机游戏程序技巧;c) 手机程序代码优化;d) 高级用户界面设计;e) 低级用户界面设计;三、程序设计思想在科技迅速发展的今天,应社会的要求,各种游戏也是日新月异,层出不穷。无论是在手机上,还是在电脑上,亦或是在人们的现实生活中,游戏都是不可或缺的一部分。工作和学习了一天的人们,精神和体力都已经十分的疲惫,这时,就需要一些轻松的游戏来放松人们的疲惫的身心。所以游戏是必不可少的,只有短暂地放松才能为更长久的工作和学习奠定基础。作为一个大学生,学习了J2ME的我们,就应该利用手中的知识设计一个游戏,虽然现在还很单调,游戏也不是很有趣,但这是为了将来设计更好的游戏奠定基础。四、项目典型训练目标和任务模块一1) 训练目标掌握高级用户界面制作程序编写。2) 训练任务实现欢迎界面及游戏选择界面。模块二1) 训练目标掌握低级用户界面制作程序编写。2) 训练任务实现蛇游戏元素功能。模块三1) 训练目标子函数编写技巧。2) 训练任务实现蛇移动功能。模块四1) 训练目标实现蛇吃掉一个目标并计算积分。2) 训练任务实现蛇吃掉一个目标并计算积分。模块五1) 训练目标游戏实现技巧。2) 训练任务游戏规则实现;模块六1) 训练目标游戏实现技巧。2) 训练任务游戏积分计算;模块七1) 训练目标项目类文档编制训练。2) 训练任务完整书写项目规划、实现、设计、代码剖析,实现过程中的技术体会与不足。五、实训工作记录日期时间项目内容项目实施存在的问题解决方法不足6月17日到18日游戏的策划上网查找有关资料以及体验各类贪吃蛇游戏无法轻易的找到合适自己的游戏利用多个网站查找并一一进行测试最终还是没能找到最合适的6月19日到20日游戏的初步概括利用所学知识设计一个游戏的初步轮廓没能全面合理的概括出正确的轮廓查找书本以及询问同学和老师只能设计一个较简单的游戏6月21日到24日游戏的全面设计对游戏各部分进行详细全面的补充和编写对于计分和线程部分,不会编写程序查找书本以及询问同学和老师,任然不会的上网查找虽然找到了线程部分,却还是不太理解6月25日游戏的测试利用eclipse软件进行测试出现了很多的错误在自己的修改和同学的帮助下顺利完成了最后的测试对于有些地方的错误虽然纠正了,却还是不太理解六、认识和感想心得体会: 经过两周的程序综合实训,我们对eclipse这个软件有了更深一步的了解与深入,对J2ME的使用也有了大大的提高。在游戏开发的过程中,我遇到了各种各样的问题和错误。但面对种种问题和困难,还是得想尽一切办法去解决。或是去网上查资料,或是想其他同学请教,或是互相讨论,或是查阅相关书籍。现在,一个比较完善的贪吃蛇游戏总算完成了,两周所付出的努力和心血总算没有白费。J2ME手机游戏设计技术与实战是实践性很强的一门计算机课程。该课程设计的目的是使我们能够巩固所学J2ME语言基本知识,增进J2ME语言编程基本功,拓宽常用类库的应用。通过两周的课程设计,我能够基本掌握手机游戏程序设计的基本方法,领会J2ME语言的基本特征。通过这次实训,让我更深地了解了相应的专业知识和技能,更加明白书本和实践相结合的重要性。其实,J2ME并不是像我以前想象的那么难,只要你肯用心,肯花功夫,把基础打牢,要学好它还是很有希望的。最后,希望在以后的日子里自己的J2ME知识能够得到一个质的飞跃!七、参考资料J2ME手机游戏设计技术与实战八、附加源程序import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet SnakeCanvas displayable = new SnakeCanvas(); public SnakeMIDlet() Display.getDisplay(this).setCurrent(displayable); public void startApp() public void pauseApp() public void destroyApp(boolean unconditional) import java.util.*;import javax.microedition.lcdui.*;/* 贪吃蛇游戏*/public class SnakeCanvas extends Canvas implements Runnable /*存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/ int snake = new int2002; /*已经使用的节点数量*/ int snakeNum; /*贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/ int direction; /*移动方向*/ /*向上*/ private final int DIRECTION_UP = 0; /*向下*/ private final int DIRECTION_DOWN = 1; /*向左*/ private final int DIRECTION_LEFT = 2; /*向右*/ private final int DIRECTION_RIGHT = 3; /*游戏区域宽度*/ int width; /*游戏区域高度*/ int height; /*蛇身单元宽度*/ private final byte SNAKEWIDTH = 4; /*是否处于暂停状态,true代表暂停*/ boolean isPaused = false; /*是否处于运行状态,true代表运行*/ boolean isRun = true; /*时间间隔*/ private final int SLEEP_TIME = 300; /*食物的X坐标*/ int foodX; /*食物的Y坐标*/ int foodY; /*食物的闪烁控制*/ boolean b = true; /*Random对象*/ Random random = new Random(); public SnakeCanvas() /初始化 init(); width = this.getWidth(); height = this.getHeight(); /启动线程 new Thread(this).start(); /* * 初始化开始数据 */ private void init() /初始化节点数量 snakeNum = 7; /初始化节点数据 for(int i = 0;i snakeNum;i+) snakei0 = 100 - SNAKEWIDTH * i; snakei1 = 40; /初始化移动方向 direction = DIRECTION_RIGHT; /初始化食物坐标 foodX = 100; foodY = 100; protected void paint(Graphics g) /清屏 g.setColor(0xffffff); g.fillRect(0,0,width,height); g.setColor(0); /绘制蛇身 for(int i = 0;i 0;i-) snakei0 = snakei - 10; snakei1 = snakei - 11; /第一个单元格移动 switch(direction) case DIRECTION_UP: snake01 = snake01 - SNAKEWIDTH; break; case DIRECTION_DOWN: snake01 = snake01 + SNAKEWIDTH; break; case DIRECTION_LEFT: snake00 = snake00 - SNAKEWIDTH; break; case DIRECTION_RIGHT: snake00 = snake00 + SNAKEWIDTH; break; /* * 吃掉食物,自身增长 */ private void eatFood() /判别蛇头是否和食物重叠 if(snake00 = foodX & snake01 = foodY) snakeNum+; generateFood(); /* * 产生食物 * 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合 */ private void generateFood() while(true) foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1) / SNAKEWIDTH * SNAKEWIDTH; foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1) / SNAKEWIDTH * SNAKEWIDTH; boolean b = true; for(int i = 0;i snakeNum;i+) if(foodX = snakei0 & snakei1 = foodY) b = false; break; if(b) break; /* * 判断游戏是否结束 * 结束条件: * 1、蛇头超出边界 * 2、蛇头碰到自身 */ private boolean isGameOver() /边界判别 if(snake00 (width - SNAKEWIDTH) | snake01 (height - SNAKEWIDTH) return true; /碰到自身 for(int i = 4;i snakeNum;i+) if(snake00 = snakei0 & snake01 = snakei1) return true; return false; /* 事件处理*/ public void keyPressed(int keyCode) int action = this.getGameAction(keyCode); /改变方向 switch(action) case UP: if(direction != DIRECTION_DOWN) direction = DIRECTION_UP; break; case DOWN: if(direction != DIRECTION_UP) direction = DIRECTION_DOWN; break; case LEFT: if(direction != DIRECTION_RIGHT) direction = DIRECTION_LEFT; break; case RIGHT: if(direction != DIRECTION_LEFT) direction = DIRECTION_RIGHT; break; case FIRE: /暂停和继续 isPaused = !isPaused; break; /* 线程方法* 使用精确延时*/ public void run() try while (isRun) /开始时间 long start = System.currentTi

温馨提示

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

评论

0/150

提交评论