📄 raidencanvas.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
public class RaidenCanvas extends GameCanvas implements Runnable
{
private int CanvasWidth = getWidth();
private int CanvasHeight = getHeight();
private Image image;
private Image imgState;
private Image imgBack1;
private Image imgBack2;
private Image imgBack3;
private Image imgExplored;
private Image imgLife;
private Image num[];
private static final int MILLIS_PER_TICK = 50;
private Player player;
private final Graphics g;
private Bullet []bullets = new Bullet[3];
private Enemy1 enemy1;
private Enemy2 enemy2;
private Enemy3456[]enemy3456 = new Enemy3456[8];
private int Enemy3456Cnt;
private int backY;
private int score=0;
private int life = 2;
private Random random;
private int i, j;
private volatile Thread animationThread = null;
private boolean isPaused = false;
private boolean isWin = false;
private boolean isFail = false;
private int energy = 40;
private Bonus bonus;
private boolean isExplored;
private int expX, expY;
private int bonusCnt;
private RaidenMIDlet midlet;
private int fontWidth,fontHeight;
private Font font;
private Image imgWin;
private Image imgFail;
private Audio audio;
public RaidenCanvas(RaidenMIDlet midlet)
{
super(false); // suppress key events for game keys
this.midlet = midlet;
setFullScreenMode(true);
CanvasHeight = getHeight();
g = getGraphics();
random = new Random();
font = Font.getFont(Font. FACE_PROPORTIONAL, Font.STYLE_BOLD,
Font.SIZE_LARGE);
fontHeight = font.getHeight();
fontWidth = font.charWidth('雷');
load();
init();
}
public synchronized void start()
{
animationThread = new Thread(this);
animationThread.start();
}
public synchronized void stop()
{
animationThread = null;
}
public void init()
{ isPaused = false;
isWin = false;
isFail = false;
score =0;
backY = CanvasHeight - imgBack1.getHeight();
player.init();
enemy1.init();
enemy2.init();
for (i = 0; i < 8; i++)
{
enemy3456[i].init();
}
for (i = 0; i < 3; i++)
{
bullets[i].setAlive(false);
}
life = 2;
energy = 40;
Enemy3456Cnt=0;
bonusCnt=0;
isExplored = false;
expX=0;
expY=0;
bonus.setAlive(false);
if(midlet.set[RaidenMIDlet.AUDIO])audio.playSound(Audio.START);
}
private void load()
{
audio = Audio.getInstance();
image = RaidenMIDlet.createImage("/player.png");
player = new Player(image, image.getWidth(), image.getHeight());
player.setCanvasSize(CanvasWidth, CanvasHeight);
image = RaidenMIDlet.createImage("/bullet.png");
bullets[0] = new Bullet(image, image.getWidth(), image.getHeight());
bullets[1] = new Bullet(image, image.getWidth(), image.getHeight());
bullets[2] = new Bullet(image, image.getWidth(), image.getHeight());
for (i = 0; i < 3; i++)
{
bullets[i].setCanvasSize(CanvasWidth, CanvasHeight);
}
image = RaidenMIDlet.createImage("/e1.png");
enemy1 = new Enemy1(image, image.getWidth(), image.getHeight());
enemy1.setCanvasSize(CanvasWidth, CanvasHeight);
// enemy1.setAlive(true);
image = RaidenMIDlet.createImage("/e2.png");
enemy2 = new Enemy2(image, image.getWidth(), image.getHeight());
enemy2.setCanvasSize(CanvasWidth, CanvasHeight);
// enemy2.setAlive(true);
image = RaidenMIDlet.createImage("/e3.png");
enemy3456[0] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
enemy3456[4] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
image = RaidenMIDlet.createImage("/e4.png");
enemy3456[1] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
enemy3456[5] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
image = RaidenMIDlet.createImage("/e5.png");
enemy3456[2] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
enemy3456[6] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
image = RaidenMIDlet.createImage("/e6.png");
enemy3456[3] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
enemy3456[7] = new Enemy3456(image, image.getWidth(), image.getHeight())
;
image = RaidenMIDlet.createImage("/bonus.png");
bonus = new Bonus(image, image.getWidth(), image.getHeight() / 3);
bonus.setCanvasSize(CanvasWidth, CanvasHeight);
for (i = 0; i < 8; i++)
{
enemy3456[i].setCanvasSize(CanvasWidth, CanvasHeight);
}
imgState = RaidenMIDlet.createImage("/energy_bar.png");
imgBack1 = RaidenMIDlet.createImage("/back_img1.png");
imgBack2 = RaidenMIDlet.createImage("/back_img2.png");
imgBack3 = RaidenMIDlet.createImage("/back_img3.png");
imgExplored = RaidenMIDlet.createImage("/explored.png");
imgLife = RaidenMIDlet.createImage("/Life.png");
num = new Image[10];
image = RaidenMIDlet.createImage("/num.png");
for (i = 0; i <= 9; i++)
{
num[i] = Image.createImage(7, 11);
Graphics g = num[i].getGraphics();
g.drawImage(image, 0, -i* 11, g.TOP|g.LEFT);
}
imgWin = RaidenMIDlet.createImage("/win.png");
imgFail = RaidenMIDlet.createImage("/fail.png");
}
public void run()
{
Thread currentThread = Thread.currentThread();
try
{
// This ends when animationThread is set to null, or when
// it is subsequently set to a new thread; either way, the
// current thread should terminate
while (currentThread == animationThread)
{
long startTime = System.currentTimeMillis();
// Don't advance game or draw if canvas is covered by
// a system screen.
if (!isPaused)
{
input();
tick();
draw();
}
long timeTaken = System.currentTimeMillis() - startTime;
if (timeTaken < MILLIS_PER_TICK)
{
synchronized(this)
{
wait(MILLIS_PER_TICK - timeTaken);
}
}
else
{
currentThread.yield();
}
}
}
catch (InterruptedException e)
{
// won't be thrown
}
}
protected void keyPressed(int keyCode)
{
if(isWin||isFail)midlet.endGame(score);
//System.out.println(keyCode)
if (getGameAction(keyCode) == FIRE) {
for (i = 0; i < 3; i++)
{
if (bullets[i].isAlive() == false)
{
bullets[i].setAlive(player.getRefPixelX() - 6,
player.getY());
break;
}
}
}else if(keyCode == -7){
//暂停游戏
isPaused = true;
midlet.stopGame();
}
}
public void resumeGame(){
isPaused = false;
}
private void input()
{
// If player presses two or more direction buttons, we ignore them
// all. But pressing fire is independent. The code below also ignores
// direction buttons if GAME_A..GAME_D are pressed.
int keyStates = getKeyStates();
if (player.isAlive())
{
if ((keyStates & LEFT_PRESSED) != 0)
player.move(LEFT);
else if ((keyStates & RIGHT_PRESSED) != 0)
player.move(RIGHT);
else if ((keyStates & UP_PRESSED) != 0)
player.move(UP);
else if ((keyStates & DOWN_PRESSED) != 0)
player.move(DOWN);
}
}
// draw game
private void draw()
{
if (score <= 4000){
g.drawImage(imgBack1, 0, backY, 0);
if(backY>0&&backY<CanvasHeight)
g.drawImage(imgBack1, 0, backY-imgBack2.getHeight(), 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -