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

📄 maincanvas.java

📁 一款JAVA小游戏的源码,主要是供学习使用.运用了j2me平台.
💻 JAVA
字号:
import java.util.Random;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MainCanvas extends Canvas implements Runnable,CommandListener{
	public Image m_aImg[];
	public int m_anCur[][];
	public int m_nHidX, m_nHidY;
	public int m_nSta;
	private Command ExitCommand;
	private PuzzleMidlet midlet;
	public MainCanvas( PuzzleMidlet mMidlet )
	{
		midlet = mMidlet;
		try
		{
			ExitCommand = new Command("Exit", Command.EXIT, 0);
			addCommand(ExitCommand);
			setCommandListener(this);
			m_nHidX = 2;
			m_nHidY = 2;
			m_nSta = 0;
			InitCurrent();
			m_aImg = new Image[9];
			StringBuffer temp = null;
			for( int i = 0; i < 9; i ++ )
			{
				temp=new StringBuffer();
				temp.append("/pic");
				temp.append(i);
				temp.append(".png");
				m_aImg[i] = Image.createImage(temp.toString());
			}	        
		}
		catch (Exception ex)
		{//暂不做出错处理
		}
		Thread thread = new Thread(this);
		thread.start();
	}
	public void InitCurrent()
	{
		Random random = new Random();
		m_anCur = new int[][] { {0,1,2}, {3,4,5}, {6,7,8} };
		int Rx, Ry, k, nTemp;
		for( int x = 0; x < 3; x ++ )
		{
			for( int y = 0; y < 3; y ++ )
			{
				k = random.nextInt();
				Rx = Math.abs(k % 3);
				k = random.nextInt();
				Ry = Math.abs(k % 3);
				if( Rx != x || Ry != y )
				{
					nTemp = m_anCur[y][x];
					m_anCur[y][x] = m_anCur[Ry][Rx];
					m_anCur[Ry][Rx] = nTemp;
				}
			}
		}
	}
	protected void paint(Graphics g) 
	{
		g.setColor(0);
		g.fillRect( 0, 0, getWidth(), getHeight() );
		int nImg = 0; //暂存图片的编号
		switch( m_nSta )
		{
		case 0:
			for( int x = 0; x < 3; x++ )
			{
	            for( int y = 0; y < 3; y++ ) 
	            {
	            	if( x == m_nHidX && y == m_nHidY )
	            		continue;
	            	nImg = m_anCur[y][x];
	            	if( nImg >= 0 && nImg < 9 )
	            	{
	            		if( m_aImg[nImg] != null )
	            			g.drawImage( m_aImg[nImg], x * 30, y * 30, Graphics.LEFT|Graphics.TOP);
	            	}
	            }
	        }
//			接着画线,将9块格子分割开。
	        g.setColor(0xffffff);//设置成白色
	        for(int i = 0; i <= 3; i++) 
	        {
	            g.drawLine( 0, i*30, 3*30, i*30);
	            g.drawLine( i*30, 0, i*30, 3*30);
	        }
	        break;
	    case 1:
	    	for( int x = 0; x < 3; x++ )
			{
	            for( int y = 0; y < 3; y++ ) 
	            {
	            	nImg = y * 3 + x;
	            	if( m_aImg[nImg] != null )
	            		g.drawImage( m_aImg[nImg], x * 30, y * 30, Graphics.LEFT|Graphics.TOP);
	            }
	        }
	    	break;
	    case 2:
	    default:
	    	g.drawString( "Very Good!", 10, 45, 0 );
		}
	}
	public boolean CheckMove( int nX, int nY )
	{	
		if( nX < 0 || nX >= 3 || nY < 0 || nY >= 3 )
			return false;
		if(m_nHidX==nX && m_nHidY==nY)
            return false;
		if( nX > 0 && nX - 1 == m_nHidX && nY == m_nHidY )
			return true;
		if( nX < 2 && nX + 1 == m_nHidX && nY == m_nHidY )
			return true;
		if( nY > 0 && nY - 1 == m_nHidY && nX == m_nHidX )
			return true;
		if( nY < 2 && nY + 1 == m_nHidY && nX == m_nHidX )
			return true;
		return false;
	}
	private void sweep(int x, int y)
	{
		if( !CheckMove( x, y ) )
			return;
		int temp = m_anCur[y][x];
		m_anCur[y][x] = m_anCur[m_nHidY][m_nHidX];
		m_anCur[m_nHidY][m_nHidX] = temp;
		m_nHidX = x;
		m_nHidY = y;
    }

	protected void keyPressed(int keyCode) 
	{
		if( m_nSta == 2 )
			return;
		switch(keyCode) 
		{
        case KEY_NUM1:
        	sweep( 0, 0 );        		
            break;
        case KEY_NUM2:
        	sweep( 1, 0 );  
            break;
        case KEY_NUM3:
        	sweep( 2, 0 );  
            break;
        case KEY_NUM4:
        	sweep( 0, 1 );       		
            break;
        case KEY_NUM5:
        	sweep( 1, 1 );  
            break;
        case KEY_NUM6:
        	sweep( 2, 1 );  
            break;
        case KEY_NUM7:
        	sweep( 0, 2 );        		
            break;
        case KEY_NUM8:
        	sweep( 1, 2 );  
            break;
        case KEY_NUM9:
        	sweep( 2, 2 );  
            break;
        case KEY_NUM0:
        	if( m_nSta == 0 )
        		m_nSta = 1;
        	else
        		m_nSta = 0;
            break;
		}
		if( isFinish() )
			m_nSta = 2;

	}
	public boolean isFinish() 
	{
        for( int x = 0; x < 3; x++ ) 
        {
            for( int y = 0; y < 3; y++ ) 
            {
                if( m_anCur[y][x] != y * 3 + x )
                    return false;
            }
        }
        return true;
    }
	public void commandAction(Command c, Displayable s)
	{
		if (c.getCommandType() == Command.EXIT)
		{
			midlet.notifyDestroyed();
		}
	}
	public void run() {
		try{
			while(true){
				//重绘图形,getWidth与getHeight可分别得到手机屏幕的宽和高
				repaint(0, 0, getWidth(), getHeight());
			}
		}
		catch(Exception e){}
	}
	public void stop()
	{
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -