首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

各位大侠能不能帮帮小弟 检查一下,该怎么处理

2012-03-29 
各位大侠能不能帮帮小弟 检查一下这段代码写好后始终无法实现计时过程,也没有游戏结束显示,知道的能不能告

各位大侠能不能帮帮小弟 检查一下
这段代码写好后始终无法实现计时过程,也没有游戏结束显示,知道的能不能告知一下 万分感激
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

import java.util.*;
import java.io.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
public class UFOCanvas extends GameCanvas implements Runnable {
  private Display display;
  private boolean sleeping;
  private long frameDelay;
  private long gametime;
  private long gametimeoffset;
  private Random rand;
  private Image background;
  private Sprite ufoSprite;
  private Sprite holeredSprite;
  private Sprite holeblueSprite;
  private int holeoneX;
  private int holetwoX;
  private int holeoneY;
  private int holetwoY;
  private int a;
  private int ufoXSpeed, ufoYSpeed;
  private Sprite[] roidSprite = new Sprite[7];
  private boolean gameOver;
  private int numLives;
  private Player musicPlayer;
  private Player gameoverPlayer;
  public UFOCanvas(Display d) {
  super(true);
  display = d;
  frameDelay = 33;
  refresh();}
 private void refresh(){ 
  rand = new Random();
  holeoneY = rand.nextInt(240);
  holeoneX = rand.nextInt(200);
  holetwoY = rand.nextInt(200);
  holetwoX = rand.nextInt(240);
}
public void start() {
  display.setCurrent(this);
  gametime=0;
  gametimeoffset=System.currentTimeMillis(); 
  gameOver = false;
numLives = 2;
  try {
  background=Image.createImage("/Universe.png");
  holeredSprite = new Sprite(Image.createImage("/holeone.png")); 
  holeredSprite.setPosition(holeoneX,holeoneY);
  holeblueSprite = new Sprite(Image.createImage("/holetwo.png")); 
  holeblueSprite.setPosition(holetwoX,holetwoY);
  ufoSprite = new Sprite(Image.createImage("/Saucer.png"));
  ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2, (getHeight() - ufoSprite.getHeight()) / 2);
  Image img = Image.createImage("/Roid.png");
  roidSprite[0] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[0] = new Sprite(img, 42, 35);
  roidSprite[1] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[1] = new Sprite(img, 42, 35);
  roidSprite[2] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[2] = new Sprite(img, 42, 35);
  roidSprite[3] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[3] = new Sprite(img, 42, 35);
  roidSprite[4] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[4] = new Sprite(img, 42, 35);
  roidSprite[5] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[5] = new Sprite(img, 42, 35);
  roidSprite[6] = new Sprite(Image.createImage("/Roid.png"));
  roidSprite[6] = new Sprite(img, 42, 35);}
  catch (IOException e) {
  System.err.println("Failed loading images!");
  }
   
  /*try {
  InputStream is = getClass().getResourceAsStream("Music.mid");
  musicPlayer = Manager.createPlayer(is, "audio/midi");
  musicPlayer.prefetch();
  is = getClass().getResourceAsStream("gameover.mid");


  gameoverPlayer = Manager.createPlayer(is, "audio/midi");
  gameoverPlayer.prefetch();}
  catch (IOException ioe) {}
  catch (MediaException me) {}
  try {
  musicPlayer.setLoopCount(-1);
  musicPlayer.start(); }
  catch (MediaException me) {}*/
  sleeping = false;
  Thread t = new Thread(this);
  t.start();
  }

public void stop() {
  musicPlayer.close();
  gameoverPlayer.close();
  sleeping = true;}
public void run() {
  this.repaint();
  try {Thread.sleep(100L); }
  catch (InterruptedException e) {
  e.printStackTrace();}
  Graphics g = getGraphics();
  while (!sleeping) {
  update();
  draw(g);
  try {Thread.sleep(frameDelay);}
  catch (InterruptedException ie) {
  }
  }
  }
private void update() {
if (gameOver) {
  int keyState = getKeyStates();
  if ((keyState & FIRE_PRESSED) != 0) { 
  ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2,(getHeight() - ufoSprite.getHeight()) / 2);
  gametimeoffset=System.currentTimeMillis();
  roidSprite[0].setPosition(0,0);
  roidSprite[1].setPosition(0,10);
  roidSprite[2].setPosition(0,20);
  roidSprite[3].setPosition(0,30);
  roidSprite[4].setPosition(0,40);
  roidSprite[5].setPosition(0,50);
  roidSprite[6].setPosition(0,60);
  gameOver = false;
numLives = 1;
  try {musicPlayer.setMediaTime(0);musicPlayer.start(); }
  catch (MediaException me) {}
}return;}
  gametime=(System.currentTimeMillis()-gametimeoffset)/1000; 
  a= rand.nextInt(200);
  if(a==100){
  refresh();
  holeredSprite.setPosition(holeoneX,holeoneY); 
  holeblueSprite.setPosition(holetwoX,holetwoY); }
  int keyState = getKeyStates();
  if ((keyState & LEFT_PRESSED) != 0) {ufoXSpeed=-5; }
  else if ((keyState & RIGHT_PRESSED) != 0) {ufoXSpeed=5;}
  if ((keyState & UP_PRESSED) != 0) {ufoYSpeed=-5;}
  else if ((keyState & DOWN_PRESSED) != 0) {ufoYSpeed=5;}
  ufoSprite.move(ufoXSpeed, ufoYSpeed);
  checkBounds(ufoSprite);
  for (int i = 0; i < 7; i++) {
  roidSprite[i].move(i + 1, 1 - i);
  checkBounds(roidSprite[i]);
  if (i == 1) roidSprite[i].prevFrame();
  else roidSprite[i].nextFrame();
  if (ufoSprite.collidesWith(roidSprite[i], true)) {
  if (--numLives == 0) {
try {
  musicPlayer.stop();
  gameoverPlayer.setMediaTime(0);
  gameoverPlayer.start();
  }
  catch (MediaException me) {}  
gameOver = true;
  }else {
  ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2,(getHeight() - ufoSprite.getHeight()) / 2);
  ufoXSpeed = ufoYSpeed = 0;
  for (int j = 0; j <7; j++)
  roidSprite[j].setPosition(0, 0);}  
  break;}}
  if (ufoSprite.collidesWith(holeredSprite, true)) { ufoXSpeed=ufoYSpeed=0;}
  if (ufoSprite.collidesWith(holeblueSprite, true)) {  
  if ((keyState & LEFT_PRESSED) != 0) {ufoXSpeed=-10; }
  else if ((keyState & RIGHT_PRESSED) != 0) {ufoXSpeed=10; }
  if ((keyState & UP_PRESSED) != 0) { ufoYSpeed=-10; }
  else if ((keyState & DOWN_PRESSED) != 0) {ufoYSpeed=10; }}}


  private void draw(Graphics g) {g.drawImage(background,0 , 0, Graphics.TOP | Graphics.LEFT);
  holeredSprite.paint(g);holeblueSprite.paint(g);ufoSprite.paint(g);
  for (int i = 0; i < 7; i++)
  roidSprite[i].paint(g);
   
  if (gameOver) { if (gametime >30) {
  g.setColor(255, 255, 255); 
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));
  g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
  g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);
  g.drawString("GREAT",120,120, Graphics.TOP | Graphics.HCENTER);
g.drawString("You're Genius ",120,150, Graphics.TOP | Graphics.HCENTER);}
  else if (gametime <15) {
  g.setColor(255, 255, 255); 
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));
  g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
  g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);
  g.drawString("Fighting",120,120, Graphics.TOP | Graphics.HCENTER);
g.drawString("Don't give up ",120,150, Graphics.TOP | Graphics.HCENTER);
}
else {
  g.setColor(255, 255, 255); 
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));
  g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);
  g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
  g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);
  g.drawString("GOOD ",120,120, Graphics.TOP | Graphics.HCENTER);
g.drawString("You can do better",120,150, Graphics.TOP | Graphics.HCENTER);}}
  flushGraphics();}
private void checkBounds(Sprite sprite) {
  if (sprite.getX() < -sprite.getWidth())
  sprite.setPosition(getWidth(), sprite.getY());
  else if (sprite.getX() > getWidth())
  sprite.setPosition(-sprite.getWidth(), sprite.getY());
  if (sprite.getY() < -sprite.getHeight())
  sprite.setPosition(sprite.getX(), getHeight());
  else if (sprite.getY() > getHeight())
  sprite.setPosition(sprite.getX(), - sprite.getHeight()); }}

[解决办法]

Java code
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.util.*;import java.io.*;import javax.microedition.media.*;import javax.microedition.media.control.*;public class UFOCanvas extends GameCanvas implements Runnable {   private Display display;   private boolean sleeping;   private long frameDelay;   private long gametime;   private long gametimeoffset;   private Random rand;   private Image background;   private Sprite ufoSprite;   private Sprite holeredSprite;   private Sprite holeblueSprite;   private int holeoneX;   private int holetwoX;   private int holeoneY;   private int holetwoY;   private int a;   private int ufoXSpeed, ufoYSpeed;   private Sprite[] roidSprite = new Sprite[7];   private boolean gameOver;   private int numLives;   private Player musicPlayer;   private Player gameoverPlayer;   public UFOCanvas(Display d) {   super(true);   display = d;   frameDelay = 33;   refresh();}  private void refresh(){     rand = new Random();   holeoneY = rand.nextInt(240);   holeoneX = rand.nextInt(200);   holetwoY = rand.nextInt(200);   holetwoX = rand.nextInt(240);}public void start() {   display.setCurrent(this);   gametime=0;   gametimeoffset=System.currentTimeMillis();     gameOver = false; numLives = 2;   try {   background=Image.createImage("/Universe.png");   holeredSprite = new Sprite(Image.createImage("/holeone.png"));     holeredSprite.setPosition(holeoneX,holeoneY);   holeblueSprite = new Sprite(Image.createImage("/holetwo.png"));     holeblueSprite.setPosition(holetwoX,holetwoY);   ufoSprite = new Sprite(Image.createImage("/Saucer.png"));   ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2, (getHeight() - ufoSprite.getHeight()) / 2);   Image img = Image.createImage("/Roid.png");   roidSprite[0] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[0] = new Sprite(img, 42, 35);   roidSprite[1] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[1] = new Sprite(img, 42, 35);   roidSprite[2] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[2] = new Sprite(img, 42, 35);   roidSprite[3] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[3] = new Sprite(img, 42, 35);   roidSprite[4] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[4] = new Sprite(img, 42, 35);   roidSprite[5] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[5] = new Sprite(img, 42, 35);   roidSprite[6] = new Sprite(Image.createImage("/Roid.png"));   roidSprite[6] = new Sprite(img, 42, 35);}   catch (IOException e) {   System.err.println("Failed loading images!");   }        /*try {   InputStream is = getClass().getResourceAsStream("Music.mid");   musicPlayer = Manager.createPlayer(is, "audio/midi");   musicPlayer.prefetch();   is = getClass().getResourceAsStream("gameover.mid");   gameoverPlayer = Manager.createPlayer(is, "audio/midi");   gameoverPlayer.prefetch();}   catch (IOException ioe) {}   catch (MediaException me) {}   try {   musicPlayer.setLoopCount(-1);   musicPlayer.start(); }   catch (MediaException me) {}*/   sleeping = false;   Thread t = new Thread(this);   t.start();   }public void stop() {   musicPlayer.close();   gameoverPlayer.close();   sleeping = true;}public void run() {   this.repaint();   try {Thread.sleep(100L); }   catch (InterruptedException e) {   e.printStackTrace();}   Graphics g = getGraphics();   while (!sleeping) {   update();   draw(g);   try {Thread.sleep(frameDelay);}   catch (InterruptedException ie) {   }   }   }private void update() {if (gameOver) {   int keyState = getKeyStates();   if ((keyState & FIRE_PRESSED) != 0) {     ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2,(getHeight() - ufoSprite.getHeight()) / 2);   gametimeoffset=System.currentTimeMillis();   roidSprite[0].setPosition(0,0);   roidSprite[1].setPosition(0,10);   roidSprite[2].setPosition(0,20);   roidSprite[3].setPosition(0,30);   roidSprite[4].setPosition(0,40);   roidSprite[5].setPosition(0,50);   roidSprite[6].setPosition(0,60);   gameOver = false; numLives = 1;   try {musicPlayer.setMediaTime(0);musicPlayer.start(); }   catch (MediaException me) {}  }return;}   gametime=(System.currentTimeMillis()-gametimeoffset)/1000;     a= rand.nextInt(200);   if(a==100){   refresh();   holeredSprite.setPosition(holeoneX,holeoneY);     holeblueSprite.setPosition(holetwoX,holetwoY); }   int keyState = getKeyStates();   if ((keyState & LEFT_PRESSED) != 0) {ufoXSpeed=-5; }   else if ((keyState & RIGHT_PRESSED) != 0) {ufoXSpeed=5;}   if ((keyState & UP_PRESSED) != 0) {ufoYSpeed=-5;}   else if ((keyState & DOWN_PRESSED) != 0) {ufoYSpeed=5;}   ufoSprite.move(ufoXSpeed, ufoYSpeed);   checkBounds(ufoSprite);   for (int i = 0; i < 7; i++) {   roidSprite[i].move(i + 1, 1 - i);   checkBounds(roidSprite[i]);   if (i == 1) roidSprite[i].prevFrame();   else roidSprite[i].nextFrame();   if (ufoSprite.collidesWith(roidSprite[i], true)) {   if (--numLives == 0) { try {   musicPlayer.stop();   gameoverPlayer.setMediaTime(0);   gameoverPlayer.start();   }   catch (MediaException me) {}    gameOver = true;   }else {   ufoSprite.setPosition((getWidth() - ufoSprite.getWidth()) / 2,(getHeight() - ufoSprite.getHeight()) / 2);   ufoXSpeed = ufoYSpeed = 0;   for (int j = 0; j <7; j++)   roidSprite[j].setPosition(0, 0);}      break;}}   if (ufoSprite.collidesWith(holeredSprite, true)) { ufoXSpeed=ufoYSpeed=0;}   if (ufoSprite.collidesWith(holeblueSprite, true)) {      if ((keyState & LEFT_PRESSED) != 0) {ufoXSpeed=-10; }   else if ((keyState & RIGHT_PRESSED) != 0) {ufoXSpeed=10; }   if ((keyState & UP_PRESSED) != 0) { ufoYSpeed=-10; }   else if ((keyState & DOWN_PRESSED) != 0) {ufoYSpeed=10; }}}   private void draw(Graphics g) {g.drawImage(background,0 , 0, Graphics.TOP | Graphics.LEFT);   holeredSprite.paint(g);holeblueSprite.paint(g);ufoSprite.paint(g);   for (int i = 0; i < 7; i++)   roidSprite[i].paint(g);        if (gameOver) { if (gametime >30) {   g.setColor(255, 255, 255);     g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));   g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);   g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));   g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);   g.drawString("GREAT",120,120, Graphics.TOP | Graphics.HCENTER); g.drawString("You're Genius ",120,150, Graphics.TOP | Graphics.HCENTER);}   else if (gametime <15) {   g.setColor(255, 255, 255);     g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));   g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);   g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));   g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);   g.drawString("Fighting",120,120, Graphics.TOP | Graphics.HCENTER); g.drawString("Don't give up ",120,150, Graphics.TOP | Graphics.HCENTER);}else {   g.setColor(255, 255, 255);     g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));   g.drawString("GAME OVER", 120, 60, Graphics.TOP | Graphics.HCENTER);   g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));   g.drawString("TIME "+gametime+" s",120,90, Graphics.TOP | Graphics.HCENTER);   g.drawString("GOOD ",120,120, Graphics.TOP | Graphics.HCENTER); g.drawString("You can do better",120,150, Graphics.TOP | Graphics.HCENTER);}}   flushGraphics();}private void checkBounds(Sprite sprite) {   if (sprite.getX() < -sprite.getWidth())   sprite.setPosition(getWidth(), sprite.getY());   else if (sprite.getX() > getWidth())   sprite.setPosition(-sprite.getWidth(), sprite.getY());   if (sprite.getY() < -sprite.getHeight())   sprite.setPosition(sprite.getX(), getHeight());   else if (sprite.getY() > getHeight())   sprite.setPosition(sprite.getX(), - sprite.getHeight()); }} 

热点排行