⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 手机游戏连连看JAVA源代码
💻 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 + -