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