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

📄 playcanvas.java

📁 J2ME手机版游戏——配对赛源代码
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import java.util.Random;
import com.nokia.mid.ui.*;

class PlayCanvas extends FullCanvas implements Runnable{
	private final SuperMate parent;			//MIDlet类,用于退出程序
	private Thread thread;					//主线程
	public  boolean Stop;					//游戏是否暂停
	private Image img_Main;					//游戏主界面
	private Image img_Pause;
	private Image img_PlayMenu;
	private Image img_GameOver;
	private Image img_Point,img_Button;
	private Image img_Back;
	private Image img_Dialog;
	private int CLASS_NUM = 3;
	private Image img_Block[][] = new Image[CLASS_NUM][10];
	private Image img_BackBlock;
	private int X,Y;						//绘图顶点坐标
	private int BLOCK_WIDTH,BLOCK_HEIGHT;	//方块间隔
	private int _X,_Y;						//方块顶点坐标
	private int WIDTH,HEIGHT;				//手机屏幕大小
	private int times,time_max;
	private int _times;
	private int value;

	private int level=1;
	private Random rand = new Random(); 
	private int speed;
	private boolean isShowMenu;
	private boolean isGameOver;
	private Block block = new Block();
	private int zt;
	private int SCENE;


	public void gameInit()
	{
		level = 1;
		value = 0;
		
		WIDTH = getWidth();
		HEIGHT = getHeight();
		X = (WIDTH-parent.gameWidth)/2;
		Y = (HEIGHT-parent.gameHeight)/2;

		//加载游戏图片
		img_Pause = parent.getImage("/Pause.png");
		img_GameOver = parent.getImage("/gameover.png");
		img_BackBlock = SuperMate.getImage("/BackBlock.png");
		img_Point = SuperMate.getImage("/Point.png");
		img_Back = SuperMate.getImage("/Back.png");
		img_Dialog= SuperMate.getImage("/dialog.png");	
		img_Button= SuperMate.getImage("/Button.png");		


		speed = 1000;

		thread = new Thread(this);
		thread.start();
		isShowMenu = false;		

		reset(1);		
	}



	//==========================================复位============================================

	public void reset(int _level)
	{
		repaint();
		
		isShowMenu = false;
		isGameOver = false;
		times = 0;
		value = 0;
		
		level = _level;

		switch(_level)
		{
			case 1:
				time_max = 60;
				_X = 12;
				_Y = 10;
				BLOCK_WIDTH = 5;
				BLOCK_HEIGHT = 5;		
				block.reset(0,4,4);			
				break;
			case 2:
				time_max = 55;
				_X = 12;
				_Y = 10;
				BLOCK_WIDTH = 6;
				BLOCK_HEIGHT = 5;		
				block.reset(0,4,4);			
				break;
			case 3:
				time_max = 50;
				_X = 12;
				_Y = 3;
				BLOCK_WIDTH = 5;
				BLOCK_HEIGHT = 2;		
				block.reset(1,4,5);
				break;
			case 4:
				time_max = 45;
				_X = 12;
				_Y = 3;
				BLOCK_WIDTH = 5;
				BLOCK_HEIGHT = 2;		
				block.reset(1,4,5);				
				break;
			case 5:
				time_max = 40;
				_X = 6;
				_Y = 4;
				BLOCK_WIDTH = 2;
				BLOCK_HEIGHT = 2;		
				block.reset(2,5,5);				
				break;
			case 6:
				time_max = 35;
				_X = 6;
				_Y = 4;
				BLOCK_WIDTH = 2;
				BLOCK_HEIGHT = 2;		
				block.reset(2,5,5);								
				break;				
		}

		Stop = false;
		SCENE = 1;
	}


	//=================================重绘方块图====================================

	public void drawMap(Graphics g)
	{
		int image_class,image_num;
			for(int i=0;i<block.width;i++)
				for(int j=0;j<block.height;j++)
				{
					image_class = block.BlockImage[i][j].charAt(0)-'0';
					image_num = block.BlockImage[i][j].charAt(1)-'0';
					switch(block.BlockZt[i][j])
					{
						case 0:
							g.setColor(0,0,0);
							g.drawRect(X+i*(20+BLOCK_WIDTH)+_X,Y+j*(20+BLOCK_HEIGHT)+26+_Y-1,20,20);
							break;
						case 1:
							g.drawImage(img_BackBlock,X+i*(20+BLOCK_WIDTH)+_X,Y+j*(20+BLOCK_HEIGHT)+26+_Y,g.TOP|g.LEFT);
							break;
						case 2:
							drawBlock(g,img_Block[image_class][image_num],X+i*(20+BLOCK_WIDTH)+_X,Y+j*(20+BLOCK_HEIGHT)+26+_Y);	
							break;
					}
					if ((block.Opened_X1==i && block.Opened_Y1==j) || (block.Opened_X2==i && block.Opened_Y2==j))
					{
						drawBlock(g,img_Block[image_class][image_num],X+i*(20+BLOCK_WIDTH)+_X,Y+j*(20+BLOCK_HEIGHT)+26+_Y);
					}
				}
	}

	public void drawBlock(Graphics g,Image block,int x,int y)
	{
		g.setColor(255,255,255);
		g.fillRect(x+1,y+1,18,18);
		g.drawImage(block,x+2,y+2,g.TOP|g.LEFT);
	}

	//======================================游戏绘制=================================

	public void clear(Graphics g)
	{
		//g.setColor(0,0,0);
		//g.fillRect(0,0,WIDTH,HEIGHT);
		//g.setColor(128,0,64);
		//g.fillRect(X,Y,parent.gameWidth,parent.gameHeight);
		g.drawImage(img_Back,0,0,g.TOP|g.LEFT);
	}

    public void paint(Graphics g)
	{		
		clear(g);

		//画关卡
		if(SCENE==1)
			parent.drawDialog(g,img_Dialog,"第"+String.valueOf(level)+"关",X,Y,img_Dialog.getWidth()+4,img_Dialog.getHeight()+28,0,3);		
		else
		{
			if(isGameOver!=true)
			{
				//g.drawImage(img_Toolbar,X,Y+2,g.TOP|g.LEFT);
					
				drawMap(g);

				//画Point
				g.drawImage(img_Point,block.Block_X*(20+BLOCK_WIDTH)+_X+10+X,Y+block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y+10,g.TOP|g.LEFT);
			
				//画得分,倒计时
				g.setColor(0,0,0);
				g.drawString(String.valueOf(time_max-times),X+25,Y+9,g.TOP|g.LEFT);
				g.drawString(String.valueOf(value),X+80,Y+9,g.TOP|g.LEFT);
				
				if(Stop)
				{
					parent.drawDialog(g,img_Pause,X,Y,img_Pause.getWidth()+8,img_Pause.getHeight()+8,0,1);				
					g.drawImage(img_Button,getWidth()-img_Button.getWidth()-1,getHeight()-img_Button.getHeight()-1,g.TOP|g.LEFT);
				}
			}
			else
				parent.drawDialog(g,img_GameOver,X,Y,img_GameOver.getWidth()+6,img_GameOver.getHeight()+6,0,1);	
		}

	}



	//======================================按键处理==================================

	protected void keyReleased(int keyCode)
	{
		if(isGameOver)
			parent.changeScene(parent.DISPLAY_MAIN);

		switch(keyCode)
		{
					case -7://暂停
						if(isGameOver==false)
						{
							if (Stop==true)
								Stop=false;
							else
								Stop=true;
							repaint();
						}
						break;
					case -6:
						parent.changeScene(parent.DISPLAY_MAIN);
						break;
					case -10:
						zt = block.clickBlock();
						if(zt==0){
							value+=10;					
							_times=700;
						}
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();				
						break;
			}
		
		if(Stop==false)
		{	

			int _x,_y;
			
			if(SCENE!=2 || isGameOver) return;

			if(isShowMenu!=true)
			{
				_x = block.Block_X;
				_y = block.Block_Y;
				switch(getGameAction(keyCode))
				{
					case UP:
						block.pointUp();
						//repaint(_x*(20+BLOCK_WIDTH)+_X,_y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();					
						break;
					case LEFT:
						block.pointLeft();
						//repaint(_x*(20+BLOCK_WIDTH)+_X,_y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();					
						break;
					case DOWN:
						block.pointDown();
						//repaint(_x*(20+BLOCK_WIDTH)+_X,_y*(20+BLOCK_HEIGHT)+26+_Y,20,20);					
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();					
						break;
					case RIGHT:
						block.pointRight();
						//repaint(_x*(20+BLOCK_WIDTH)+_X,_y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();
						break;
					case FIRE:
						zt = block.clickBlock();
						if(zt==0){
							value+=10;					
							_times=700;
						}
						//repaint(block.Block_X*(20+BLOCK_WIDTH)+_X,block.Block_Y*(20+BLOCK_HEIGHT)+26+_Y,20,20);
						repaint();
						
						break;
				}
			}
		}
	}


	//=======================================游戏初使化==================================

	public PlayCanvas(SuperMate parent){
		this.parent = parent;//获取MIDlet
		
	
		Stop = true;
		gameInit();
	}

	public void run() {

		for(int i=0;i<CLASS_NUM;i++)
		for(int j=0;j<10;j++)
			{
				img_Block[i][j] = SuperMate.getImage("/"+String.valueOf(i)+String.valueOf(j)+".png");
			}
				
		Thread _thread = Thread.currentThread();
		while (thread == _thread) {
			try{
				synchronized (this){
					this.wait(100);
					_times+=100;
					
					if(_times==1000)
					{
						_times=0;					

														
						if(SCENE==1)
						{
							if((times++)>0)
							{
								times=0;
								SCENE=2;
								repaint();
							}
						}
						else if(SCENE==2)
						{
							if (!Stop && !isShowMenu)
							{
								times++;
								if(times==time_max)
								{
									isGameOver=true;
									times=0;
								}
								
								block.Opened_X1 = block.Opened_X2 = block.Opened_Y1 = block.Opened_Y2 = -1;
								
								if(block.isPass()){							
									//暴机
									if(level+1>=7){
										isGameOver=true;
										times=0;
									}
									else
									{
										value += (time_max-times)*10;
										reset(level+1);
										times = 0;
										SCENE=1;
									}
								}
								repaint();								
							}
						}
					}
				}

			}
			catch(InterruptedException e)
			{}
		}
	}

    
}

⌨️ 快捷键说明

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