📄 gamecanvas.java
字号:
import java.util.Random;
import javax.microedition.lcdui.*;
public class GameCanvas extends Canvas {
public class GeneralThread extends Thread {
public void run() {
do {
if (!alive) {
break;
}
if (GameCanvas.stateInGame == 0 || GameCanvas.stateInGame == 1) {
drawRoundBox(2, 62, 116, 40, 0xffffff);
connectView("Connecting..");
if (loadOrSave(GameCanvas.stateInGame)) {
System.gc();
pause(500);
if (GameCanvas.stateInGame == 0) {
drawStreet();
player.setClip("intro.mmf");
} else {
returnToGame();
}
GameCanvas.keyEnabled = true;
}
} else
if (GameCanvas.stateInGame == 4) {
int refX = 4;
int refY = 68;
int width = 111;
int height = 28;
drawRoundBox(2, 62, 116, 40, 0xffffff);
for (int i = 0; i <= width / 2 - 20; i += 5) {
GameCanvas.offScreen.setClip(refX, refY, width, height);
GameCanvas.drawFillRect( (refX + i) - 10, refY, 20, height,
0xffffff);
drawCharacImage(refX + i, 72, 3, 0);
GameCanvas.offScreen.setClip(refX, refY, width, height);
GameCanvas.drawFillRect( (refX + width) - i - 10, refY, 20, height,
0xffffff);
drawCharacImage( (refX + width) - 19 - i, 72, 1, 0);
repaintIt();
pause(100);
}
GameCanvas.drawFillRect(refX, refY, width, height, 0xffffff);
repaintIt();
GameCanvas.offScreen.setClip(0, 0, 120, 143);
GameCanvas.stateInGame = 0;
} else
if (GameCanvas.stateInGame == 90) {
usePotion(GameCanvas.potionNb, true);
if (GameCanvas.usePotionState == 71) {
viewItem();
} else {
drawFighting();
GameCanvas.stateInGame = 80;
GameCanvas.stateInBattle = 6;
}
GameCanvas.keyEnabled = true;
} else
if (GameCanvas.stateInGame == 10) {
nowCloudPos--;
if (nowCloudPos < 0) {
nowCloudPos = 220;
}
if (nowCloudPos < 188 && nowCloudPos > 35) {
GameCanvas.drawFillRect( (nowCloudPos - 58) + 20, 30, 2, 15,
GameCanvas.rgbPixel(208, 255, 255));
GameCanvas.drawImage(nowCloudPos - 60, 30, GameCanvas.cloud);
repaintIt();
}
if (!GameCanvas.isMoving) {
pause(200);
} else {
if (GameCanvas.characDirection == 1 ||
GameCanvas.characDirection == 3) {
GameCanvas.characXPos += 6 * (GameCanvas.characDirection - 2);
if (GameCanvas.characXPos < 0) {
changePlace( -1);
} else
if (GameCanvas.characXPos > 101) {
changePlace(1);
} else {
GameCanvas.drawFillRect(GameCanvas.characXPos - 6,
GameCanvas.characYPos, 31, 21,
GameCanvas.rgbPixel(208, 216, 0));
mul *= -1;
drawCharacImage(GameCanvas.characXPos, GameCanvas.characYPos,
GameCanvas.characDirection, (mul + 1) / 2);
}
} else {
GameCanvas.drawFillRect(GameCanvas.characXPos - 6,
GameCanvas.characYPos, 31, 21,
GameCanvas.rgbPixel(208, 216, 0));
mul *= -1;
drawCharacImage(GameCanvas.characXPos, GameCanvas.characYPos,
GameCanvas.characDirection, (mul + 1) / 2);
if (GameCanvas.characDirection == 2) {
checkHouse();
}
}
repaintIt();
pause(100);
}
} else
if (GameCanvas.stateInGame == 20) {
if (GameCanvas.isMoving) {
GameCanvas.drawFillRect(GameCanvas.characXPos,
GameCanvas.characYPos, 19, 21, 0xffffff);
int tempYPos = GameCanvas.characYPos - 23;
switch (GameCanvas.characDirection) {
case 1: // '\001'
GameCanvas.characXPos += -6;
if (GameCanvas.characXPos < 0) {
GameCanvas.nowDungeonNb--;
GameCanvas.characXPos = 99;
makeDungeon();
} else {
int checkX = GameCanvas.characXPos / 30;
if (!checkPosInDungeon(checkX, checkX, tempYPos / 30,
( (tempYPos + 21) - 1) / 30)) {
GameCanvas.characXPos = (checkX + 1) * 30;
}
}
break;
case 3: // '\003'
GameCanvas.characXPos += 6;
if (GameCanvas.characXPos + 19 > 126) {
GameCanvas.nowDungeonNb++;
GameCanvas.characXPos = 1;
makeDungeon();
} else {
int checkX = ( (GameCanvas.characXPos + 19) - 1) / 30;
if (!checkPosInDungeon(checkX, checkX, tempYPos / 30,
( (tempYPos + 21) - 1) / 30)) {
GameCanvas.characXPos = checkX * 30 - 19;
}
}
break;
case 0: // '\0'
GameCanvas.characYPos += 6;
tempYPos = GameCanvas.characYPos - 23;
if (GameCanvas.characYPos + 21 > 141) {
GameCanvas.nowDungeonNb += 10;
GameCanvas.characYPos = 25;
makeDungeon();
} else {
int checkY = ( (tempYPos + 21) - 1) / 30;
if (!checkPosInDungeon(GameCanvas.characXPos / 30,
( (GameCanvas.characXPos + 19) - 1) /
30, checkY, checkY)) {
GameCanvas.characYPos = (checkY * 30 - 21) + 23;
}
}
break;
case 2: // '\002'
GameCanvas.characYPos += -6;
tempYPos = GameCanvas.characYPos - 23;
if (GameCanvas.characYPos < 23) {
GameCanvas.nowDungeonNb -= 10;
GameCanvas.characYPos = 119;
makeDungeon();
} else {
int checkY = tempYPos / 30;
if (!checkPosInDungeon(GameCanvas.characXPos / 30,
( (GameCanvas.characXPos + 19) - 1) /
30, checkY, checkY)) {
GameCanvas.characYPos = (checkY + 1) * 30 + 23;
}
}
break;
}
if (GameCanvas.nowDungeonFloor ==
GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon].length - 1 &&
GameCanvas.nowDungeonNb / 10 == 2 && GameCanvas.characYPos < 60) {
monsters = new int[3];
monsters[0] = monsters[2] = -1;
monsters[1] = GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon][
GameCanvas.nowDungeonFloor] >> 10 & 0x1f;
fighting();
} else
if (++moveCount > 66 &&
GameCanvas.nowDungeonFloor <
GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon].length - 1) {
moveCount = 0;
monsters = new int[3];
int monsterNb = (Math.abs(GameCanvas.ran.nextInt()) % 90) / 30 +
1;
for (int i = 0; i < 3; i++) {
if (i < monsterNb) {
int ranNb = Math.abs(GameCanvas.ran.nextInt()) % 100;
if ( (GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon][
GameCanvas.nowDungeonFloor] >> 15 & 0xff) > ranNb) {
monsters[i] = GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon][
GameCanvas.nowDungeonFloor] >> 25 & 0x1f;
} else {
monsters[i] = GameCanvas.MON_BATTLE[GameCanvas.nbOfDungeon][
GameCanvas.nowDungeonFloor] >> 10 & 0x1f;
}
} else {
monsters[i] = -1;
}
}
fighting();
} else {
mul *= -1;
drawCharacImage(GameCanvas.characXPos, GameCanvas.characYPos,
GameCanvas.characDirection, (mul + 1) / 2);
}
}
repaintIt();
pause(100);
} else
if (GameCanvas.stateInGame == 41) {
player.setClip("resting.mmf");
GameCanvas.drawFillRect(0, 0, 128, 143, 0x666666);
GameCanvas.drawImage(20, 30, GameCanvas.moon);
GameCanvas.drawImage(60, 40, GameCanvas.star);
GameCanvas.drawImage(100, 20, GameCanvas.star);
GameCanvas.drawImage(30, 80, GameCanvas.star);
GameCanvas.drawImage(110, 80, GameCanvas.star);
GameCanvas.drawImage(80, 60, GameCanvas.star);
repaintIt();
pause(500);
GameCanvas.drawFillRect(0, 0, 128, 143, 0);
GameCanvas.drawImage(20, 30, GameCanvas.moon);
GameCanvas.drawImage(60, 40, GameCanvas.star);
GameCanvas.drawImage(100, 20, GameCanvas.star);
GameCanvas.drawImage(30, 80, GameCanvas.star);
GameCanvas.drawImage(110, 80, GameCanvas.star);
GameCanvas.drawImage(80, 60, GameCanvas.star);
repaintIt();
pause(1000);
GameCanvas.inMenu = false;
GameCanvas.afterSleep = true;
hp = GameCanvas.attribute[2];
mp = GameCanvas.attribute[3];
GameCanvas.gold -= 10 * lv;
if (GameCanvas.gold < 0) {
GameCanvas.gold = 0;
}
GameCanvas.stateInGame = 33;
enterHouse();
repaintIt();
GameCanvas.keyEnabled = true;
} else
if (GameCanvas.stateInGame == 80) {
if (GameCanvas.stateInBattle == 3 || GameCanvas.stateInBattle == 4) {
if (GameCanvas.stateInBattle == 3) {
player.setClip("attack.mmf");
} else {
player.setClip("skill.mmf");
}
GameCanvas.keyEnabled = false;
clearActionWindow();
int damage = 0;
int checkY = GameCanvas.MONSTER_INFO[monsters[beingAttacked]][0];
int info2 = GameCanvas.MONSTER_INFO[monsters[beingAttacked]][1];
int criticalPercentage = 10;
int multiplier = 2;
if (GameCanvas.stateInBattle == 4) {
multiplier = GameCanvas.SKILL_INFO[GameCanvas.menuPagePos *
GameCanvas.maxMenuNb + GameCanvas.menuCursorPos] >> 24 & 0x1f;
}
if (Math.abs(GameCanvas.ran.nextInt() % 100) < criticalPercentage &&
GameCanvas.stateInBattle == 3) {
int sum = 0;
for (int i = 0; i < GameCanvas.attribute[0]; i++) {
sum += Math.abs(GameCanvas.ran.nextInt() % 3) + 1;
}
damage = Math.max(2 * GameCanvas.attribute[0], sum);
drawStringInActionWindow("Critical!", 1, 2);
} else {
for (int i = 0; i < GameCanvas.attribute[0]; i++) {
damage += Math.abs(GameCanvas.ran.nextInt() % multiplier) + 1;
}
drawStringInActionWindow(GameCanvas.stateInBattle != 4 ?
"Attack!" : "Skill!", 1, 2);
}
drawAttackAnimation(MONSTER_POS[beingAttacked][0],
MONSTER_POS[beingAttacked][1], 32, 32,
GameCanvas.stateInBattle != 3);
GameCanvas.drawFillRect(MONSTER_POS[beingAttacked][0],
MONSTER_POS[beingAttacked][1] - 10, 32, 42,
0xffffff);
drawMonster(beingAttacked);
drawStringInActionWindow(String.valueOf(String.valueOf(damage)).
concat(" damage!"), 2, 2);
int refX = MONSTER_POS[beingAttacked][0] + 11;
int refY = MONSTER_POS[beingAttacked][1] - 20;
for (int j = 12; j >= 0; j -= 3) {
GameCanvas.offScreen.setClip(0, 28, 120, 52);
GameCanvas.drawString("\u2592", refX, refY + j);
repaintIt();
pause(70);
GameCanvas.drawFillRect(refX, refY + j, 12, 12, 0xffffff);
GameCanvas.offScreen.setClip(0, 0, 120, 143);
}
monstersHP[beingAttacked] -= damage;
pause(200);
GameCanvas.drawFillRect(refX, refY, 12, 24, 0xffffff);
drawMonster(beingAttacked);
if (monstersHP[beingAttacked] < 0) {
player.setClip("monster_die.mmf");
for (int i = 0; i < 2; i++) {
drawMonster(beingAttacked);
repaintIt();
pause(100);
GameCanvas.drawFillRect(MONSTER_POS[beingAttacked][0],
MONSTER_POS[beingAttacked][1] - 10, 32,
42, 0xffffff);
repaintIt();
pause(100);
}
expGained += (checkY >> 2 & 0xff) * 10;
goldGained += (checkY >> 11 & 0x3f) * 10;
int randomNum = Math.abs(GameCanvas.ran.nextInt() % 11);
if (randomNum <= (info2 >> 20 & 7)) {
itemGained[numItemGained++] = info2 >> 23 & 0x7f;
} else
if (randomNum <= (info2 >> 20 & 7) + (info2 >> 10 & 7)) {
itemGained[numItemGained++] = info2 >> 13 & 0x7f;
} else
if (randomNum <=
(info2 >> 20 & 7) + (info2 >> 10 & 7) + (info2 >> 0 & 7)) {
itemGained[numItemGained++] = info2 >> 3 & 0x7f;
}
if (monsters[beingAttacked] == 0) {
monsters[beingAttacked] = -1;
} else {
monsters[beingAttacked] *= -1;
}
}
if (monsters[0] < 0 && monsters[1] < 0 && monsters[2] < 0) {
exp += expGained;
expGained = 0;
if (exp >
(long) ( (lv + 1) * (lv + 1) * (lv + 1) * (lv + 1) * (lv + 1))) {
player.setClip("resting.mmf");
clearActionWindow();
drawStringInActionWindow(String.valueOf(String.valueOf( (new
StringBuffer("Level up to ")).append(++lv).append("!"))), 1,
2);
drawStringInActionWindow("Attr Up!", 2, 2);
hp = GameCanvas.attribute[2] += 10;
mp = GameCanvas.attribute[3] += 5;
GameCanvas.attribute[0] += 2;
GameCanvas.attribute[1]++;
pause(1000);
drawStatusWin();
if (lv % 5 == 0) {
clearActionWindow();
drawStringInActionWindow(String.valueOf(String.valueOf("WeapnArmorShielRing Sell OutHeal YNo ATKDEFH PM PHlpItmStSaveToTop A1 A2 A3 A4 A5 A6 A7 A8 S1 S2 S3 A4 A5 A6 A7 A8 R1 R2 R3 R4 R5 R7 R8 R9 SmallsMedmSupersSmallsMedmSupersSmallsMedmSupersS1S2S3S4 S5 S6 S7 S8 S9 K1K2 K3 K4 K5 K6 K7 K8 K9 K10 .".
substring(GameCanvas.SKILL_INFO[lv / 5] >> 4 & 0x3ff,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -