📄 gameboard.java
字号:
package window;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import main.*;
import thread.*;
import obj.*;
import java.io.*;
//游戏的主窗口
public class GameBoard extends Canvas implements CommandListener{
public Action action;//动作
public Plan myPlan;//玩家飞机
public Bullets mybullets;//玩家子弹//////////////
public Aerolites aerolites;//陨石
public Enemys enemys;//敌机
public Boss boss;//
public Explodes explodes;//爆炸效果.
public Booty booty;//奖励
public BulletExplodes bexplode;//子弹的爆炸
public MyThread myThread;//线程
private Command esc;
private Command about;
private Command help;
private Command start;
private int i=1;//屏幕移动用的临时变量,计数器
private int moveScreen=0;//屏幕移动
private int w;
private int h;
private Image backimg; //双缓冲
private Graphics backg;
////////////////////////////////////////////////
public GameBoard(){//构造函数
action=new Action();
esc=new Command("退出",Command.EXIT,1);
start=new Command("重来",Command.OK,1);
help=new Command("帮助",Command.OK,1);
about=new Command("关于",Command.OK,1);
this.addCommand(esc);
this.addCommand(start);
this.addCommand(help);
this.addCommand(about);
this.setCommandListener(this);
w=this.getWidth();
h=this.getHeight();
backimg=Image.createImage(w,h);//双缓冲
backg=backimg.getGraphics();
drawBackImage(backg);//加入背景
gameInit();
myThread=new MyThread();//开启线程
myThread.start();
}
//////////////////////////
private void gameInit(){
Cntrl.load.pass=0;
myPlan=new Plan(w,h);
mybullets=new Bullets();
aerolites=new Aerolites(w,h);
enemys=new Enemys(w,h);
boss=new Boss(w,h);
explodes=new Explodes();
booty=new Booty(0,0,w,h);
bexplode=new BulletExplodes();
}
protected void paint(Graphics g) {
myPaint(g);
}
private void drawback(Graphics g){
moveScreen=this.getMoveScreen();//取得屏幕的移动量。
g.drawImage(backimg,0,moveScreen-32,Graphics.LEFT|Graphics.TOP);//画背景
g.drawImage(backimg,0,moveScreen,Graphics.LEFT|Graphics.TOP);//画两次是让背景产生移动效果
}
/////////////////////////
public void myPaint(Graphics g){
drawback(g);//背景
explodes.DrawSelves(g);//爆炸效果.
mybullets.DrawSelves(g,myPlan.myPlanAlive,action,myPlan.x,myPlan.y,w,h);//画玩家子弹
booty.DrawSelf(g);//奖励
aerolites.DrawSelves(g,mybullets);//陨石
enemys.DrawSelves(g,mybullets);//敌机
boss.drawself(g,enemys.showBoss,mybullets);//加入Boss //boss的子弹
bexplode.DrawSelves(g);//玩家子弹的爆炸
myPlan.drawMyPlan(g,action,booty,aerolites,enemys,boss);//加入玩家飞机。//画生命值.//画分数
}
///////////////////////
public void commandAction(Command command, Displayable displayable) {
if(command==esc){ Cntrl.myMid.quitApp(); }
if(command==start){this.gameInit();}
if(command==about){Cntrl.showAbout();}
if(command==help){Cntrl.showHelp();}
}//end
//////////////////////
public void keyPressed(int keyCode){//系统侦听按钮
switch(getGameAction(keyCode)){
case Canvas.UP: action.up=(-myPlan.d); break;
case Canvas.DOWN: action.down=(myPlan.d);break;
case Canvas.LEFT: action.left=(-myPlan.d);break;
case Canvas.RIGHT:action.right=(myPlan.d);break;
case Canvas.GAME_A:action.fire=(2*myPlan.d);break;
}
}//end keyPressed
/////////////////
public void keyReapeted(int keyCode){//重复按键起
}
public void keyReleased(int keyCode){//按键抬起时
switch(getGameAction(keyCode)){
case Canvas.UP:action.up=(0);break;
case Canvas.DOWN:action.down=(0);break;
case Canvas.LEFT:action.left=(0);break;
case Canvas.RIGHT:action.right=(0);break;
case Canvas.GAME_A:action.fire=(0);break;
}
}//end keyReleased
///////////////////////////////////////////
private int getMoveScreen(){//屏幕移动.
if(0==i%2)
{ if(moveScreen>31) { moveScreen=0;}
else{ moveScreen+=1;}i=1;
} else{i++;}
return moveScreen;
}
//////////////////////
public void drawBackImage(Graphics g){///画背景
int pass=Cntrl.load.pass;
Image img=Cntrl.load.skyImg[pass];
int imgw=img.getWidth();
int imgh=img.getHeight();
int cx=w/imgw+1;//铺底图的块数
int cy=h/imgh+1;
for(int j=0;j<cy;j++)
for(int i=0;i<cx;i++){
g.drawImage(img,i*imgw,j*imgh,Graphics.LEFT|Graphics.TOP);
}
}//end
///////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -