Java ME综合实训报告

更新时间:2023-03-08 06:30:19 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java ME应用开发实训

实训报告

姓名 学号 系部 专业 指导教师 完成时间 2012 年 6 月 3 0日

Java ME综合实训报告

任务1:重构项目名称为GoToHell;将资源文件置于cn.njcit.res包中;将源程序文件置于cn.njcit.src包中。 实现说明:

1、打开NETBEANS软件,接着文件—>打开项目—>找到原文件—>确定—>

点击项目名称—>右击重命名,修改为GoToHell;

2、在源包上右击新建—>java包—>输入新的包名cn.njcit.res,复制缺省包内的

图片,后将空文件的缺省包删除;

3、在源包上右击新建—>java包—>输入新的包名cn.njcit.src,复制源程序至

cn.njcit.src即可。

任务2:去除现有提示闪屏,添加一个有意义的闪屏。 实现说明:

1. 去除现有提示闪屏:将gameCanv.java中得下面代码删除。

private String GAME_WELCOME=\欢迎使用\ private String GAME_AUTHOR=\ private String GAME_NAME=\的游戏\

private String GAME_INSTRUCT=\软键打开菜单\删除gameGanv构造方法中代码:

g.setColor(0,0,0);

g.drawString(GAME_WELCOME,88,70,Graphics.HCENTER|Graphics.TOP);

g.drawString(GAME_AUTHOR+GAME_NAME,88,100,Graphics.HCENTER|Graphics.TOP);

·1·

Java ME综合实训报告

g.drawString(GAME_INSTRUCT,88,130,Graphics.HCENTER|Graphics.TOP);

2. 添加有意义的闪屏核心代码如下:

private SplashScreen splashScreen;

public SplashScreen getSplashScreen() { if (splashScreen == null) { // write pre-init user code here splashScreen = new SplashScreen(dp); splashScreen.setTitle(\ splashScreen.setCommandListener(this); splashScreen.setFullScreenMode(true); splashScreen.setImage(getWelcomeImage()); splashScreen.setTimeout(1000);

splashScreen.removeCommand(SplashScreen.DISMISS_COMMAND); }

return splashScreen; }

private Image welcomeImage; public Image getWelcomeImage() { if (welcomeImage == null) { // write pre-init user code here try {

welcomeImage=Image.createImage(\

}

catch (java.io.IOException e) {

e.printStackTrace(); } }

return welcomeImage; }

运行结果如下图所示:

·2·

Java ME综合实训报告

任务3:使用Canvas添加一个游戏菜单,含新游戏、继续游戏、设置、排名、帮助。

实现说明:添加一个类MenuCanvas 代码如下: public class MenuCanvas extends Canvas { //selected变量标记了焦点位置 private int selected = 0;

public static final int[] OPTIONS = {0, 1, 2, 3, 4, 5};

public static final String[] LABELS = {\新游戏\继续游戏\设置\排行榜\帮助\退出\ private Image btnNorImage; private Image btnSelImage; private Font font; private int btnWidth; private int btnHeight; private int width; private int height;

·3·

Java ME综合实训报告

private MainRunner mainRunner;

public MenuCanvas(MainRunner mainRunner) { this.mainRunner = mainRunner; selected = OPTIONS[0]; //计算菜单选项的长度和高度值

font=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN, 16); try {

btnNorImage = Image.createImage(\ btnSelImage = Image.createImage(\ btnWidth = btnNorImage.getWidth(); btnHeight = btnNorImage.getHeight(); width = getWidth(); height = getHeight(); } catch (IOException ex) { ex.printStackTrace(); } }

public void paint(Graphics g) { //清除屏幕

int color = g.getColor(); g.setColor(162,205, 90);

g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(color); g.setFont(font);

for (int i = 0; i < LABELS.length; i++) { if (i == selected) {

g.setColor(255, 255, 255);

g.drawImage(btnSelImage, (width - btnWidth) / 2, (i + 1) * btnHeight, color); } else {

g.setColor(0, 0, 0);

g.drawImage(btnNorImage, (width - btnWidth) / 2, (i + 1) *

·4·

Java ME综合实训报告

btnHeight, color); }

g.drawString(LABELS[i], (width - btnWidth) / 2 + 10, (i + 1) * btnHeight + 3, color); } }

public void keyPressed(int keyCode) {

//根据用户输入更新selected的值,并重新绘制屏幕 int action = this.getGameAction(keyCode); switch (action) { case Canvas.FIRE: printLabel(selected); break;

case Canvas.DOWN:

selected = (selected + 1) % 6; break; case Canvas.UP: { if (--selected < 0) { selected += 6; } break; } default: break; } repaint(); serviceRepaints(); }

//showNotify()在paint()之前被调用 public void showNotify() {

System.out.println(\ }

·5·

Java ME综合实训报告

private void printLabel(int selected) { switch (selected) { case 0:

mainRunner.newGame(); break; case 1:

mainRunner.resumeGame(); break; case 2:

mainRunner.setting(); break; case 3:

mainRunner.score(\ break; case 4:

mainRunner.help(); break; case 5:

mainRunner.exit(); break; } } }

运行结果如下:

·6·

Java ME综合实训报告

任务4:实现新游戏功能,游戏界面要求在DefaultCldcMsaPhone1满屏显示。 实现说明: 满屏的实现:

1) 修改gameCharObj.java中right和left方法中的148改成240。 if (x > 240) {

x = 240; } 截图如下:

2) 把isDead方法中的if语句改成if(y>320||y<40||gameCharLife<1) 截图如下图所示:

3) 修改图片大小(把bg.png和teeth.png图片大小改为240*320的大小) 实现新游戏功能: public void newGame() { GameRecord.reSet();

GameRecord.elements.addElement(new gameFlatObj(true)); score = 0; gco = null; start();

}

·7·

Java ME综合实训报告

任务5:实现继续游戏功能,要求返回游戏界面后能够继续原来的游戏。 实现说明:

在gameCanv 上添加如下代码: if (!isPause) {

//*************** g.setColor(0xBBFFBB); //画GAME OVER g.fillRect(0, 290, 240, 320); g.setColor(0x804040);

g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, 16));

g.drawString(\ g.drawString(\返回\ g.drawString(\重新开始\ } else {

g.setColor(255, 0, 0);

g.drawString(\已暂停,按 * 键继续\ }

在MainRunner类中添加resumeGame()方法: public void resumeGame() {

System.out.println(\ if (gc == null) { newGame(); }

if (gc.isPause()) { gc.reSume(); dp.setCurrent(gc); } else { newGame(); }

}

·8·

Java ME综合实训报告

在MenuCanvas类中添加如下图所示的代码:

任务6:实现设置功能,可以设置炸弹等Sprite的数量,也可以设置游戏速度等其他元素。 实现说明:

新建个类SettingCanvas,添加如下代码 protected void paint(Graphics g) { int color = g.getColor(); g.setColor(34 ,139 ,34 ); g.setFont(font);

g.drawString(\速度:\ g.drawString(\难度:\ g.setColor(0, 0, 255); for (int i = 0; i < cuSp; i++) { g.fillRect(80 + (i * 10), 55, 20, 8); }

for (int i = 0; i < cuLe; i++) {

g.fillRect(80 + (i * 10), 105, 20, 8); }

g.drawRect(20, 50 * cuSe, 200, 20);

}

//添加键盘事件

public void keyPressed(int KeyCode) { System.out.println(KeyCode); switch (KeyCode) { case -2: cuSe++; if (cuSe == 3) { cuSe = 1; }

·9·

Java ME综合实训报告

break; case -1: cuSe--; if (cuSe == 0) { cuSe = 2; } break; case -4:

if (cuSe == 1) { if (cuSp < maxSp) { cuSp++; } } else {

if (cuLe < maxLe) { cuLe++; } } break; case -3:

if (cuSe == 1) { if (cuSp > 1) { cuSp--; } } else {

if (cuLe > 1) { cuLe--; } } break; case -6:

mainRunner.showMe(); break;

·10·

Java ME综合实训报告

}

GameRecord.GAME_SPEED = cuSp; GameRecord.GAME_LEVEL = cuLe; repaint();

}

运行结果如下:

任务7:游戏分值显示与存储,要求能够根据主Sprite游戏的时间或跳跃版块的数量等因素来记录游戏分值,并在游戏结束后给出玩家用户名输入界面,来存储玩家姓名和分数。 实现说明:没有实现

任务8:游戏排名功能,将分值最高的前5名玩家的姓名和分值显示出来。 实现说明:没有实现 任务9:游戏帮助功能。 实现说明:

新建HelpCanvas类,向里面添加如下代码: package cn.njcit.src;

import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class HelpCanvas extends Canvas {

·11·

Java ME综合实训报告

private MainRunner mainRunner; private Font font; private Image gameBg;

public HelpCanvas(MainRunner mainRunner) { this.mainRunner = mainRunner;

font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, 16);

try {

gameBg = Image.createImage(\ } catch (Exception e) {

} }

protected void paint(Graphics g) { g.drawString(\退出\ int color = g.getColor(); g.setColor(34 ,139 ,34 ); g.drawImage(gameBg, 0, 0, 0); g.setFont(font);

g.drawString(\游戏帮助\

g.drawString(\左右方向键控制小人走动\ g.drawString(\注意不要碰到刺哦——\ }

// 添加键盘事件

public void keyPressed(int KeyCode) { System.out.println(KeyCode); switch (KeyCode) {

case -6:mainRunner.showMe();break; } } }

·12·

Java ME综合实训报告

运行结果如下:

·13·

Java ME综合实训报告

《Java ME

序号 应用开发实训》自评表

分值 自评成绩 重构内容 重构项目名称为GoToHell 1 将资源文件置于cn.njcit.res包中 将源程序文件置于cn.njcit.src包中 去除现有提示闪屏 添加一个有意义的闪屏 使用Canvas添加一个游戏菜单,含新游戏、继续游戏、设置、排名、帮助。 实现新游戏功能 游戏界面要求在DefaultCldcMsaPhone1满屏显示 实现继续游戏功能,要求返回游戏界面后能够继续原来的游戏 实现设置功能,可以设置炸弹等Sprite的数量,也可以设置游戏速度等其他元素 游戏分值显示与存储,要求能够根据主Sprite游戏的时间或跳跃版块的数量等因素来记录游戏分值,并在游戏结束后给出玩家用户名输入界面,来存储玩家姓名和分数。 游戏排名功能,将分值最高的前5名玩家的姓名和分值显示出来。 游戏帮助功能 合计

2 3 4 5 6 7 8 9 ·14·

本文来源:https://www.bwwdw.com/article/eje.html

Top