?? gamecanvasobj.java
字號:
package tilelayer;
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
public class GameCanvasOBJ extends GameCanvas implements Runnable {
TileLayerTest MIDletObj;
Thread thread; //, thread1;
Random RandomObj = new Random();
boolean HitSign = true; //判斷擊中
boolean PauseSign = false; //判斷暫停
boolean GameOver = false; //判斷游戲結束
int GameGread = 10;
int GameMark = 20;
int[] myAnimatedTileIndex = {0, 0, 0, 0, 0, 0, 0, 0, 0};
final int S_WIDTH = getWidth(); //屏幕寬
final int S_HEIGHT = getHeight(); //屏幕高
/*
* 地圖信息
*/
final int MAP_TOTALWIDTH = 280; //總地圖寬
final int MAP_WIDTH = 70; //單位地圖寬
final int MAP_HEIGHT = 58; //單位地圖高
int map_x = 0;//(S_WIDTH - 210) / 2; //地圖相對x坐標
int map_y = 0;//(S_HEIGHT - 174) / 2;
//int map_step = 40; //地圖相對移動x坐標
int Index = 0;
LayerManager layerMan; //圖層管理
TiledLayer map_layer; //地圖圖層
Image map_img; //地圖對象
static final int[] FRAME_SEQUENCE = {2, 1};
static final int[] FRAME_SEQUENCE1 = {3, 1};
static final int[] FRAME_SEQUENCE2 = {4, 1};
public GameCanvasOBJ(boolean suppressKeyEvents) {
super(suppressKeyEvents);
//System.out.println(Integer.toString(S_HEIGHT));
//this.setTitle("分數:0 等級:10");
this.setTitle("分數:" + Integer.toString(GameMark) + "等級:" +
Integer.toString(GameGread));
final int MAP_ROW = 3; //地圖行
final int MAP_COL = 3; //地圖列
try {
map_img = Image.createImage("/res/A.png");
} catch (IOException e) {
e.printStackTrace();
}
layerMan = new LayerManager();
map_layer = new TiledLayer(MAP_COL, MAP_ROW, map_img, MAP_WIDTH,
MAP_HEIGHT); //切割背景地圖
for (int i = 0; i < 9; i++) {
myAnimatedTileIndex[i] = map_layer.createAnimatedTile(1);
}
int IndexObj = 0;
for (int i = 0; i < MAP_ROW; i++) {
for (int j = 0; j < (MAP_COL); j++) {
map_layer.setCell(j, i, myAnimatedTileIndex[IndexObj]);
IndexObj++;
}
}
layerMan.append(map_layer);
thread = new Thread(this);
thread.start();
// thread1 = new Thread(this);
// thread1.start();
/// drawMap();
}
private void drawMap() {
Graphics g = getGraphics();
Index = RandomObj.nextInt(9);
for (int x = 0; x < 2; x++) {
map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
FRAME_SEQUENCE[x]);
layerMan.paint(g, map_x, map_y);
flushGraphics();
if (x == 0) {
try {
thread.sleep(GameGread * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if ((GameMark - 20) >= (11 - GameGread) * 5) {
GameGread--;
} else if (GameMark <= 0) {
GameOver = true;
this.setTicker(new Ticker("Game over"));
ChangeCommand();
}
GameMark--;
this.setTitle("分數:" + Integer.toString(GameMark) + "等級:" +
Integer.toString(GameGread));
}
private void drawError(int Index) {
Graphics g = getGraphics();
// System.out.println(Integer.toString(Index));
//map_layer.setCell(Index, Index, map[Index][Index]);
for (int x = 0; x < 2; x++) {
map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
FRAME_SEQUENCE2[x]);
layerMan.paint(g, map_x, map_y);
flushGraphics();
if (x == 0) {
try {
thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private void drawhit() {
Graphics g = getGraphics();
for (int x = 0; x < 2; x++) {
map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
FRAME_SEQUENCE1[x]);
layerMan.paint(g, map_x, map_y);
flushGraphics();
if (x == 0) {
try {
thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
HitSign = true;
}
}
}
private void updata() {
// map_x -= map_step;
// map_x = map_x % MAP_TOTALWIDTH;
drawMap();
}
public void run() {
if (Thread.currentThread() == thread) {
while (true) {
if (!PauseSign && !GameOver) { //非暫停或者輸了
if (HitSign) {
updata();
/*try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
} else if (!HitSign) {
drawhit();
}
}
}
}
}
public void keyPressed(int keyCode) {
//int keystates = getGameAction(keyCode);
//Graphics g = getGraphics();
//System.out.println(Integer.toString(keyCode));
if (keyCode == (Index + 49) && HitSign) {
//System.out.println("press" + Integer.toString(keyCode));
GameMark += 2;
HitSign = false;
} else if (keyCode == KEY_STAR) {
UpGread();
//System.out.println("press" + Integer.toString(keyCode));
} else if (keyCode == KEY_POUND) {
ReduceGread();
//System.out.println("press dowm");
} else if (keyCode >= KEY_NUM1 && keyCode <= KEY_NUM9) {
drawError(keyCode - KEY_NUM1);
}
//this.setTitle("分數:" +Integer.toString(GameMark)+ "等級:"+Integer.toString(GameGread));
}
public void UpGread() {
GameGread--;
if (GameGread <= 0) {
GameGread = 1;
}
}
public void ReduceGread() {
GameGread++;
if (GameGread >= 10) {
GameGread = 10;
}
}
public void GamePause() {
PauseSign = !PauseSign;
}
public void GetMiDletObj(TileLayerTest MIDletobj) {
MIDletObj = MIDletobj;
}
public void ChangeCommand() {
MIDletObj.ChangeCommand();
}
public void RestartGame() {
GameGread = 10;
GameMark = 20;
GameOver = false;
this.setTicker(null);
}
public void GoonGame() {
GameMark = 20;
GameOver = false;
this.setTicker(null);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -