📄 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 + -