📄 mygamecanvas.java
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class MyGameCanvas extends GameCanvas implements Runnable, CommandListener
{
int first[]= {0,1,2,1,3,4,7,6,5,4,8,9,3,6,8,10,11,6,5,4,7,5,11,8,3,9,6 ,5,8,12,0,0,0,0,0,-1};//第一关逻辑
//int first[]={-1};
int second[]={0,1,2,4,0,3,5,4,7,0,6,1,1,8,0,2,9,0 ,10,3,4,7,5,9,0 ,8,2,0,10,0,4,3 ,6,0,0,0,0,0,-1};
//int second[]={-1};
//int third[]={};
int step;//目前状态
public GameMIDlet parent;
Graphics g;
boolean running;//游戏是否运行
Thread t;
Command startcmd,exitcmd,restartcmd;
int keystate;
boolean keyevent;
boolean key_up,key_down,key_left,key_right,key_fire;
public int screenwidth;
public int screenheight;
boolean gameover;//游戏是否结束
Sprite plane;//我的飞机
//开始字符显示
Sprite Begin;
Sprite Gameover;
//第几关字符显示
Sprite Mission;
//成绩显示
Sprite scoredisplay[];
boolean alive;//我的飞机的存活
int clock;//我的飞机发射子弹的间隙
//背景设置
LayerManager myView;
Sprite background;
int currentY;//当前的背景设置点
//子弹
Bullets bullets;
//敌人
GameObject enemy;
//飞机爆炸效果
Sprite myexplosion;
int myexplosionlife;
//各个爆炸效果
explosion explosions;
//老怪
Monster monster;
int currentgate;//当前的关
int missionfinished;//此关是否完成
int beginlife;//开始时候显示的字的生命期
Image img;
int score;//每个关口的成绩
int totalscore;//总成绩
int scoretemp,scorebak;
int tempX;
int temp;
protected MyGameCanvas(GameMIDlet p)
{
super(true);
g=getGraphics();
running=false;
t=null;
addCommand(startcmd=new Command("start",Command.OK,1));
addCommand(exitcmd=new Command("exit",Command.EXIT,1));
setCommandListener(this);
screenwidth=getWidth();
screenheight=getHeight();
parent=p;
scoredisplay=new Sprite[11];
//put your init once code here
try {
img = Image.createImage("/Plane.png");
}
catch (Exception ex)
{}
plane=new Sprite(img,24,24);
//背景处理
try {
img = Image.createImage("/back.png");
}
catch (Exception ex)
{}
background=new Sprite(img,img.getWidth(),img.getHeight());
myView=new LayerManager();
myView.append(background);
//初始化字体图片
try {
img = Image.createImage("/begin.png");
}
catch (Exception ex)
{}
Begin=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/gameover.png");
}
catch (Exception ex)
{}
Gameover=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/mission1.png");
}
catch (Exception ex)
{}
Mission=new Sprite(img,img.getWidth(),img.getHeight());
//初始化子弹
try {
img = Image.createImage("/bullet.png");
}
catch (Exception ex)
{}
bullets=new Bullets(img,img.getWidth(),img.getHeight(),screenwidth,screenheight,this);
//初始化敌人
enemy=new GameObject(screenwidth,screenheight,this);
try {
img = Image.createImage("/mybom.png");
}
catch (Exception ex)
{}
myexplosion=new Sprite(img,64,50);
try {
img = Image.createImage("/scoredisplay.png");
}
catch (Exception ex)
{}
scoredisplay[10]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num0.png");
}
catch (Exception ex)
{}
scoredisplay[0]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num1.png");
}
catch (Exception ex)
{}
scoredisplay[1]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num2.png");
}
catch (Exception ex)
{}
scoredisplay[2]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num3.png");
}
catch (Exception ex)
{}
scoredisplay[3]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num4.png");
}
catch (Exception ex)
{}
scoredisplay[4]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num5.png");
}
catch (Exception ex)
{}
scoredisplay[5]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num6.png");
}
catch (Exception ex)
{}
scoredisplay[6]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num7.png");
}
catch (Exception ex)
{}
scoredisplay[7]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num8.png");
}
catch (Exception ex)
{}
scoredisplay[8]=new Sprite(img,img.getWidth(),img.getHeight());
try {
img = Image.createImage("/num9.png");
}
catch (Exception ex)
{}
scoredisplay[9]=new Sprite(img,img.getWidth(),img.getHeight());
explosions=new explosion();
monster=new Monster(screenwidth,screenheight,this);
//put your init once code end
System.out.println(screenwidth);
System.out.println(screenheight);
currentgate=1;
score=0;
totalscore=0;
}
public void run()
{
long st=0,et=0,diff=0;
int rate=50;//16-17 frame per second
while(running)
{
st=System.currentTimeMillis();
gameinput();
gameMain();
et=System.currentTimeMillis();
diff=et-st;
if(diff<rate)
{
//System.out.println("Sleep "+(rate-diff));
try
{
Thread.sleep(rate - diff);
}
catch (InterruptedException ex) {}
}
else
{
//System.out.println("rush , and the frame using time: "+diff);
}
}
}
public void start()
{
if(!running)
{
running=true;
t=new Thread(this);
t.start();
}
}
private void gameMain()
{
//g.setColor(0,0,0);//clear screen
//g.fillRect(0,0,getWidth(),getHeight());
//bullets.refreshBullets(plane.sprite,true);
myView.paint(g,0,0);//draw background
currentY-=5;
if (currentY<0)
currentY=600;
myView.setViewWindow(0,currentY,180,177);
if (missionfinished>1)//显示成绩
{
missionfinished--;
scoredisplay[10].setPosition(0,0);
scoredisplay[10].paint(g);
scoredisplay[currentgate].setPosition(90,18);
scoredisplay[currentgate].paint(g);
tempX=3;
scorebak=score;
temp=1000000;
while(scorebak<temp ) temp=temp/10;
if (temp==0)
{
scoredisplay[0].setPosition(tempX,78);
scoredisplay[0].paint(g);
}
else
{
while(temp>0)
{
scoretemp=scorebak/temp;
scoredisplay[scoretemp].setPosition(tempX,78);
scoredisplay[scoretemp].paint(g);
tempX+=15;
scorebak=scorebak-scoretemp*temp;
temp/=10;
}
}
tempX=3;
scorebak=totalscore+score;
temp=1000000;
while(scorebak<temp ) temp/=10;
if (temp==0)
{
scoredisplay[scoretemp].setPosition(tempX,135);
scoredisplay[scoretemp].paint(g);
}
else
{
while(temp>0)
{
scoretemp=scorebak/temp;
scoredisplay[scoretemp].setPosition(tempX,135);
scoredisplay[scoretemp].paint(g);
tempX+=15;
scorebak=scorebak-scoretemp*temp;
temp/=10;
}
}
}
else if (missionfinished>0)//开始下一关
{
if (currentgate==2)
{
gameover=true;
missionfinished=0;
myexplosionlife=72;
}
else
{
currentgate++;
gameInit();
}
return;
}
if (beginlife>0)
{
beginlife--;
if (beginlife>30)
Begin.paint(g);
else
Mission.paint(g);
}
else
{
if (currentgate==1)
{
step++;
if ((step%35==0) && (step/35<first.length))
{
switch (first[step/35])
{
case 0:
break;//什么敌人都没有
case 1:
enemy.initObject(screenwidth/2-7,0,0,2,0,-1);
break;
case 2:
enemy.initObject(screenwidth/4-7,0,0,2,0,-1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -