📄 goat_canvas.java
字号:
import java.util.Random;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class Goat_Canvas
extends GameCanvas
implements Runnable, CommandListener {
boolean running;
Image img;
Image img0, img1;
Sprite sp;
int fs[][] = {
{
0, 1, 2, 3, 4}
, {
5, 6, 7, 8, 9}
};
TiledLayer tlg;
TiledLayer tlw;
int fw[] = {
1, 2, 3};
int mySequenceIndex = 0;
int myAnimatedTileIndex;
int win_width = getWidth();
int win_height = getHeight();
int img_Goat_size = 15;
int img_grass_size = 16;
int img_water_size = 16;
int dir = 0;
int collide = -1;
Graphics g = getGraphics();
Goat_MIDlet gm;
public Goat_Canvas(Goat_MIDlet gm) {
super(true);
this.gm = gm;
Command exitCommand = new Command("exit", Command.EXIT, 0);
addCommand(exitCommand);
setCommandListener(this);
try {
img = Image.createImage("/goat.png");
img0 = Image.createImage("/grass.png");
img1 = Image.createImage("/water.png");
}
catch (IOException e) {
System.out.println(e.getMessage());
}
int backcols = win_width / img_grass_size + 1;
int backrows = win_height / img_grass_size + 1;
tlg = new TiledLayer(backcols, backrows, img0, img_grass_size,
img_grass_size);
Random r = new Random();
for (int i = 0; i < backcols * backrows; i++) {
int n = (r.nextInt() >>> 1) % 5 + 1;
tlg.setCell(i % backcols, i / backcols, n);
}
tlw = new TiledLayer(backcols, backrows, img1, img_water_size,
img_water_size);
myAnimatedTileIndex = tlw.createAnimatedTile(1);
for (int i = 0; i < backcols * (backrows / 2); i++) {
tlw.setCell(i % backcols, i / backcols, myAnimatedTileIndex);
}
sp = new Sprite(img, img_Goat_size, img_Goat_size);
sp.setFrameSequence(fs[0]);
sp.setFrame(0);
int x = (win_width - img_Goat_size) / 2;
int y = win_height - img_Goat_size;
sp.setPosition(x, y);
start();
}
public void start() {
running = true;
Thread t = new Thread(this);
t.start();
}
public void run() {
long st = 0, et = 0, diff = 0;
int rate = 250;
while (running) {
st = System.currentTimeMillis();
render(g);
et = System.currentTimeMillis();
diff = et - st;
if (diff < rate) {
try {
Thread.sleep(rate - diff);
}
catch (InterruptedException ex) {
stop();
}
}
}
}
private void render(Graphics g) {
g.setColor(0x000000);
g.fillRect(0, 0, win_width, win_height);
tlg.paint(g);
mySequenceIndex++;
mySequenceIndex %= 3;
tlw.setAnimatedTile(myAnimatedTileIndex, fw[mySequenceIndex]);
tlw.paint(g);
switch (isCollision()) {
case -1:
switch (dir) {
case 0:
sp.move(0, -3);
sp.nextFrame();
break;
case 1:
sp.move(0, 3);
sp.nextFrame();
break;
}
break;
case 0:
dir = 1;
sp.setFrameSequence(fs[1]);
sp.move(0, 3);
sp.nextFrame();
break;
case 1:
dir = 0;
sp.setFrameSequence(fs[0]);
sp.move(0, -3);
sp.nextFrame();
break;
}
sp.paint(g);
flushGraphics();
}
public int isCollision() {
if (sp.getY() < win_height / 2) {
collide = 0;
}
else if (sp.getY() > win_height - sp.getHeight()) {
collide = 1;
}
else {
collide = -1;
}
return collide;
}
public void stop() {
running = false;
}
public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT) {
gm.quitApp();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -