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

📄 gamecanvas.java

📁 A action mobile game called A Last Warrior Great for use and already configuration to build with JB
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        isMoving = true;
        characDirection = 1;
      }
      if (key == -4) {
        isMoving = true;
        characDirection = 3;
      }
      if (key == -1) {
        isMoving = true;
        characDirection = 2;
      }
      if (key == -2) {
        isMoving = true;
        characDirection = 0;
      }
    } else
    if (stateInGame == 80) {
      if (stateInBattle == 0) {
        curPosInActWindow[1][0] = curPosInActWindow[0][0];
        curPosInActWindow[1][1] = curPosInActWindow[0][1];
        if (key == -3 || key == -4) {
          curPosInActWindow[0][0] = 1 - curPosInActWindow[0][0];
          drawCursorInActionWindow();
          player.setClip(s_move_cursor);
        } else
        if (key == -1 || key == -2) {
          curPosInActWindow[0][1] = 1 - curPosInActWindow[0][1];
          drawCursorInActionWindow();
          player.setClip(s_move_cursor);
        } else
        if (key == 32) {
          itemSelected();
        }
      } else
      if (stateInBattle == 2) {
        for (int i = 0; i < 3; i++) {
          if (key == i + 1 && monsters[i] >= 0) {
            beingAttacked = i;
            stateInBattle = 3;
          }
        }

        if (key == 42) {
          drawFillRect(0, (MONSTER_POS[0][1] + 32) - 4, 128, 20, 0xffffff);
          stateInBattle = 0;
          player.setClip(s_cancel);
        }
      }
    } else
    if (inMenu) {
      if (key == -1) {
        menuCursorPos--;
        if (menuCursorPos < 0) {
          if (menuPagePos != 0) {
            menuPagePos--;
            menuCursorPos = maxMenuNb - 1;
          } else {
            menuPagePos = (totalMenuNb - 1) / maxMenuNb;
            menuCursorPos = (totalMenuNb - 1) % maxMenuNb;
          }
          drawMenu(true);
        }
        drawMenuCursor();
        player.setClip(s_move_cursor);
      } else
      if (key == -2) {
        menuCursorPos++;
        if (menuCursorPos + menuPagePos * maxMenuNb == totalMenuNb) {
          menuPagePos = 0;
          menuCursorPos = 0;
          drawMenu(true);
        } else
        if (menuCursorPos == maxMenuNb) {
          menuPagePos++;
          menuCursorPos = 0;
          drawMenu(true);
        }
        drawMenuCursor();
        player.setClip(s_move_cursor);
      }
      if (key == 42) {
        player.setClip(s_cancel);
        cancelMenu();
      } else
      if (key == 32 || afterSleep) {
        player.setClip(s_click);
        itemSelected();
      }
    } else
    if (stateInGame == 33) {
      afterSleep = false;
      drawStreet();
    } else
    if (!throughMenu) {
      returnToGame();
    } else {
      drawGameMenu();
    }
  }

  public void keyReleased(int key) {
    isMoving = false;
  }

  public void itemSelected() {
    int selectedNb = menuPagePos * maxMenuNb + menuCursorPos;
    if (selectedNb == totalMenuNb - 1 && stateInMenu == 100 &&
        stateInGame != 80 && stateInGame != 81 && stateInGame != 82 &&
        stateInGame != 50) {
      inMenu = false;
      characDirection = 0;
      drawStreet();
    } else
    if (stateInGame == 50 && stateInMenu == 100) {
      switch (selectedNb) {
        case 0: // '\0'
          inMenu = false;
          viewHelp();
          break;

        case 1: // '\001'
          viewItem();
          break;

        case 2: // '\002'
          inMenu = false;
          viewStatus();
          break;

        case 3: // '\003'
          viewSkill();
          break;

        case 4: // '\004'
          cancelMenu();
          break;
      }
    } else
    if (stateInGame == 140) {
      int selItemName = itemName[selectedNb];
      makeItemChart(haveItem, haveItemNb, selectedNb);
      if (itemName.length != 0) {
        drawRoundBox(15, 23, 105, 87, 0xffffff);
        drawRoundBox(0, 121, 120, 20, 0xffffff);
        if (selectedNb < 4) {
          drawString(selItemName, 32, 27);
          drawLine(17, 41, 118, 41, 0);
          stateInGame = 70;
        } else {
          stateInGame = 71;
        }
        setMenuInfo(stateInGame, itemName);
        drawMenu(false);
      } else {
        viewItem();
      }
    } else
    if (stateInGame == 70) {
      int changePos = 0;
      int i = 0;
      do {
        if (i >= haveItemNb) {
          break;
        }
        if (itemInfo[selectedNb] == haveItem[i]) {
          changePos = i;
          break;
        }
        i++;
      } while (true);
      int type = itemInfo[selectedNb] / 10;
      for (int ii = 0; ii < attribute.length; ii++) {
        int attr = (ITEMS[itemInfo[selectedNb] / 10][itemInfo[selectedNb] %
                    10][1] >> 6 * ii & 0x3f) * attrMul[ii];
        attr -=
            (ITEMS[dressedItem[type] / 10][dressedItem[type] % 10][1] >> 6 * ii &
             0x3f) * attrMul[ii];
        attribute[ii] += attr;
      }

      int tempItem = dressedItem[type];
      dressedItem[type] = haveItem[changePos];
      haveItem[changePos] = tempItem;
      viewItem();
    } else
    if (stateInGame == 80) {
      if (curPosInActWindow[0][0] == 0 && curPosInActWindow[0][1] == 0) {
        int i = 0;
        do {
          if (i >= 3) {
            break;
          }
          if (monsters[i] >= 0) {
            beingAttacked = i;
            break;
          }
          i++;
        } while (true);
        stateInBattle = 3;
      } else
      if (curPosInActWindow[0][0] == 1 && curPosInActWindow[0][1] == 0) {
        makeSkillList();
        if (itemName.length == 0) {
          return;
        }
        stateInGame = 82;
        drawRoundBox(1, 24, 118, 88, 0xffffff);
        drawLine(3, 94, 118, 94, 0);
        setMenuInfo(82, itemName);
        drawMenu(false);
      } else
      if (curPosInActWindow[0][0] == 0 && curPosInActWindow[0][1] == 1) {
        makeItemChart(haveItem, haveItemNb, 4);
        if (itemName.length == 0) {
          return;
        }
        stateInGame = 81;
        drawRoundBox(1, 24, 118, 88, 0xffffff);
        drawLine(3, 95, 118, 95, 0);
        setMenuInfo(81, itemName);
        drawMenu(false);
      } else
      if (curPosInActWindow[0][0] == 1 && curPosInActWindow[0][1] == 1) {
        if (nowDungeonFloor <= 4 && Math.abs(ran.nextInt() % 100) < 30) {
          stateInGame = 20;
          makeDungeon();
          player.setClip("escape_success.mmf");
          return;
        }
        clearActionWindow();
        drawStringInActionWindow("(-.-;) Failed", 1, 1);
        stateInBattle = 6;
      }
    } else
    if (stateInGame == 81 || stateInGame == 71) {
      keyEnabled = false;
      potionNb = selectedNb;
      usePotionState = stateInGame;
      stateInGame = 90;
    } else
    if (stateInGame == 82) {
      if (mp < (SKILL_INFO[selectedNb] >> 14 & 0x1f) * 5) {
        clearActionWindow();
        drawStringInActionWindow("Lack of MP!", 1, 1);
        pause(500);
        stateInGame = 80;
        stateInBattle = 0;
        drawFighting();
      } else {
        int i = 0;
        do {
          if (i >= 3) {
            break;
          }
          if (monsters[i] >= 0) {
            beingAttacked = i;
            break;
          }
          i++;
        } while (true);
        mp -= (SKILL_INFO[selectedNb] >> 14 & 0x1f) * 5;
        drawFighting();
        stateInGame = 80;
        stateInBattle = 4;
      }
    } else
    if (stateInMenu == 100) {
      switch (stateInGame) {
        case 33: // '!'
          stateInGame = 41;
          keyEnabled = false;
          break;

        case 31: // '\037'
        case 32: // ' '
          if (stateInGame == 32) {
            if (selectedNb == 0) {
              stateInMenu = 110;
              buyItemType = 4;
            } else {
              stateInMenu = 120;
            }
          } else
          if (selectedNb < 4) {
            stateInMenu = 110;
            buyItemType = selectedNb;
          } else {
            stateInMenu = 120;
          }
          if (stateInMenu == 110) {
            makeItemChart(storeItem, storeItem.length, buyItemType);
            setMenuInfo(0, itemName);
          } else {
            if (haveItemNb < 1) {
              stateInMenu = 100;
              clearStoreMessage();
              drawString("You have", 6, 105);
              drawString("no item.", 6, 118);
              repaintIt();
              return;
            }
            itemName = new int[haveItemNb];
            for (int i = 0; i < haveItemNb; i++) {
              itemName[i] = (ITEMS[haveItem[i] / 10][haveItem[i] % 10][0] >> 7 &
                             0xfff) * 100 +
                  (ITEMS[haveItem[i] / 10][haveItem[i] % 10][0] & 0x7f);

            }
            itemInfo = haveItem;
            setMenuInfo(0, itemName);
          }
          drawMenu(true);
          break;
      }
    } else
    if (stateInMenu == 110) {
      if (gold < itemGold) {
        clearStoreMessage();
        drawString("Sorry, short", 6, 105);
        drawString(" of money.", 6, 118);
        repaintIt();
      } else {
        gold -= itemGold;
        if (haveItemNb < haveItem.length) {
          haveItem[haveItemNb] = itemInfo[selectedNb];
          haveItemNb++;
          enterHouse();
        } else {
          clearStoreMessage();
          drawString("No more", 6, 105);
          drawString(" items.", 6, 118);
          repaintIt();
        }
      }
    } else {
      gold += itemGold;
      for (int i = selectedNb; i < haveItemNb - 1; i++) {
        haveItem[i] = haveItem[i + 1];

      }
      haveItem[--haveItemNb] = haveItem[haveItemNb] = 0;
      enterHouse();
    }
  }

  public boolean checkPosInDungeon(int x1, int x2, int y1, int y2) {
    int dungeonRow = (nowDungeonNb / 10) * 4;
    int dungeonCol = (nowDungeonNb % 10) * 4;
    if (y1 + dungeonRow == downStairRow && x1 + dungeonCol == downStairCol ||
        y2 + dungeonRow == downStairRow && x2 + dungeonCol == downStairCol) {
      changeDungeonFloor( -1);
    } else
    if (y1 + dungeonRow == upStairRow && x1 + dungeonCol == upStairCol ||
        y2 + dungeonRow == upStairRow && x2 + dungeonCol == upStairCol) {
      changeDungeonFloor(1);
    } else {
      boolean check1 = (DUNGEON_INFO[dungeonTypeNb][y1 + dungeonRow] >>
                        19 - (x1 + dungeonCol) & 1) == 1;
      boolean check2 = (DUNGEON_INFO[dunge

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -