📄 harddrivecanvas.java
字号:
import java.io.IOException;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
class HardDriveCanvas
extends GameCanvas
implements Runnable
{
private HardDriveMIDlet midlet;
private Sprite carSprite;
private LayerManager layerManager;
private ObstacleManager obsManager;
private boolean gameRunning;
private boolean collision = false;
private int width;
private int height;
private long gameDuration;
public HardDriveCanvas(HardDriveMIDlet hdmidlet, String carImageName, String obsImageName)
throws IOException
{
super(true);
this.midlet = hdmidlet; //used later
layerManager = new LayerManager();
width = getWidth();
height = getHeight();
layerManager.setViewWindow(1,1,width - 2, height -2);
createCar(carImageName);
obsManager = new ObstacleManager( this, layerManager, obsImageName);
}
private void createCar(String carImageName) throws IOException
{
Image carImage = Image.createImage(carImageName);
carSprite = new Sprite(carImage);
// Put the sprite close to bottom center
carSprite.setPosition(width/2,height - 30);
layerManager.append(carSprite);
}
public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
public void stop() { gameRunning = false; }
public void run()
{
Graphics g = getGraphics();
int timeStep = 300;
obsManager.renderObstacles();
long startTime = System.currentTimeMillis();
while (gameRunning) //is true
{
tick();
input();
render(g);
long endTime = System.currentTimeMillis();
long duration = (int)(endTime - startTime);
gameDuration = duration / 1000; //game time in seconds
try
{
Thread.sleep(timeStep );//- duration);
obsManager.MoveObstacles();
}
catch (InterruptedException ie) { stop(); }
}
}
private void tick()
{
if(!collision)
checkCollision();
if (collision)
{
//Game over
int score = obsManager.getScore();
midlet.HardDriveCanvasGameOver(gameDuration,score);
//stop();
}
}
private void input()
{
int keyStates = getKeyStates();
int currentY = carSprite.getY();
int currentX = carSprite.getX( );
if ((keyStates & LEFT_PRESSED) != 0)
carSprite.setPosition (Math.max(0, currentX-5), currentY);
if ((keyStates & RIGHT_PRESSED) != 0)
carSprite.setPosition(Math.min(170, currentX + 5), currentY);
}
private void render(Graphics g)
{
g.setColor(255, 255, 255); // white
g.fillRect(0, 0,getWidth()-3, getHeight()-3);
layerManager.paint(g,0,0);
flushGraphics();
}
private void checkCollision( )
{
if (obsManager.hitTest(carSprite) )
collision = true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -