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