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