import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.Command;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.CommandListener;
class carG extends Canvas implements Runnable
{
private boolean isRunning;
private int carX;//车的X坐标
private int carY;//车的Y坐标
private int[] X;
private int[] Y;
private int startBoundry;
private int endBoundry;
private int middleBoundry;
private int interval;//障碍之间间隔
private int score;//得分
private int sleepTime;//线程睡眠时间
public int getX()
{
Random rand = new Random();
return Math.abs(rand.nextInt() % 2) == 0 ? startBoundry : middleBoundry;
}
public int getInterval()
{
Random rand = new Random();
return Math.abs(rand.nextInt() % 50);
}
public void startToRun()
{
interval = this.getInterval();
score = 0;
startBoundry = getWidth() / 2 - 20;
middleBoundry = getWidth() / 2;
endBoundry = getWidth() / 2 + 20;
carX = startBoundry;
carY = getHeight() - 25;
X = new int[2];
Y = new int[2];
for(int i = 0;i < 2; i++)
{
X[i] = i % 2 == 0 ? startBoundry : middleBoundry;
}
for(int i = 0;i < 2;i ++)
{
Y[i] = 60 * i;
}
isRunning = true;
Thread t = new Thread(this);
t.start();
}
public void start()
{
Thread t = new Thread(this);
t.start();
}
public carG()
{
this.startToRun();
}
public void paint(Graphics g)
{
if((Math.abs(X[0] - carX) < 20 && Math.abs(Y[0] - carY) < 20)
|| (Math.abs(X[1] - carX) < 20 && Math.abs(Y[1] - carY) < 20))//输了
{
g.setColor(0x0000ff);
g.drawString("it's a pity!!loser!",startBoundry - 40,middleBoundry - 50,0);
isRunning = false;
}
if(score == 5000)
{
g.setColor(0x00000f);
g.drawString("congratulations!winner!",startBoundry - 40,middleBoundry - 50,0);
isRunning = false;
}
//刷新
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
//画出边界
g.setColor(0x00ffff);
g.drawRect(startBoundry,0,40,getHeight());
//画车
g.setColor(0x0fffff);
g.fillRoundRect(carX, carY, 20, 25, 10,10);
g.setColor(255,255,1);
g.drawString("囧",carX + 4,carY + 6,0);
g.fillRect(carX + 2,carY + 2,4,1);
g.fillRect(carX + 12,carY + 2,4,1);
//画其他车
for(int i = 0;i < 2; i++)
{
g.setColor(0x000fff);
g.fillRoundRect(X[i],Y[i],20,25,10,10);
g.setColor(255,255,0);
g.fillRect(X[i] + 2,Y[i] + 4,4,1);
g.fillRect(X[i] + 12,Y[i] + 4,4,1 );
g.drawString("囧",X[i] + 4,Y[i] + 6,0);
}
//车前进的效果
for(int i = 0;i < 2; i++)
{
Y[i] += 5;
}
//产生新障碍车
if(Y[1] >= getHeight())
{
X[1] = X[0];
Y[1] = Y[0];
X[0] = this.getX();
Y[0] = 0;
}
//画新障碍车组
for(int i = 0;i < 2 ;i++)
{
g.setColor(0x000fff);
g.fillRoundRect(X[i],Y[i],20,25,10,10);
g.setColor(255,255,0);
g.fillRect(X[i] + 2,Y[i] + 4,4,1);
g.fillRect(X[i] + 12,Y[i] + 4,4,1 );
g.drawString("囧",X[i] + 4,Y[i] + 6,0);
}
//显示记分牌
g.setColor(0x0000ff);
g.drawString("score:",startBoundry - 40,middleBoundry - 30,0);
g.drawString(String.valueOf(score),startBoundry - 20, middleBoundry - 20, 0);
}
public void run()
{
try
{
while(isRunning)
{
repaint();
switch(score)
{
case 0:
sleepTime = 100;
break;
case 1000:
sleepTime = 80;
break;
case 2000:
sleepTime = 60;
break;
case 3000:
sleepTime = 40;
break;
case 4000:
sleepTime = 20;
break;
case 4500:
sleepTime = 10;
default:
break;
}
score++;
Thread.sleep(sleepTime);
}
}
catch(Exception e)
{
System.out.println("error!");
e.printStackTrace();
}
}
public void keyPressed(int code)
{
if(getGameAction(code) == LEFT || code == '4')
{
if(carX > startBoundry)
carX -= 20;
}
else if(getGameAction(code) == RIGHT || code == '6')
{
if(carX < endBoundry - 20)
carX += 20;
}
else if(getGameAction(code) == UP || code == '2')
{
if(carY > 25)
carY -= 10;
}
else if(getGameAction(code) == DOWN || code == '8')
{
if(carY < getHeight() - 25)
carY += 10;
}
}
}
public class carUtil extends MIDlet
{
public void startApp()
{
Display.getDisplay(this).setCurrent(new carG());
}
public void pauseApp(){}
public void destroyApp(boolean b){}
}