📄 mygamecanvas.java
字号:
import java.util.Random;
import java.util.Timer;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
class MyGameCanvas extends GameCanvas implements Runnable {
private Graphics g;
private int width;
private int height;
private int screenWidth = 0; //屏幕宽度
private int screenHeight = 0; //屏幕高度
private int drawX = 0; //要绘制的X坐标
private int drawY = 0; //要绘制的Y坐标
private Image img;
private Image particle;
private Image burst;
private pardata[] particles;
private int par_num;
private boolean ishit;
private final short STAGE_TITLE =0;
private final short STAGE_RUNNING =1;
private final short STAGE_HIT =2;
private final short STAGE_RESTART =3;
private short Game_State;
private long timeLong;
private int milSec;
private Timer timer=null;
protected void destroy(){
particles=null;
img=null;
particle=null;
burst=null;
}
protected MyGameCanvas() {
super(true);
g = this.getGraphics();
screenWidth = this.getWidth();
screenHeight = this.getHeight();
drawX = screenWidth / 2 - width / 2;
drawY = screenHeight / 2 - height / 2;
try{
img=Image.createImage("/myship.png");
particle=Image.createImage("/par.png");
burst=Image.createImage("/burst.png");
}catch(Exception e){
}
timeLong=0;
milSec=0;
par_num=40;
particles = new pardata[par_num];
Random ran=new Random();
for(int i=0;i<par_num;i++){
int k=ran.nextInt();
int j=ran.nextInt();
//if(k<0||j<0)
particles[i]=new pardata(drawX+100+k%30,drawY+100+j%30,k%5,j%5,screenWidth,screenHeight);
//else
//particles[i]=new pardata(drawX+70+k%30,drawY+70+j%30,k%6,j%6,screenWidth,screenHeight);
}
Game_State = STAGE_RUNNING;//游戏状态为running
draw(g);
// doTimerStart();
Thread thread = new Thread(this);
thread.start();
}
protected void draw(Graphics g) {
g.setColor(0x000000);
g.fillRect(0, 0, screenWidth, screenHeight);
switch(Game_State){
case STAGE_RUNNING:
addSec(g);
g.drawImage(img,drawX,drawY,Graphics.TOP|Graphics.LEFT);
for(int i=0;i<par_num;i++){
if(ishit=particles[i].isHit(img,drawX,drawY)){
g.drawImage(burst,drawX,drawY,Graphics.TOP|Graphics.LEFT);
Game_State = STAGE_HIT;//一但hit,break
break;
}
particles[i].drawParticle(g,particle);
}
flushGraphics();
break;
}
}
public void keyPressed() {
int x, y;
int keyState = getKeyStates();
//判断上下左右键是否被按下
if ((keyState & UP_PRESSED) != 0) {
if (drawY - 3 > 0)
drawY = drawY - 3;
else
drawY = screenHeight;
}
if ((keyState & DOWN_PRESSED) != 0) {
if (drawY + 3 < screenHeight)
drawY = drawY + 3;
else
drawY = 0;
}
if ((keyState & LEFT_PRESSED) != 0) {
if (drawX - 3 > 0)
drawX = drawX - 3;
else
drawX = screenWidth;
}
if ((keyState & RIGHT_PRESSED) != 0) {
if (drawX + 3 < screenWidth)
drawX = drawX + 3;
else
drawX = 0;
}
}
public void run() {
//无限循环检测键盘的输入
while (true) {
for(int i=0;i<par_num;i++){
particles[i].updateParticle(20);
}
keyPressed();
draw(g);
try {
Thread.sleep(20);
} catch (InterruptedException ie) {
}
}
}
void addSec(Graphics g) {
milSec++;
if(milSec%50==0){
timeLong++;
milSec=1;
}
g.setColor(0xFFFFFF);
//描绘计时器
int hour = (int)(timeLong / 3600);
int minute = (int)((timeLong - (hour * 3600)) / 60);
String minuteSt = String.valueOf(minute);
minuteSt = (minuteSt.length() < 2 ? "0"+minuteSt : minuteSt);//加上0变成两位数
int sec = (int)(timeLong - (hour * 3600) - (minute * 60));
String secSt = String.valueOf(sec);
secSt = (secSt.length() < 2 ? "0"+secSt : secSt);//加上0变成两位数傞
String drawSt = String.valueOf(hour) + ":" + minuteSt + ":" + secSt+":"+milSec;
g.drawString(drawSt, 0, 0, Graphics.TOP|Graphics.LEFT);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -