/*
* GameCanvas.java
* Download by http://www.codefans.net
* Created on 2005年12月13日, 上午10:06
*/
import javax.microedition.lcdui.*;
/**
*
* @author YBGame
* @version
*/
public class GameCanvas extends Canvas implements Runnable {
/*
*
*游戏中的变量
*
*/
private boolean gameStart=false;
private Image bgImg=null;
private Image[] numberImg=null;
private String[] numberPng={"/res/0.png","/res/1.png","/res/2.png","/res/3.png","/res/4.png","/res/5.png","/res/6.png","/res/7.png","/res/8.png","/res/9.png"};
public static int curx=0,cury=0;
private Image gridSelImg=null;
Grids grids=null;
public static int totalCursor=0;
private Image pupMenuImg=null;
private Image pupMenu2Img=null;
private Image pupSelImg=null;
private HighScoreRms highScoreRms=null;
private Image gameOverImg=null;
private int playerListNum=0;
///////////////////////////////////////////////////////////////////////////
/*
*
*帮助
*/
private String howplayString=null;
/*
*
*主菜单中的变量
*
*/
private Image mainMenuImg=null;
private Image cursorImg=null;
private int[] cursorX1={20,22,23,24,35};
private int[] cursorX2={87,86,84,81,70};
private int[] cursorY={58,70,82,94,106};
////////////////////////////////////////////////////////////////////////////
/*
*
*存档时用到的变量
*/
private Image saveBgImg=null;
private Image[] saveImg=null;
private Image saveSelImg=null;
//////////////////////////////////////////////////////////////////////////////
/*
*
*排行榜用到的变量
*/
private Image highScoreImg=null;
////////////////////////////////////////////////////////////////////////////
static boolean playPause=false; //游戏暂停标志
public static int screenWidth=128;
public static int screenHeight=128;
/**
* constructor
*/
public GameCanvas() {
//setFullScreenMode(true);
gameStart=false;
start();
}
/**
* start
*/
public void start() {
Thread t=new Thread(this);
t.start();
}
boolean conti; //游戏运行标志
public static int rate=100;//每帧播放时间为1/10秒
public static long startTime=0;//记录开始游戏经过的时间
public void run(){
conti=true;
long st=0;
long et=0;
while(conti) {
if (!playPause){
st=System.currentTimeMillis();
startTime++;
if (!playPause){
control();
repaint();
serviceRepaints();
}
//if (startTime%10==0) System.gc();
et=System.currentTimeMillis();
if (rate>(et-st)) {
try{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
exit();
}
/**
* control
*/
private int status=0;
private int sta=0;
private int g_status=0;
private int g_sta=0;
private int p_status=0;
private int m_status=0;
private int n_status=0;
private int i_status=0;
private int j_status=0;
private int linesHeight=0;
public void control() {
switch(status){
case 0://开机画面
status=1;
break;
case 1://主菜单
switch(g_status){
case 0://装载图片
if (mainMenuImg==null){
try{
mainMenuImg=Image.createImage("/res/mainMenu.png");
}catch(Exception e){
System.out.println("error at 5s465fs6");
}
}
if (cursorImg==null){
try{
cursorImg=Image.createImage("/res/cursor.png");
}catch(Exception e){
System.out.println("error at 5s465fs6");
}
}
g_status=1;
m_status=0;
break;
case 1://显示主菜单
if (keyPre && key_GameCode==Canvas.UP){
m_status--;
if (m_status<0){
m_status=4;
}
} else if (keyPre && key_GameCode==Canvas.DOWN){
m_status++;
if (m_status>4){
m_status=0;
}
}else if(keyPre && key_GameCode==Canvas.FIRE){
mainMenuImg=null;
cursorImg=null;
switch(m_status){
case 0:
totalCursor=0;
status=2;
g_status=0;
break;
case 1:
status=3;
g_status=0;
break;
case 2://?装载存档
status=4;
g_status=0;
break;
case 3:
sta=1;
g_sta=0;
status=5;
g_status=-1;
break;
case 4:
conti=false;
break;
}
}
break;
}
break;
case 2://游戏中
switch(g_status){
case 0://装载
grids=new Grids();
loadGame();
grids.passWaitTime=0;
System.gc();
g_status=1;
break;
case 1://正在玩
if (keyPre && key_GameCode==Canvas.UP){
if (cury>0) cury--;
} else if(keyPre && key_GameCode==Canvas.DOWN){
if (cury<grids.gridW-1) cury++;
} else if(keyPre && key_GameCode==Canvas.LEFT){
if (curx>0) curx--;
} else if(keyPre && key_GameCode==Canvas.RIGHT){
if (curx<grids.gridW-1) curx++;
} else if(keyPre && key_GameCode==Canvas.FIRE){
grids.turn(curx+cury*grids.gridW);
grids.changeColor();
}
grids.cycle();
grids.changeColor();
if (grids.passWaitTime>=grids.totalWaitTime){//时间到,GameOver
bgImg=null;
grids=null;
gridSelImg=null;
numberImg=null;
pupMenuImg=null;
pupSelImg=null;
g_status=5;
p_status=0;
}
if