⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 A action mobile game called A Last Warrior Great for use and already configuration to build with JB
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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 + -