1、j2me课程设计枣 庄 学 院信息科学与工程学院课程设计任务书 题目: 小游戏程序程序开发 学 号: 201012220241 姓 名: 赵 文 正 专 业: 计算机应用技术 课 程: J2ME应用技术开发 指导教师: 刘梦琳 职称: 讲师 完成时间: 2012 年 5 月-2012 年 6 月 枣庄学院信息科学与工程学院制 课程设计任务书及成绩评定课程设计的任务和具体要求 任务:1、利用本学期所学的知识,设计并开发出一个手机游戏或手机应用小系统。手机游戏类例如:贪吃蛇游戏、挖雷游戏、五子棋游戏等;应用小系统类,例如:手机短信的收发、通讯录系统等。2、要求界面美观、功能较齐全;设计要求:1、开
2、始显示初始化游戏界面,请稍后正在加载。2、进入游戏列表,请选择你要玩的游戏,选择好进入游戏。 3、开始玩游戏,进行小游戏运行指导教师签字: 、 日期: 指导教师评语成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等硬件:计算机、打印机软件:KVM Ecipse、WTK2.5.2 Java ME课程设计进度计划起至日期工作内容备注2012/5/12012/5/152012/5/152012/6/12012/6/12012/6/15确定程序 编写代码 撰写设计书参考文献、资料索引序号文献、资料名称编著者出版单位1、基于Eclipse环境的J2ME应用程序开发 万辉 王军编著 清华大学出版社2
3、、J2ME应用教程 陈旭东,徐保民编著.清华大学出版社3、J2ME移动设备程序设计 胡虚怀 李换编著.清华大学出版社.4、J2ME开发精讲 詹建飞编著.电子工业出版社.5、J2ME技术开发与应用 李研 刘晶晶编著.机械工业出版社.摘 要J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。本设计通过Alert和Gauge设计的进度条,进行加载游戏等待。通过用List设计一个游戏列表,进行选择游戏。上面的Alert、Form(Gauge)和Li
4、st是Screen高级编程的代表,看出Screen都是全屏显示的,对屏幕的显示设计是离不开的。通过Canvas或gameCanvas才能画到屏幕上,通过他们以及各种类库来进行设计贪吃蛇和扫雷游戏,最后编程实现了全过程。本游戏如我们手机上的小游戏差不多,比较人性化的,合理的设计,由于本人能力有限时间有限只能做的这样,希望大家好好看看,通过本次实验设计可以吧高级编程和低级编程都进行系统的掌握一下。关键词:J2ME 面向对象 Canvas gameCanvas Alert List Gauge目录1、设计内容 32、设计过程 32.1 设计方案的论证 32.2、界面设计 33、设计内容 63.1程序
5、代码 63.1.1 MIDlet主程序代码(gameCanvas) 63.1.3 扫雷游戏代码(MineCanvas)同贪吃蛇类似 164、实现结果 164.1游戏加载框 164.2游戏选择框 174.3贪吃蛇游戏 184.4 扫雷游戏 195、实验小结 191、设计内容本设计是从设计界面开始的,从游戏的加载,在进入游戏的选择列表,你想玩那个游戏就玩那个游戏,给人们提供方便,贪吃蛇和扫雷是个老幼皆宜的小游戏,贪吃蛇游戏是用户根据键盘的四个方向键控制翻向上、向左、向右和向下操作,(控制键的实现是由键盘的方向键的消息函数实现)遇到食物就进行加长蛇身,就这样不断的加长。扫雷吧就是先设计个方格框有插旗
6、、有数字、有雷,雷的出现是随机的。2、设计过程2.1 设计方案的论证J2ME语言继承了JAVA语言易学易用的特点,特别适合于初学者学系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。通过这学期来J2ME课程的学习,我初步掌握了J2ME语言的最基本的知识,于是老师的指导下动手用J2ME编写小游戏(贪吃蛇和扫雷)。游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,激发大家的娱乐激情。从本游戏的从设计界面出发,主要就是本设计是从
7、设计界面开始的,从游戏的加载,在进入游戏的选择列表,你想玩那个游戏就玩那个游戏,给人们提供方便,贪吃蛇和扫雷是个老幼皆宜的小游戏,贪吃蛇游戏是用户根据键盘的四个方向键控制翻向上、向左、向右和向下操作,(控制键的实现是由键盘的方向键的消息函数实现)遇到食物就进行加长蛇身,就这样不断的加长。扫雷吧就是先设计个方格框有插旗、有数字、有雷,雷的出现是随机的。2.2、界面设计如图1(代码流程):如图2(界面流程图):3、设计内容 3.1程序代码3.1.1 MIDlet主程序代码(gameCanvas) import javax.microedition.lcdui.Alert;import javax.
8、microedition.lcdui.AlertType;import javax.microedition.lcdui.Choice;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microediti
9、on.lcdui.Gauge;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.Item;import javax.microedition.lcdui.ItemCommandListener;import javax.microedition.lcdui.List;import javax.microedition.lcdui.StringItem;import javax.microedition.lcdui.TextBox;import javax.microedition.lcdui.TextFi
10、eld;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class gameMIDlet extends MIDlet implements Runnable,CommandListener /*显示*/ private Display display; private SnakeCanvas snakecanvas; private MineCanvas minecanvas; public static gameMIDlet
11、instance; /*加载提示*/ private Alert alert; /*加载条*/ private Gauge gauge; /*数目列表*/ private List list; private int curgameIndex = 0; /*初始时间*/ long firstTime; private Image image; private final Command cmdEnter = new Command(进入,Command.OK,1); private final Command cmdExit = new Command(退出,Command.EXIT,1);
12、private final Command cmdBack = new Command(返回,Command.BACK,1); /*游戏名*/ private String bookName = 贪吃蛇,扫雷,纸牌,推箱子; public gameMIDlet() / TODO Auto-generated constructor stub display = Display.getDisplay(this); alert = new Alert(游戏启动中,null,null,AlertType.INFO); gauge = new Gauge(null,false,5,1); alert.
13、setIndicator(gauge); alert.setTimeout(6000); firstTime = System.currentTimeMillis(); minecanvas= new MineCanvas(); snakecanvas=new SnakeCanvas(); image = createImage(/123.png); list = new List(游戏名,Choice.IMPLICIT,bookName,new Imageimage,image); list.addCommand(cmdEnter); list.addCommand(cmdExit); li
14、st.setCommandListener(this); new Thread(this).start(); private Image createImage(String file) Image image = null; try image = Image.createImage(file); catch(Exception e) e.printStackTrace(); return image; protected void destroyApp(boolean arg0) / TODO Auto-generated method stub protected void pauseA
15、pp() / TODO Auto-generated method stub protected void startApp() / TODO Auto-generated method stub display.setCurrent(alert); public void exitApp() try destroyApp(true); notifyDestroyed(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); /* * 控制进度提示 */ public void run() / T
16、ODO Auto-generated method stub while(true) int time = (int)(System.currentTimeMillis() - firstTime); gauge.setValue(time/1000); if(time = alert.getTimeout() / alert.setString(欢迎进入游戏,请稍后); / sleep(1000); display.setCurrent(list); alert.setIndicator(null); break; /* * 各个窗体事件 */ public void commandActi
17、on(Command command, Displayable displayable) / TODO Auto-generated method stub if(command = cmdEnter) if(displayable.equals(list) curgameIndex = list.getSelectedIndex(); if(curgameIndex=0) display.setCurrent(snakecanvas); else if(curgameIndex=1) display.setCurrent(minecanvas); else if(curgameIndex=2
18、) else if(curgameIndex=3) else if(command = cmdExit) notifyDestroyed(); destroyApp(true); 3.1.2 贪吃蛇游戏代码(SnakeCanvas)import java.util.Random;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Graphics;public class SnakeCanvas extends Canvas implements Runnable /*食物的左上角X坐标*/ privat
19、e int foodX; /*食物的左上角Y坐标*/ private int foodY; /*食物的颜色值*/ private int foodC; /*贪吃蛇*/ private int snake = new int200*3; /*贪吃蛇食物宽度*/ private final int SNAKE_W = 4; /*贪吃蛇食物长度*/ private final int SNAKE_H = 4; /*贪吃蛇的身体长度,即包含食物的个数*/ private int snakeNum; /*方向变量*/ private int direction; /*方向上*/ private fina
20、l int DIR_UP = 0; /*方向下*/ private final int DIR_DOWN = 1; /*方向左*/ private final int DIR_LEFT = 2; /*方向右*/ private final int DIR_RIGHT = 3; /*Random对象,控制食物的随机出现*/ Random random = new Random(); /*可选颜色值*/ private final int COLOR = 0xff0000,0x00ff00,0x0000ff,0xffff00,0xff00ff,0x00ffff,0xff000f; /*线程对象*/
21、 private Thread thread; /*线程控制变量*/ private boolean isShow = true; /*游戏是否退出控制变量*/ private boolean isExit = false; /*屏幕宽*/ private int SCREEN_W; /*屏幕高*/ private int SCREEN_H; public SnakeCanvas() / TODO Auto-generated constructor stub /*获取屏幕宽度和高度*/ SCREEN_W = this.getWidth(); SCREEN_H = this.getHeight
22、(); /初始化贪吃蛇的长度 snakeNum = 7; for(int i = 0;i snakeNum;i+) snakei*3+0 = 100 - SNAKE_W * i; snakei*3+1 = 40; snakei*3+2 = COLORi%7; /初始化贪吃蛇的移动方向 direction = DIR_RIGHT; /初始化食物坐标 foodX = 100; foodY = 100; foodC = 0xff; /启动游戏线程 thread = new Thread(this); thread.start(); public void run() / TODO Auto-gene
23、rated method stub while(true) /游戏逻辑控制循环体 while(isShow) /获取每一帧的开始时间点 long st = System.currentTimeMillis(); /游戏主逻辑控制函数 main(); /刷新屏幕 repaint(); serviceRepaints(); /获取每一帧逻辑处理完后的时间点与开始时间点之间的时间差 int ct = (int)(System.currentTimeMillis() - st); /设置游戏帧的睡眠时间 if(ct 0; i-) snakei*3+0 = snake(i-1)*3+0; snakei*
24、3+1 = snake(i-1)*3+1; snakei*3+2 = snake(i-1)*3+2; snake0*3+0 = foodX; snake0*3+1 = foodY; snake0*3+2 = foodC; /食物被吃掉后需要生成新的食物 makeFood(); /*判断下一步是否超出屏幕而越界,或者碰到自身,游戏结束*/ if(isGameOver() isShow = false; isExit = true; return; /*蛇身移动过程*/ for(int i = snakeNum - 1;i 0;i-) snakei*3+0 = snake(i-1)*3+0; sn
25、akei*3+1 = snake(i-1)*3+1; /第一个单元格移动 stepX = 0; stepY = 0; switch(direction) case DIR_UP: stepY = -SNAKE_H; break; case DIR_DOWN: stepY = SNAKE_H; break; case DIR_LEFT: stepX = -SNAKE_W; break; case DIR_RIGHT: stepX = SNAKE_W; break; snake0*3+0 += stepX; snake0*3+1 += stepY; if(snake0*3+0=0) snake0*
26、3+0=SCREEN_W - SNAKE_W; else if(snake0*3+0=SCREEN_W - SNAKE_W) snake0*3+0=0; /* *生成新的食物 */ private void makeFood() /食物坐标 foodX = Math.abs(random.nextInt() % (SCREEN_W - SNAKE_W + 1) / SNAKE_W * SNAKE_W; foodY = Math.abs(random.nextInt() % (SCREEN_H - SNAKE_H + 1) / SNAKE_H * SNAKE_H; /食物颜色 foodC = COLORMath.abs(random.nextInt()%COLOR.length); /* * 判断游戏是否结束 * 结束条件: * 1、蛇头超出边界 * 2、蛇头碰到自身 */ private boolean isGameOver() /边界判别/ if(snake0*3+0 (SCREEN_W - SNAKE_W) |/ snake0*3+1 (SCR
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1