import javax.microedition.lcdui.*;
import java.util.*;
import mmae.ui.*;
import mmae.util.*;
import mmae.game.Score;
public class PlayCanvas extends XCanvas {
Image bgImg,skyImg,backgroundImg,robotImg,coolImg,pauseImg,overImg,endImg,textImg;
Image[] pic = new Image[4];
int[] picX= new int[4];
int[] pix = new int[4];
Animate button,robot,text;
int buttonTime,buttonY;
DrawBoard board;
Random rnd = new Random();
ImageFont font;
int lc;
int times,_times,robotRunTime,speedTime;
boolean coolShow,helpShow;
int coolShowTime;
public PlayCanvas()
{
/***********************************************
以下为游戏类初使化内容
***********************************************/
bgImg = go.getImage("/BG.png");
skyImg = go.getImage("/Sky.png");
backgroundImg = go.getImage("/BackGround.png");
robotImg = go.getImage("/Robot.png");
pic[0] = go.getImage("/Hill.png");
pic[1] = go.getImage("/Tree.png");
pic[2] = go.getImage("/Man.png");
pic[3] = go.getImage("/CloudBG.png");
coolImg = go.getImage("/Cool.png");
pauseImg = go.getImage("/Pause.png");
overImg = go.getImage("/GameOver.png");
endImg = go.getImage("/End.png");
textImg = go.getImage("/Text.png");
button = new Animate(go.getImage("/Button.png"),50,19);
robot = new Animate(robotImg,85,130);
robot.setPosition((getWidth()-robot.getWidth())/2,50);
text = new Animate(textImg,26,13);
font = new ImageFont(go.getImage("/Font.png"),8);
buttonTime = 0;
buttonY = 0;
coolShow = false;
helpShow = false;
speedTime = 0;
board = new DrawBoard(bgImg);
board.setRect(0,40,getWidth(),bgImg.getHeight());
board.setWay(board.RIGHT);
board.setSpeed(2);
picX[0] = picX[1]= picX[2] = -100;
lc = 0;
times = 0;
_times = 0;
start(80);
}
public void picMove()
{
for(int i=0;i<4;i++)
{
if(picX[i]>getWidth()+20)
{
pix[i] = Math.abs(rnd.nextInt()%4);
//找到离自己最近的一个
int min=0;
for(int j=0;j<3;j++)
{
if(i!=j)
if(min>picX[j])
min = picX[j];
}
if(pix[i]==3)
picX[i] = -60;
else
picX[i] = min - 80 - Math.abs(rnd.nextInt()%50);
}
else
{
if(pix[i]==3)
picX[i]+=1;
else
picX[i]+=3;
}
}
}
public void paint(Graphics g) {
g.setClip(0,0,getWidth(),getHeight());
if(!isStop())
{
/***********************************************
以下是游戏进行过程绘图
***********************************************/
for(int i=0;i<3;i++)
g.drawImage(backgroundImg,0,(i+1)*40+48,g.TOP|g.LEFT);
for(int i=0;i<getWidth()/skyImg.getWidth()+1;i++)
{
g.drawImage(skyImg,i*skyImg.getWidth(),0,g.TOP|g.LEFT);
}
board.draw(g);
for(int i=0;i<4;i++)
{
if(pix[i]==3)
g.drawImage(pic[pix[i]],picX[i],10,g.TOP|g.LEFT);
else if(pix[i]==2)
g.drawImage(pic[pix[i]],picX[i],70,g.TOP|g.LEFT);
else if(pix[i]==1)
g.drawImage(pic[pix[i]],picX[i],60,g.TOP|g.LEFT);
else
g.drawImage(pic[pix[i]],picX[i],50,g.TOP|g.LEFT);
}
int tw=text.getWidth();
text.setFrame(0);
text.setPosition(3,3);
text.draw(g);
font.drawString(g,":"+(15-getInterval()/10-1),tw+3,6);
text.setFrame(1);
text.setPosition(115,3);
text.draw(g);
font.drawString(g,":"+times,115+tw,6);
text.setFrame(2);
text.setPosition(60,190);
text.draw(g);
font.drawString(g, ":"+lc,60+tw+2,193);
if(lc>=9900)
{
g.drawImage(endImg,((lc-9900)-92)*4-5,125,g.TOP|g.LEFT);
}
robot.draw(g);
if(coolShow)
{
g.drawImage(coolImg,(getWidth()-coolImg.getWidth())/2-20,33+robotImg.getHeight(),g.TOP|g.LEFT);
}
if(helpShow)
{
g.setColor(255,255,255);
g.fillRect(0,189,getWidth(),15);
int strW = Tool.getStrWidth(go.STR_HIT);
g.setColor(0);
g.drawString(go.STR_HIT,(getWidth()-strW)/2,191,g.TOP|g.LEFT);
}
button.setFrame(2);
button.setPosition(2,getHeight()-button.getHeight()-2+buttonY);
button.draw(g);
button.setFrame(3);
button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
button.draw(g);
}
else if(!isKill())
{
/***********************************************
以下游戏暂停过程绘图
***********************************************/
button.setFrame(4);
button.setPosition(2,getHeight()-button.getHeight()-2+buttonY);
button.draw(g);
button.setFrame(3);
button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
button.draw(g);
g.drawImage(pauseImg,getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);
}
else
{
/***********************************************
以下游戏结束过程绘图
***********************************************/
g.drawImage(overImg,getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);
button.setFrame(3);
button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
button.draw(g);
}
}
public void update() {
/***********************************************
以下是游戏线程处理
***********************************************/
buttonTime++;
if(buttonTime>=30)
{
if(buttonY<23)
buttonY +=2;
}
if(speedTime++>100)
setInterval(getInterval()+1);
_times += getInterval();
if(_times>=1000)
{
times ++;
_times = 0;
}
if(times>3 && times<6)
helpShow = true;
else
helpShow = false;
lc++;
if((15-getInterval()/10)==0 || lc>10000) gameover();
board.move();
picMove();
robotRunTime++;
if(robotRunTime>=2)
{
robotRunTime = 0;
robot.prevFrame();
}
if(coolShow && coolShowTime++>2)
{
coolShowTime = 0;
coolShow = false;
}
repaint();
serviceRepaints();
}
public void gameover()
{
kill();
int value = lc - times*10;
Score highscore = new Score(go.STR_DBNAME,5,1000);
if(highscore.isHighScore(value))
{
go.setScore(value);
go.changeCanvas(go.CVS_INPUT, true);
}
else
{
go.changeCanvas(go.CVS_MAIN, false);
}
repaint();
}
public void keyPressed(int keyCode)
{
switch(keyCode)
{
case SOFTKEY1:
repaint();
if(isStop())
{
resume();
}
else
{
stop();
}
buttonTime = 0;
buttonY = 0;
repaint();
break;
case SOFTKEY2:
kill();
go.changeCanvas(go.CVS_MAIN, false);
break;
}
if(!isStop())
{
switch(keyCode)
{
case 49:
leftRun();
break;
case 48:
case 52:
rightRun();
break;
}
switch(getGameAction(keyCode))
{
/***********************************************
以下是游戏进行过程按键处理
***********************************************/
case RIGHT:
rightRun();
break;
case LEFT:
leftRun();
break;
}
}
}
private void rightRun()
{
if(robot.getFrame()==3 && coolShow==false)
{
coolShow = true;
if(getInterval()>10)setInterval(getInterval()-10);
System.out.println("RIGHT-OK");
}
}
private void leftRun()
{
if(robot.getFrame()==7 && coolShow==false)
{
coolShow = true;
if(getInterval()>10)setInterval(getInterval()-10);
System.out.println("LEFT-OK");
}
}
public void keyReleased(int keyCode)
{
if(!isStop())
switch(getGameAction(keyCode))
{
/***********************************************
以下是游戏进行过程按键处理
***********************************************/
}
else
switch(getGameAction(keyCode))
{
/**************