📄 mycanvas.java
字号:
import java.util.Random;
import javax.microedition.lcdui.*;
public class myCanvas extends Canvas implements Runnable
{//代码1792
Random Rd=new Random();//产生随机数
Thread t=new Thread(this);
ball Ball=null;
player Player=null;
brick Brick[]=null;
prop Prop[]=null;
Image bufferImg=null;
Image backGround=null;
menuScreen showMenu=null;
passTest PassTest=null;
aboutScreen showAbout=null;
helpScreen showHelp=null;
Image stop=null;
logoScreen showLogo=null;
map Map=null;
gameOver GameOver=null;
Graphics bufferG;
boolean bPass=false;
boolean bMove=false;
static boolean bRun=false;
static boolean bMakeBg=true;
static int state=0;//游戏状态0:LOGO状态 1、菜单界面 2、关于界面 3、帮助状态 4、暂停状态 5、游戏中状态6、过关状态 7、游戏失败状态
static int level=1;
static int allLevel=8;//总关卡数
static int brickMap[][];//地图数组
int upSpeedNum=0;
int propNum=5;//同时出现道具最大数
int speed=0;//增加的速度
int backX=0;
int backY=0;
int brickNum=0;
int ksurplusBrick=0;//剩余砖块
int backGroundX=0;
int backGroundY=0;
public myCanvas()
{
setFullScreenMode(true);
Map=new map();
bufferImg=Image.createImage(getWidth(),getHeight());
bufferG=bufferImg.getGraphics();
try
{
stop=Image.createImage("/stop.png");
backGround=Image.createImage("/backGround.png");
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("myCanvas图片错误");
}
if(allLevel%2!=0)
{
upSpeedNum=(allLevel-1)/4+1;
}
else
{
upSpeedNum=allLevel/4+1;
}
backGroundX=(getWidth()-backGround.getWidth())/2;
backGroundY=(getHeight()-backGround.getHeight())/2;
Prop=new prop[propNum];
Player=new player(this);
Ball=new ball(this);
bRun=true;
t.start();
}
public void paint(Graphics g)
{
bufferG.setClip(0, 0, getWidth(), getHeight());
if(state!=4)
{
bufferG.setColor(0x000000);
bufferG.fillRect(0, 0, getWidth(), getHeight());
}
switch(state)
{
case 0://LOGO状态
if(showLogo==null)
System.out.println("showLogo");
if(showLogo!=null)
showLogo.paint(bufferG);
break;
case 1://菜单界面
if(showMenu==null)
System.out.println("showMenu");
if(showMenu!=null)
showMenu.paint(bufferG);
break;
case 2://关于界面
if(showAbout==null)
System.out.println("showAbout");
if(showAbout!=null)
showAbout.paint(bufferG);
break;
case 3://帮助状态
if(showHelp==null)
System.out.println("showHelp");
if(showHelp!=null)
showHelp.paint(bufferG);
break;
case 4://暂停状态
bufferG.setClip(0, 0, this.getWidth(),this.getHeight());
bufferG.drawImage(stop, 0, 0, 0);
break;
case 5://游戏中状态
try
{
bufferG.setClip(0, 0, getWidth(),getHeight());
if(backGround!=null)
bufferG.drawImage(backGround, backGroundX, backGroundY, 0);
for(int i=0;i<brickNum;i++)
{
if(Brick[i]!=null)
Brick[i].paint(bufferG);
}
if(Ball!=null)
Ball.paint(bufferG);
if(Player!=null)
Player.paint(bufferG);
for(int i=0;i<propNum;i++)
{
if(Prop[i]!=null)
Prop[i].paint(bufferG);
}
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("myCanvas.paint.switch.case 5");
}
break;
case 6://过关状态
if(PassTest==null)
System.out.println("PassTest");
if(PassTest!=null)
PassTest.paint(bufferG);
break;
case 7://游戏失败状态
if(GameOver==null)
System.out.println("GameOver");
if(GameOver!=null)
GameOver.paint(bufferG);
break;
case 8://手机条件不满足
bufferG.setColor(0xffffff);
bufferG.drawString("您的手机不满足玩此游", 0, 0, 0);
bufferG.drawString("戏的条件屏幕全屏至少", 0, 15, 0);
bufferG.drawString("需要180 X 196像素", 0, 30, 0);
bufferG.drawString("确认或数字5退出程序", 0, 45, 0);
break;
}
g.drawImage(bufferImg, 0, 0, 0);
}
public void run()
{
if(getWidth()<180||getHeight()<196)
state=8;
while(bRun==true)
{
gameLogic();
repaint();
try
{
Thread.sleep(5);
}
catch(Exception e)
{
}
}
}
public void gameLogic()
{
switch(state)
{
case 0://LOGO状态
if(showLogo==null)
{
showLogo=new logoScreen(this);
}
break;
case 1://菜单界面
if(showAbout!=null)
{
showAbout.recycleRes();
showAbout=null;
}
if(GameOver!=null)
{
GameOver.recycleRes();
GameOver=null;
}
if(showHelp!=null)
{
showHelp.recycleRes();
showHelp=null;
}
if(showLogo!=null)
{
showLogo.recycleRes();
showLogo=null;
}
if(showMenu==null)
{
showMenu=new menuScreen(this);
}
break;
case 2://关于界面
if(showMenu!=null)
{
showMenu.recycleRes();
showMenu=null;
}
if(showAbout==null)
{
showAbout=new aboutScreen(this);
}
break;
case 3://帮助状态
if(showMenu!=null)
{
showMenu.recycleRes();
showMenu=null;
}
if(showLogo!=null)
{
showLogo.recycleRes();
showLogo=null;
}
if(showHelp==null)
{
showHelp=new helpScreen(this);
}
break;
case 4://暂停状态
break;
case 5://游戏中状态
if(showMenu!=null)
{
showMenu.recycleRes();
showMenu=null;
}
if(PassTest!=null)
{
PassTest.recycleRes();
PassTest=null;
}
if(bMove==true)
{
Ball.move();
}
if(bMakeBg==true)
{
beBrick();
bMakeBg=false;
if(speed==2)
{
Player.speed++;
}
}
for(int i=0;i<brickNum;i++)
{
if(Brick[i]!=null)
Ball.atk(Brick[i]);
}
for(int i=0;i<brickNum;i++)
{
if(Brick[i]!=null&&Brick[i].hp<=0)
{
if(Rd.nextInt()%4==2)//一定几率触发
{
for(int ii=0;ii<propNum;ii++)
{
if(Prop[ii]==null)
{
Prop[ii]=new prop(Brick[i]);
break;
}
}
}
Brick[i].recycleRes();
Brick[i]=null;
player.fraction+=33;
ksurplusBrick--;
break;
}
}
for(int i=0;i<propNum;i++)
{
if(Prop[i]!=null&&Prop[i].propY+2>=backGroundY+backGround.getHeight()-6)
{
Prop[i].recycleRes();
Prop[i]=null;
}
else if(Prop[i]!=null)
{
Prop[i].move(Player);
}
}
if(ksurplusBrick<=0)
{
state=6;
bPass=true;
}
if(Player!=null)
{
Player.move();
Ball.atk(Player);
}
// 没接住====
if(Ball.ballY+Ball.ballImg.getHeight()>=backGroundY+backGround.getHeight()-6)
{
if(player.playerLv>1)
{
player.playerLv--;
}
if(player.fraction>=66)
player.fraction-=66;
else player.fraction=0;
player.life--;
Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
if(getHeight()<backGround.getHeight())
Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
else
Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
bMove=false;
player.rightMove=false;
player.leftMove=false;
}
if(player.life<=0)
{
state=7;
}
break;
case 6://过关状态
if(bPass==true)
{
level++;
if(level<=allLevel)
{
Map.initRes();
}
bPass=false;
}
for(int i=0;i<propNum;i++)
{
if(Prop[i]!=null)
{
Prop[i].recycleRes();
Prop[i]=null;
}
}
player.fractionBuffer=player.fraction;
if(PassTest==null)
PassTest=new passTest(this);
break;
case 7://游戏失败状态
if(GameOver==null)
GameOver=new gameOver(this);
break;
case 8://手机条件不满足
break;
}
}
public void beBrick()
{
Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
if(getHeight()<backGround.getHeight())
Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
else
Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
bMove=false;
Brick=null;
for(int i=0;i<brickMap.length;i++)
{
for(int j=0;j<brickMap[i].length;j++)
{
if(brickMap[i][j]!=0)
{
brickNum++;
}
}
}
Brick=new brick[brickNum];
for(int i=0;i<brickMap.length;i++)
{
for(int j=0;j<brickMap[i].length;j++)
{
if(brickMap[i][j]!=0&&ksurplusBrick<brickNum&&Brick[ksurplusBrick]==null)
{
Brick[ksurplusBrick]=new brick(i,j,brickMap[i][j],this);
ksurplusBrick++;
}
}
}
}
public void tryAgain()
{
level=1;
Map.initRes();
bMakeBg=true;
bMove=false;
speed=0;
ksurplusBrick=0;
player.life=3;
player.playerLv=1;
player.fraction=0;
player.fractionBuffer=0;
Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
if(getHeight()<backGround.getHeight())
Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
else
Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
Player.initRes();
Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
player.rightMove=false;
player.leftMove=false;
Ball.time=200;
ball.which=1;
if(allLevel%2!=0)
{
upSpeedNum=(allLevel-1)/4+1;
}
else
{
upSpeedNum=allLevel/4+1;
}
for(int i=0;i<propNum;i++)
{
if(Prop[i]!=null)
{
Prop[i].recycleRes();
Prop[i]=null;
}
}
}
public void keyPressed(int keycode)
{
switch(keycode)
{
case KEY_NUM1:
if(state==5)
{
state=4;
}
else if(state==4)
{
state=5;
}
break;
case KEY_NUM5:
switch(state)
{
case 0://LOGO状态
break;
case 1://菜单界面
if(showMenu!=null)
{
showMenu.processEvent();
}
break;
case 2://关于界面
if(showAbout!=null)
showAbout.processEvent();
break;
case 3://帮助状态
if(showHelp!=null)
showHelp.processEvent();
break;
case 4://暂停状态
break;
case 5://游戏中状态
break;
case 6://过关状态
if(PassTest!=null)
PassTest.processEvent();
break;
case 7://游戏失败状态
if(GameOver!=null)
GameOver.processEvent();
break;
case 8:
bRun=false;
break;
}
break;
case KEY_NUM4:
if(state==5)
{
if(Player.brickX>0)
{
player.leftMove=true;
}
else
{
player.leftMove=false;
}
if(bMove==false)
{
if(level==upSpeedNum)
{
if(level==upSpeedNum)
speed++;
upSpeedNum+=upSpeedNum;
}
ball.xSpeed=-(speed+1);
ball.ySpeed=-speed;
bMove=true;
}
player.rightMove=false;
if(bMove==false)
bMove=true;
}
break;
case KEY_NUM6:
if(state==5)
{
if(Player.brickX<this.getWidth()-Player.playerImg.getWidth())
{
player.rightMove=true;
}
else
{
player.rightMove=false;
}
if(bMove==false)
{
if(level==upSpeedNum)
{
if(level==upSpeedNum)
speed++;
upSpeedNum+=upSpeedNum;
}
ball.xSpeed=speed+1;
ball.ySpeed=-speed;
bMove=true;
}
player.leftMove=false;
}
break;
case KEY_NUM2:
if(state==1&&showMenu!=null)
{
showMenu.processEvent(keycode);
}
else if(state==3&&showHelp!=null)
{
showHelp.processEvent(keycode);
}
break;
case KEY_NUM8:
if(state==1&&showMenu!=null)
{
showMenu.processEvent(keycode);
}
else if(state==3&&showHelp!=null)
{
showHelp.processEvent(keycode);
}
break;
default:
switch(getGameAction(keycode))
{
case FIRE:
switch(state)
{
case 0://LOGO状态
break;
case 1://菜单界面
if(showMenu!=null)
{
showMenu.processEvent();
}
break;
case 2://关于界面
if(showAbout!=null)
showAbout.processEvent();
break;
case 3://帮助状态
if(showHelp!=null)
showHelp.processEvent();
break;
case 4://暂停状态
break;
case 5://游戏中状态
break;
case 6://过关状态
if(PassTest!=null)
PassTest.processEvent();
break;
case 7://游戏失败状态
if(GameOver!=null)
GameOver.processEvent();
break;
case 8:
bRun=false;
break;
}
break;
case LEFT:
if(state==5)
{
if(Player.brickX>0)
{
player.leftMove=true;
}
else
{
player.leftMove=false;
}
if(bMove==false)
{
if(level==upSpeedNum)
{
if(level==upSpeedNum)
speed++;
upSpeedNum+=upSpeedNum;
}
ball.xSpeed=-(speed+1);
ball.ySpeed=-speed;
bMove=true;
}
player.rightMove=false;
if(bMove==false)
bMove=true;
}
break;
case RIGHT:
if(state==5)
{
if(Player.brickX<this.getWidth()-Player.playerImg.getWidth())
{
player.rightMove=true;
}
else
{
player.rightMove=false;
}
if(bMove==false)
{
if(level==upSpeedNum)
{
if(level==upSpeedNum)
speed++;
upSpeedNum+=upSpeedNum;
}
ball.xSpeed=speed+1;
ball.ySpeed=-speed;
bMove=true;
}
player.leftMove=false;
}
break;
case UP:
if(state==1&&showMenu!=null)
{
showMenu.processEvent(keycode);
}
else if(state==3&&showHelp!=null)
{
showHelp.processEvent(keycode);
}
break;
case DOWN:
if(state==1&&showMenu!=null)
{
showMenu.processEvent(keycode);
}
else if(state==3&&showHelp!=null)
{
showHelp.processEvent(keycode);
}
break;
}
}
}
public void keyReleased(int keycode)
{
switch(keycode)
{
case KEY_NUM4:
player.leftMove=false;
break;
case KEY_NUM6:
player.rightMove=false;
break;
case KEY_NUM2:
case KEY_NUM8:
if(state==3&&showHelp!=null)
showHelp.processEvent(0);
break;
default:
switch(getGameAction(keycode))
{
case LEFT:
player.leftMove=false;
break;
case RIGHT:
player.rightMove=false;
break;
case DOWN:
case UP:
if(state==3&&showHelp!=null)
showHelp.processEvent(0);
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -