📄 main.java
字号:
RecordStore recordStore = RecordStore.openRecordStore("JDweep",
true);
int num = recordStore.getNumRecords();
if (num < 1) {
record = new byte[4];
recordStore.addRecord(record, 0, record.length);
} else {
record = recordStore.getRecord(1);
}
recordStore.closeRecordStore();
System.gc();
} catch (Exception e) {
}
}
/**
* 当游戏画布显示到屏幕时就开始线程
*/
protected void showNotify() {
thread = new Thread(this);
thread.start();
playSound(nowPlayer, 1);
}
/**
* 画布离开屏幕时停止线程
*/
protected void hideNotify() {
thread = null;
}
protected void keyPressed(int keyCode) {
keyPressed = keyCode >= GameCanvas.KEY_STAR ? keyCode
: getGameAction(keyCode);
}
/**
* 线程执行体
*/
public void run() {
//画布
Graphics g = getGraphics();
int screenWidth = g.getClipWidth();
int screenHeight = g.getClipHeight();
while (thread == Thread.currentThread()) {
try {
//延时
Thread.sleep(MainMIDlet.gameLoop);
incr = (incr + 1)%8;
//清屏
if (status != STATUS_MISSION_RUNNING) {
g.setColor(0x00E6EFF8);
g.fillRect(0, 0, screenWidth, screenHeight);
}
//得到最新的按键信息,如果一个游戏循环中用户按了多个键以最新的一次为准.
//注意,此处可能发生以下意外情况
//int lastKeyPressed = keyPressed;执行完以后,用户又按了一次键,keyPressed被执行,接下来
//执行keyPressed = -1;会造成此次击键信息的丢失.
//可以通过加锁来解决,但加锁对性能有影响
int lastKeyPressed = keyPressed;
keyPressed = 0;
//绘制不同状态时的画面
switch (status) {
case STATUS_MAINMENU:
// 处理按键
int menuCount = (missionStatus == MISSION_RUNNING) ? 5 : 4;
int menuS = 5 - menuCount;
switch (lastKeyPressed) {
case GameCanvas.DOWN:
mainMenuIndex = (mainMenuIndex + 1) % menuCount;
break;
case GameCanvas.UP:
mainMenuIndex = (mainMenuIndex - 1 + menuCount) % menuCount;
break;
case GameCanvas.FIRE:
Image selectedImage = mainMenuItems[mainMenuIndex + menuS];
if (selectedImage == word_start)
status = STATUS_MISSION_SELECTING;
else if (selectedImage == word_continue)
status = STATUS_MISSION_RUNNING;
else if (selectedImage == word_setting)
MainMIDlet.showSetting();
else if (selectedImage == word_about)
status = STATUS_ABOUT;
else if (selectedImage == word_quit)
MainMIDlet.quitApp();
break;
}
// 绘制LOGO
g.drawImage(image_logo, 28, 32, 20);
// 绘制菜单项
for (int i = menuS; i < mainMenuItems.length; i ++)
g.drawImage(mainMenuItems[i], 75, 100 + (i - menuS)* 14, 20);
// 绘制光标
if (incr <= 3)
g.drawImage(image_arrow, 60, 102 + mainMenuIndex * 14, 20);
break;
case STATUS_MISSION_SELECTING:
//处理按键
switch(lastKeyPressed) {
case GameCanvas.RIGHT:
if (missionPageNum < missionCount / 10) {
missionPageNum++;
missionSelectedIndex = missionPageNum * 10;
}
break;
case GameCanvas.LEFT:
if (missionPageNum > 0) {
missionPageNum--;
missionSelectedIndex = missionPageNum * 10;
}
break;
case GameCanvas.UP:
if (missionSelectedIndex > 0) {
missionSelectedIndex--;
missionPageNum = missionSelectedIndex / 10;
}
break;
case GameCanvas.DOWN:
if (missionCount - 1 > missionSelectedIndex) {
missionSelectedIndex++;
missionPageNum = missionSelectedIndex / 10;
}
break;
case GameCanvas.FIRE:
loadMission(missionSelectedIndex);
status = STATUS_MISSION_RUNNING;
break;
}
//绘制画面
for (int i = 0; i < 10; i ++) {
int curNum = missionPageNum * 10 + i;
if (curNum >= missionCount)
break;
int y = 32 + i * 14;
int disno = curNum + 1;
g.drawImage(word_mission, 66, y, 20);
g.drawImage(word_numbers[disno / 10], 92, y, 20);
g.drawImage(word_numbers[disno % 10], 105, y, 20);
//假如该任务完成过就显示一个奖杯
if ((record[curNum / 8] & (0x01 << curNum % 8)) != 0)
g.drawImage(image_cup, 118, y, 20);
}
if (incr <= 3)
g.drawImage(image_arrow, 52, 32 + missionSelectedIndex % 10 * 14, 20);
break;
case STATUS_ABOUT:
if(lastKeyPressed != 0)
status = STATUS_MAINMENU;
g.setColor(0x000000);
for (int i = 0; i < about.length; i++)
g.drawString(about[i], 2, i*font.getHeight() + 1, 20);
break;
case STATUS_MISSION_RUNNING:
// 处理按键
if (subMenuVisible) {
int size = subMenuItems.length;
switch(lastKeyPressed) {
case GameCanvas.UP:
subMenuIndex = (--subMenuIndex + size) % size;
break;
case GameCanvas.DOWN:
subMenuIndex = ++subMenuIndex % size;
break;
case GameCanvas.FIRE:
Image item = subMenuItems[subMenuIndex];
subMenuVisible = false;
if (item == word_mainMenu) {
status = STATUS_MAINMENU;
continue;
} else if (item == word_nextMission)
loadMission(missionNum + 1);
else if (item == word_retry)
reload();
break;
}
} else {
switch (lastKeyPressed) {
case GameCanvas.LEFT:
cursorColumn = (--cursorColumn + 10) % 10;
break;
case GameCanvas.RIGHT:
cursorColumn = ++cursorColumn % 10;
break;
case GameCanvas.UP:
cursorRow = (--cursorRow + 12) % 12;
break;
case GameCanvas.DOWN:
cursorRow = ++cursorRow % 12;
break;
case GameCanvas.KEY_STAR:
showMenu();
break;
case GameCanvas.KEY_NUM0:
selectedToolIndex = -1;
break;
case GameCanvas.FIRE:
// 没有工具时,则可以移动dweep
// 有工具选时,如果dweep在光标处,如果对dweep应用工具,否则对光标处的物体应用工具,
// 如果也不存在物体,且选中的工具为炸弹,风扇等物体时,就新建一个物体到地图上。
if (selectedToolIndex == -1) {
if (canCross(cursorRow, cursorColumn))
dweep.setPath(cursorRow, cursorColumn);
} else {
int toolType = tools[selectedToolIndex];
Stuff stuff = stuffs[cursorRow][cursorColumn];
int dweepX = dweep.getRefPixelX();
int dweepY = dweep.getRefPixelY();
//判断Dweep是不是处于光标之下
int cursorX = cursorColumn << 4;
int cursorY = cursorRow << 4;
if (dweepX > cursorX - 8
&& dweepX < cursorX + 8
&& dweepY > cursorY - 8
&& dweepY < cursorY + 8
&& stuff == null) {
if (dweep.apply(toolType)) {
removeSelectedTool();
}
} else if (stuff != null) {
if (stuff.apply(toolType)) {
removeSelectedTool();
}
} else if (toolType >= TOOL_BOMB && base[cursorRow][cursorColumn] == 0) {
stuff = new Stuff(toolType + 16, cursorRow,
cursorColumn);
stuffs[cursorRow][cursorColumn] = stuff;
removeSelectedTool();
}
}
break;
default:
int i = lastKeyPressed - GameCanvas.KEY_NUM1;
if (i >= 0 && i <= 9 && tools[i] != 0)
selectedToolIndex = i;
}
}
// ***绘制地图***//
iceFloor.nextFrame();
hotFloor.nextFrame();
targetFloor.nextFrame();
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 10; j++) {
int type = base[i][j];
int x = j * 16;
int y = i * 16;
switch (type) {
case 0:
g.drawImage(image_floors[floor], x, y, 20);
break;
case FLOOR_HOT:
hotFloor.setPosition(x,y);
hotFloor.paint(g);
break;
case FLOOR_ICE:
iceFloor.setPosition(x,y);
iceFloor.paint(g);
break;
case FLOOR_TARGET:
targetFloor.setPosition(x,y);
targetFloor.paint(g);
break;
default:
g.setColor(0x0099FF);
g.fillRect(x, y, 16, 16);
g.drawImage(image_tools[type - 4], x, y,
20);
g.setColor(0x0000FF00);
g.drawRect(x,y,15,15);
}
}
}
int cursorX = cursorColumn << 4;
int cursorY = cursorRow << 4;
g.setColor(0x00FF0000);
g.drawRect(cursorX, cursorY, 15, 15);
boolean dweepUndrawn = true;
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 10; j++) {
Stuff stuff = stuffs[i][j];
if (stuff != null) {
stuff.draw(g);
if (stuff.status == Stuff.STATUS_DEAD)
stuffs[i][j] = null;
}
if (dweep.getRefPixelY() <= i <<4 && dweepUndrawn && dweep.status != Dweep.STATUS_HOT) {
dweep.draw(g);
dweepUndrawn = false;
}
}
}
//绘制激光
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 10; j++) {
Stuff stuff = stuffs[i][j];
if (stuff != null
&& stuff.type >= STUFF_LASER_UP
&& stuff.type <= STUFF_LASER_LEFT
&& stuff.status != Stuff.STATUS_DYING) {
paintLaser(stuff, stuff.type - STUFF_LASER_UP, g);
}
}
}
if (dweepUndrawn) dweep.draw(g);
//***绘制光标***//
if (selectedToolIndex == -1) {
g.drawImage(image_hand, cursorX + 1, cursorY + 5, 20);
} else {
int type = tools[selectedToolIndex];
switch(type) {
case TOOL_FAN_UP:
g.drawRegion(image_fan, 0, 0, 18, 21,
Sprite.TRANS_NONE, cursorX - 1, cursorY - 8,
20);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -