📄 c02bba42b99d001c1557a899b06c072e
字号:
/* License
*
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistribution in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/
package org.piratis.j2me.demos.tank;
import java.io.IOException;
import javax.microedition.lcdui.*;
import org.piratis.j2me.core.BBox2D;
import org.piratis.j2me.core.game.Canvas;
import org.piratis.j2me.core.game.Engine;
import org.piratis.j2me.core.game.TiledLayer;
public class MicroTankEngine
extends Engine {
private volatile boolean mTrucking;
private MicroTankSprite mTank;
private TiledLayer mBoard;
public MicroTankEngine(Canvas canvas) throws IOException {
super(canvas);
mTank = createTank();
mTank.moveTo(0, 24);
mBoard = createBoard();
this.layers.add(mTank);
this.layers.add(mBoard);
}
private MicroTankSprite createTank() throws IOException {
Image image = Image.createImage("/tank/tank.png");
return new MicroTankSprite(image, 32, 32);
}
private TiledLayer createBoard() throws IOException {
Image image = Image.createImage("/tank/board.png");
TiledLayer tiledLayer = new TiledLayer(10, 12, image, 16, 16);
int[] map = {
1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 1, 0, 0, 0
};
for (int i = 0; i < map.length; i++) {
int column = i % 10;
int row = (i - column) / 10;
tiledLayer.setCell(column, row, map[i]);
}
return tiledLayer;
}
public void start() {
mTrucking = true;
Thread t = new Thread(this);
t.start();
}
protected void work() {
if (mBoard.cellCollides(mTank))
mTank.undo();
// center screen (scrolling)
BBox2D bbox = mTank.getBbox();
int cx = bbox.getCenterX();
int cy = bbox.getCenterY();
int w = this.canvas.getWidth();
int h = this.canvas.getHeight();
cx = Math.max(0, cx - w/2);
cy = Math.max(0, cy - h/2);
this.layers.setWindow(cx, cy, w, h);
}
protected void input() {
int keyStates = getKeyStates();
if ((keyStates & Engine.IS_LEFT) != 0) mTank.turn(-1);
else if ((keyStates & Engine.IS_RIGHT) != 0) mTank.turn(1);
else if ((keyStates & Engine.IS_UP) != 0) mTank.forward(2);
else if ((keyStates & Engine.IS_DOWN) != 0) mTank.forward(-2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -