📄 gamestart.java
字号:
/*
* GameStart.java
*
* Created on 2005年12月10日, 下午11:26
*/
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import java.util.Random;
import java.io.*;
/**
*
* @author myStone
* @version
*/
public class GameStart extends Canvas implements Runnable {
MIDlet parent;
public static final int MAXLIFE=20;
public static final int MAXBOMB=3;
public static final int MAXSUBM=3;
public static final int MAXTORP=5;
public static final int MAXEXPL=4;
public static final int sealevel=27;
public static boolean isRestart;
public static Image bg,imgBomb,imgShip,imgSubl,imgSubr,imgTorp;
public static Image[] imgExpl;
public static int width,height;
clsBomb[] bomb;
clsTorp[] torp;
clsSubm[] subm;
clsExpl[] expl;
clsShip ship;
Random rand;
Image bufImg;
Graphics g;
/**
* constructor
*/
public GameStart(MIDlet parentMIDlet) {
try{
parent=parentMIDlet;
bg=Image.createImage("/img/bg.png");
imgBomb=Image.createImage("/img/bomb.png");
imgShip=Image.createImage("/img/ship.png");
imgSubl=Image.createImage("/img/subl.png");
imgSubr=Image.createImage("/img/subr.png");
imgTorp=Image.createImage("/img/torp.png");
int i;
imgExpl=new Image[15];
for(i=0;i<imgExpl.length;i++)imgExpl[i]=Image.createImage("/img/Expl"+i+".png");
width=getWidth();
height=getHeight();
bomb=new clsBomb[MAXBOMB];
torp=new clsTorp[MAXTORP];
subm=new clsSubm[MAXSUBM];
expl=new clsExpl[MAXEXPL];
for(i=0;i<MAXBOMB;i++)bomb[i]=new clsBomb();
for(i=0;i<MAXTORP;i++)torp[i]=new clsTorp();
for(i=0;i<MAXSUBM;i++)subm[i]=new clsSubm();
for(i=0;i<MAXEXPL;i++)expl[i]=new clsExpl();
ship=new clsShip();
rand=new Random();
bufImg=Image.createImage(width,height);
}catch(Exception e){ e.printStackTrace();}
}
/**
* paint
*/
public void paint(Graphics g) {
g.drawImage(bufImg,(getWidth()-bufImg.getWidth())/2,
(getHeight()-bufImg.getHeight())/2,20);
}
public void showNotify()
{
new Thread(this).start();
}
public void run()
{
g=bufImg.getGraphics();
g.setColor(0x0000ff);
int i,n;
boolean isDead=false;
isRestart=false;
ship.init();
while(true)
{
if(isRestart)
{
g.setColor(0x0000ff);
for(i=0;i<MAXSUBM;i++)subm[i].used=false;
for(i=0;i<MAXBOMB;i++)bomb[i].used=false;
for(i=0;i<MAXTORP;i++)torp[i].used=false;
for(i=0;i<MAXEXPL;i++)expl[i].used=false;
ship.init();
isRestart=false;
}
g.drawImage(bg,0,0,20);
if(ship.life<=MAXLIFE/4)
{
if(g.getColor()==0x0000ff)g.setColor(0xff0000);
else g.setColor(0x0000ff);
}
g.drawString("分数:"+ship.score,0,0,20);
g.drawString("生命:"+ship.life,64,0,20);
if(ship.used)ship.draw(g);
for(i=0;i<MAXEXPL;i++)if(expl[i].used)expl[i].draw(g);
for(i=0;i<MAXSUBM;i++)
{
if(subm[i].used)
{
subm[i].draw(g);
if(rand.nextInt()/2>rand.nextInt())subm[i].fire();
}
else if(rand.nextInt()/2>rand.nextInt())subm[i].init();
}
for(i=0;i<MAXBOMB;i++)
{
if(bomb[i].used)
{
bomb[i].draw(g);
for(n=0;n<MAXSUBM;n++)
if(subm[n].used)
if( (bomb[i].x>=subm[n].x-bomb[i].width/2)
& (bomb[i].x<=subm[n].x+subm[n].width-bomb[i].width/2)
& (bomb[i].y>=subm[n].y-bomb[i].height*3/4)
& (bomb[i].y<=subm[n].y+subm[n].height-bomb[i].height*3/4)
)
{
subm[n].expl();
ship.score++;
subm[n].used=false;
break;
}
if(n<MAXSUBM)bomb[i].used=false;
}
}
for(i=0;i<MAXTORP;i++)
{
if(torp[i].used)
{
torp[i].draw(g);
if(ship.used)
if((torp[i].x>=ship.x-torp[i].width/2)
& (torp[i].x<=ship.x+ship.width-torp[i].width/2)
& (torp[i].y>=ship.y-torp[i].height*3/4)
& (torp[i].y<=ship.y+ship.height-torp[i].height*3/4)
)
{
ship.expl();
ship.life--;
if(ship.life==0)
{
ship.used=false;
isDead=true;
}
torp[i].used=false;
}
}
}
repaint();
try{
Thread.sleep(20);
}catch(Exception e){}
}
}
/**
* Called when a key is pressed.
*/
protected void keyPressed(int keyCode) {
if(keyCode==KEY_NUM4)
{
if(ship.v>=0)ship.v=-1;
else
{
ship.v--;
if(ship.v<=-3)ship.v=-3;
}
}else
if(keyCode==KEY_NUM6)
{
if(ship.v<=0)ship.v=1;
else
{
ship.v++;
if(ship.v>=3)ship.v=3;
}
}else
if(keyCode==KEY_NUM8)
{
ship.v=0;
}else
if(keyCode==KEY_NUM5)
{
ship.fire();
}
}
/**
* Called when a key is released.
*/
protected void keyReleased(int keyCode) {
}
/**
* Called when a key is repeated (held down).
*/
protected void keyRepeated(int keyCode) {
}
/**
* Called when the pointer is dragged.
*/
protected void pointerDragged(int x, int y) {
}
/**
* Called when the pointer is pressed.
*/
protected void pointerPressed(int x, int y) {
}
/**
* Called when the pointer is released.
*/
protected void pointerReleased(int x, int y) {
}
public class clsBomb
{
int x;
int y;
int width;
int height;
public boolean used;
public void clsBomb()
{
used=false;
}
public void init()
{
width=GameStart.imgBomb.getWidth();
height=GameStart.imgBomb.getHeight();
x=ship.x+7;
y=ship.y;
used=true;
}
public void draw(Graphics g)
{
g.drawImage(GameStart.imgBomb,x,y++,20);
if(y>GameStart.height)used=false;
}
}
public class clsShip
{
int x;
int y;
int life;
int score;
int v;
int width;
int height;
public boolean used;
public void clsShip()
{
used=false;
}
public void init()
{
width=GameStart.imgShip.getWidth();
height=GameStart.imgShip.getHeight();
x=(GameStart.width-width)/2;
y=GameStart.sealevel-height;
life=GameStart.MAXLIFE;
score=0;
v=0;
used=true;
}
public void draw(Graphics g)
{
g.drawImage(GameStart.imgShip,x,y,20);
x+=v;
if(x+width>GameStart.width)x-=v;
else if(x<0)x=0;
}
public void fire()
{
int i;
for(i=0;i<MAXBOMB;i++)
{
if(!bomb[i].used)
{
bomb[i].init();
break;
}
}
}
public void expl()
{
int i;
for(i=0;i<MAXEXPL;i++)
{
if(!expl[i].used)
{
expl[i].init(this);
break;
}
}
}
}
public class clsTorp
{
int x;
int y;
int width;
int height;
public boolean used;
public void clsTorp()
{
used=false;
}
public void init(clsSubm subm)
{
width=GameStart.imgTorp.getWidth();
height=GameStart.imgTorp.getHeight();
x=subm.x+7;
y=subm.y;
used=true;
}
public void draw(Graphics g)
{
g.drawImage(GameStart.imgTorp,x,y--,20);
if(y+height/2<GameStart.sealevel)used=false;
}
}
public class clsSubm
{
int x;
int y;
int width;
int height;
public int v;
public boolean dir;
public boolean used;
public void clsSubm()
{
used=false;
}
public void init()
{
width=GameStart.imgSubl.getWidth();
height=GameStart.imgSubl.getHeight();
dir=(rand.nextInt()>rand.nextInt());
if(dir)
{
x=GameStart.width;
v=-1;
}
else
{
x=-GameStart.imgSubr.getWidth();
v=1;
}
y=(GameStart.height-GameStart.sealevel)/2+GameStart.sealevel;
used=true;
}
public void draw(Graphics g)
{
if(dir)
{
g.drawImage(GameStart.imgSubl,x,y,20);
x+=v;
if(x+GameStart.imgSubl.getWidth()<0)used=false;
}
else
{
g.drawImage(GameStart.imgSubr,x,y,20);
x+=v;
if(x>GameStart.width)used=false;
}
}
public void fire()
{
int i;
for(i=0;i<MAXTORP;i++)
{
if(!torp[i].used)
{
torp[i].init(this);
break;
}
}
}
public void expl()
{
int i;
for(i=0;i<MAXEXPL;i++)
{
if(!expl[i].used)
{
expl[i].init(this);
break;
}
}
}
}
public class clsExpl
{
int x;
int y;
int width;
int height;
public boolean used;
int index;
public void clsExpl()
{
used=false;
}
public void init(clsShip ship)
{
width=GameStart.imgExpl[0].getWidth();
height=GameStart.imgExpl[0].getHeight();
x=ship.x+ship.width/2-width/2;
y=ship.y+ship.height/2-height/2;
index=0;
used=true;
}
public void init(clsSubm subm)
{
width=GameStart.imgExpl[0].getWidth();
height=GameStart.imgExpl[0].getHeight();
x=subm.x+subm.width/2-width/2;
y=subm.y+subm.height/2-height/2;
index=0;
used=true;
}
public void draw(Graphics g)
{
g.drawImage(GameStart.imgExpl[index++],x,y,20);
if(index>=15)used=false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -