读书人

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

发布时间: 2012-03-29 12:53:12 作者: rapoo

各位大侠能不能帮帮小弟 检查一下
这段代码写好后始终无法实现计时过程,也没有游戏结束显示,知道的能不能告知一下 万分感激
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()); }} 

读书人网 >J2ME开发

热点推荐