📄 gamecanvas.java
字号:
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 + -