?? gamecanvas.java
字號:
package LLK;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.*;
import java.lang.Thread;
class GameCanvas extends Canvas implements Runnable // implements CommandListener
{
private MainMIDP m_midlet;
private String m_KeyName;
private TimerTask m_TimerTask;
private Timer m_timer;
//畫游戲屏幕的時間間隔
private int m_paintTime;
//玩得時間計數
private int m_timeCount;
//一局游戲總共花費的時間
private int m_GameTimeCount;
//定時次調用次數計數
private int m_timeMcount;
//顯示地圖裝載效果狀態計數
private int m_IniGameMapCount;
//畫連接線標志
private boolean m_bPaintCleanFlag;
private boolean m_bPaintCleanStart;
private int m_iPaintCleanCount;
//游戲運行狀態標志:
//0: 游戲圖片文件裝載過程,在程序啟動的時候,另外一線程裝載。
//1:游戲地圖文件初始化狀態,出現地圖初始化的效果
//2:游戲進行中,檢查剩下時間,調整狀態條,顯示分數等信息
//3:單節游戲結束,處理是否繼續游戲、退出游戲、保存記錄;
//4:一局游戲結束,顯示畫面慶祝
private int m_StatusFlag;
//游戲地圖信息
private GameMap m_gameMap;
public GameCanvas(MainMIDP midlet)
{
this.m_midlet = midlet;
m_StatusFlag = 0;
m_timeCount = 0;
m_gameMap = new GameMap();
StartUITimer();
m_paintTime = 0;
m_timeMcount = 0;
m_bPaintCleanFlag = false;
m_bPaintCleanStart = false;
m_iPaintCleanCount = 0;
m_IniGameMapCount = 0;
m_GameTimeCount = 0;
}
protected void paint(Graphics g)
{
int iRtn;
g.setColor(99, 40, 25);
g.fillRect(0, 0,128,160);//getWidth(), getHeight());
g.setColor(255, 0, 0);
try
{
switch (m_StatusFlag)
{
case 0:
break;
case 1:
m_gameMap.DrawScreen(g,0,false,false);
break;
case 2:
iRtn = m_gameMap.DrawScreen(g,m_timeCount,
m_bPaintCleanFlag,m_bPaintCleanStart);
if ((m_bPaintCleanFlag) &&(m_bPaintCleanStart == false))
m_bPaintCleanFlag = false;
if (iRtn == 1)
{
m_midlet.ShowGameUICommand(true);
m_gameMap.LoadGameEndImg(true);
m_StatusFlag = 3;
} else if (iRtn == 2)
{
m_midlet.ShowGameUICommand(true);
m_gameMap.LoadGameEndImg(false);
m_StatusFlag = 3;
}
//else
// m_midlet.ShowGameUICommand(false);
break;
case 3:
m_gameMap.PaintGameEnd(g,m_GameTimeCount);
break;
case 4:
break;
default:
break;
}
}catch(Exception ex)
{
System.out.println("paint Exception: " + ex.getMessage());
}
// System.out.println("GetWidth: " + getWidth() + ";GetHeight : " + getHeight());
/* int xcenter = getWidth() / 2,
ycenter = getHeight() / 2;
// Choose a font
g.setFont(Font.getFont(Font.FACE_SYSTEM,
Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
g.setColor(99, 40, 25);
g.fillRect(0, 0,getWidth(), getHeight());
g.setColor(255, 243, 28);
g.drawLine(xcenter, ycenter, xcenter, ycenter);
g.setColor(255, 0, 0);
g.drawString(m_KeyName,xcenter, ycenter,Graphics.BASELINE | Graphics.HCENTER);
*/
//System.out.println("KeyPosition:" + m_gameMap.getGameActionString());
// System.out.println("KeyPosition:" );
}
protected void keyPressed(int keyCode)
{
int iRtn;
//int action = getGameAction(keyCode);
//m_KeyName = getKeyName(keyCode);
iRtn = m_gameMap.RoleMove(getGameAction(keyCode));
if (iRtn == 0)
{
return;
} else if (iRtn == 2)
{
m_bPaintCleanFlag = true;
m_bPaintCleanStart = true;
m_iPaintCleanCount = 0;
//成功連接一對,計算從新設置為0
m_timeCount = 0;
//m_gameMap.PaintCleanStatus();
}
//System.out.println(" keyCode : " + getGameAction(keyCode));
m_paintTime = 0;
repaint();//(0,0,128,113);
}
public boolean LoadGameImage()
{
if (! m_gameMap.LoadGameImage())
return false;
// if (! m_gameMap.LoadGameLevelMap())
// return false;
repaint();
return true;
}
public void SetCurrentLevel(int level)
{
m_timeCount = 0;
m_GameTimeCount = 0;
m_StatusFlag = level;
}
public void run()
{
for(;;)
{
switch (m_StatusFlag)
{
case 0:
LoadGameImage();
m_StatusFlag = 5;
m_timeCount = 0;
break;
case 1:
break;
case 2:
if (m_timeMcount > 10)
{
m_GameTimeCount ++;
m_timeCount ++;
m_timeMcount = 0;
}
break;
case 3:
break;
case 4:
break;
default:
break;
}
try
{
Thread.sleep(100);
}catch(InterruptedException er)
{
}
m_timeMcount ++;
}
}
public void TimerSchedule()
{
//m_timeMcount ++;
m_paintTime ++;
m_iPaintCleanCount ++;
if (m_StatusFlag == 1)
{
if (m_IniGameMapCount == 0)
{
m_gameMap.LoadGameLevelMap();
}
m_IniGameMapCount ++;
m_gameMap.SetIniMapState(m_IniGameMapCount);
//不顯示地圖初始化的效果
//if (m_IniGameMapCount == 8)
{
m_IniGameMapCount = 0;
m_gameMap.SetIniMapState(m_IniGameMapCount);
m_StatusFlag = 2;
}
repaint();
/*
if (m_timeMcount > 5)
{
m_timeMcount = 0;
}
*/
return;
}
//用于記錄成功連接2個圖片后的連接軌跡的坐標顯示信息
if (m_iPaintCleanCount == 3)
{
m_bPaintCleanStart = false;
repaint();
}
/*
//標志已經完過的時間
if (m_timeMcount > 5)
{
m_timeCount ++;
m_timeMcount = 0;
}
*/
//System.out.println("timeCount:" + m_timeCount + ",timeMcount:" + m_timeMcount);
//用于更新狀態條的狀態
if (m_paintTime > 5)
{
repaint();
m_paintTime = 0;
}
//repaint(0, 113,128,13);
// m_KeyName = Long.toString(m_timecount ++);
// repaint();
}
private void StartUITimer()
{
if (m_timer == null)
m_timer = new Timer();
if (m_TimerTask != null)
{
m_TimerTask.cancel();
m_TimerTask = null;
}
m_TimerTask = new UITimer(this);
m_timer.schedule(m_TimerTask, (long)200, (long)200);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -