📄 gamecanvas.java
字号:
break;
case 70: // 'F'
menuStartX = 20;
menuStartY = 45;
menuOffset = 15;
maxMenuNb = 4;
menuWidth = 93;
break;
case 71: // 'G'
menuStartX = 20;
menuStartY = 29;
menuOffset = 15;
maxMenuNb = 5;
menuWidth = 93;
break;
case 81: // 'Q'
menuStartX = 5;
menuStartY = 28;
menuOffset = 16;
maxMenuNb = 4;
menuWidth = 107;
break;
case 82: // 'R'
menuStartX = 5;
menuStartY = 28;
menuOffset = 16;
maxMenuNb = 4;
menuWidth = 107;
break;
}
}
public void drawGameMenu() {
throughMenu = true;
stateInGame = 50;
stateInMenu = 100;
inMenu = true;
drawStatusWin();
drawRoundBox(0, 24, 120, 119, 0xffffff);
setMenuInfo(50, gameMenu);
drawString("Hot", 83, 28);
for (int i = 1; i <= 2; i++) {
drawString("Soft".concat(String.valueOf(String.valueOf(i))), 80,
menuStartY + i * menuOffset);
}
drawMenu(false);
}
public void drawMenu(boolean clearScreen) {
inMenu = true;
if (itemName.length == 0) {
return;
}
if (clearScreen) {
drawFillRect(menuStartX, menuStartY, menuWidth, menuOffset * maxMenuNb,
0xffffff);
}
int endNb = Math.min(maxMenuNb * (menuPagePos + 1), totalMenuNb);
for (int i = maxMenuNb * menuPagePos; i < endNb; i++) {
drawString(itemName[i], menuStartX + 12,
menuStartY + menuOffset * (i - maxMenuNb * menuPagePos));
}
if (endNb < itemName.length) {
drawClipImage(pointerImg, (menuStartX + menuWidth) - 7,
menuStartY + menuOffset * (maxMenuNb - 1) + 4, 7, 5, 0, 5);
}
if (menuPagePos != 0) {
drawClipImage(pointerImg, (menuStartX + menuWidth) - 7, menuStartY + 4, 7,
5, 0, 0);
}
drawMenuCursor();
}
public void drawMenuCursor() {
drawFillRect(menuStartX, menuStartY + menuOffset * menuCursorPrePos, 10, 12,
0xffffff);
menuCursorPrePos = menuCursorPos;
drawClipImage(pointerImg, menuStartX + 3,
menuStartY + menuOffset * menuCursorPos + 2, 7, 9, 0, 10);
int selectedItem = menuCursorPos + menuPagePos * maxMenuNb;
if (stateInMenu == 120 || stateInMenu == 110 || stateInGame / 10 == 7 ||
stateInGame == 81) {
if (stateInGame / 10 == 7) {
drawFillRect(5, 126, 110, 12, 0xffffff);
} else
if (stateInGame == 81) {
drawFillRect(5, 96, 110, 12, 0xffffff);
} else {
clearStoreMessage();
itemGold = (ITEMS[itemInfo[selectedItem] / 10][itemInfo[selectedItem] %
10][0] >> 19 & 0xfff) * 100;
if (stateInMenu == 120) {
itemGold /= 5;
}
drawString(String.valueOf(String.valueOf( (new StringBuffer("GOLD : ")).
append(itemGold).append(" G"))),
6, 105);
}
int count = 0;
for (int i = 0; i < attribute.length; i++) {
int attr = (ITEMS[itemInfo[selectedItem] / 10][itemInfo[selectedItem] %
10][1] >> 6 * i & 0x3f) * attrMul[i];
if (attr != 0) {
if (stateInGame / 10 == 7) {
drawString(String.valueOf(String.valueOf( (new StringBuffer(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(attributeName[i] / 100,
attributeName[i] / 100 +
attributeName[i] % 100))))).
append(" +").append(attr))), 10 + 50 * count, 126);
} else
if (stateInGame == 81) {
drawString(String.valueOf(String.valueOf( (new StringBuffer(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(attributeName[i] / 100,
attributeName[i] / 100 +
attributeName[i] % 100))))).
append(" +").append(attr))), menuStartX + 50 * count, 96);
} else {
drawString(String.valueOf(String.valueOf( (new StringBuffer(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(attributeName[i] / 100,
attributeName[i] / 100 +
attributeName[i] % 100))))).
append(" +").append(attr))), 24, 117 + 12 * count);
}
count++;
}
}
} else
if (stateInGame == 82) {
drawFillRect(5, 96, 108, 12, 0xffffff);
drawString(String.valueOf(String.valueOf( (SKILL_INFO[selectedItem] >> 14 &
0x1f) * 5)).concat(
"MP required"), menuStartX, 96);
}
repaintIt();
}
public void changeDungeonFloor(int change) {
isMoving = false;
nowDungeonFloor += change;
if (nowDungeonFloor < 0) {
characYPos = 118;
characXPos = dungeonX[nbOfDungeon] + 5;
drawDungeonEntrance();
} else {
makeDungeonFloor( (change + 1) / 2);
makeDungeon();
}
}
public void makeDungeonFloor(int up) {
int decide = 0;
if (nowDungeonFloor != 3) {
int randomNb = Math.abs(ran.nextInt());
dungeonTypeNb = randomNb % (DUNGEON_INFO.length - 1);
randomNb = Math.abs(ran.nextInt());
decide = randomNb % 2;
} else {
dungeonTypeNb = DUNGEON_INFO.length - 1;
decide = 1;
}
upStairRow = DUNGEON_GATE[dungeonTypeNb][decide] >> 9 & 0x1f;
upStairCol = DUNGEON_GATE[dungeonTypeNb][decide] >> 4 & 0x1f;
downStairRow = DUNGEON_GATE[dungeonTypeNb][ (decide + 1) % 2] >> 9 & 0x1f;
downStairCol = DUNGEON_GATE[dungeonTypeNb][ (decide + 1) % 2] >> 4 & 0x1f;
if (up == 1) {
nowDungeonNb = (downStairRow / 4) * 10 + downStairCol / 4;
} else {
nowDungeonNb = (upStairRow / 4) * 10 + upStairCol / 4;
}
characXPos = 30 * (DUNGEON_GATE[dungeonTypeNb][ (decide + up) % 2] & 3) + 4;
characYPos = 23 +
30 * (DUNGEON_GATE[dungeonTypeNb][ (decide + up) % 2] >> 2 & 3) + 4;
repaintIt();
}
public void makeDungeon() {
clearScreen();
drawStatusWin();
offScreen.setClip(0, 23, 120, 120);
int dungeonRow = (nowDungeonNb / 10) * 4;
int dungeonCol = (nowDungeonNb % 10) * 4;
for (int i = dungeonRow; i < dungeonRow + 4; i++) {
label0:
for (int j = dungeonCol; j < dungeonCol + 4; j++) {
if ( (DUNGEON_INFO[dungeonTypeNb][i] >> 19 - j & 1) != 0) {
continue;
}
int k = 0;
do {
if (k >= 2) {
continue label0;
}
for (int l = 0; l < 2; l++) {
drawImage(30 * (j - dungeonCol) + 15 * l,
23 + 30 * (i - dungeonRow) + 15 * k, tree2);
}
k++;
} while (true);
}
}
for (int i = dungeonRow; i < dungeonRow + 4; i++) {
for (int j = dungeonCol; j < dungeonCol + 4; j++) {
if ( (DUNGEON_INFO[dungeonTypeNb][i] >> 19 - j & 1) != 0) {
if (i != 0 && (DUNGEON_INFO[dungeonTypeNb][i - 1] >> 19 - j & 1) == 0) {
for (int k = 0; k < 2; k++) {
drawImage(30 * (j - dungeonCol) + 15 * k,
(23 + 30 * (i - dungeonRow)) - 15, tree1);
}
}
if (i != 19 &&
(DUNGEON_INFO[dungeonTypeNb][i + 1] >> 19 - j & 1) == 0) {
for (int k = 0; k < 2; k++) {
drawImage(30 * (j - dungeonCol) + 15 * k,
23 + 30 * ( (i - dungeonRow) + 1), tree1);
}
}
if (j != 0 &&
(DUNGEON_INFO[dungeonTypeNb][i] >> (19 - j) + 1 & 1) == 0) {
for (int k = 0; k < 2; k++) {
drawImage(30 * (j - dungeonCol) - 15,
23 + 30 * (i - dungeonRow) + 15 * k, tree1);
}
}
if (i != 19 &&
(DUNGEON_INFO[dungeonTypeNb][i] >> 19 - j - 1 & 1) == 0) {
for (int k = 0; k < 2; k++) {
drawImage(30 * ( (j - dungeonCol) + 1),
23 + 30 * (i - dungeonRow) + 15 * k, tree1);
}
}
}
if ( (upStairRow != i || upStairCol != j) &&
(downStairRow != i || downStairCol != j)) {
continue;
}
for (int k = 0; k < 4; k++) {
drawFillRect(30 * (j - dungeonCol) + 3,
23 + 30 * (i - dungeonRow) + 4 + 6 * k, 24, 4, 0x666666);
}
}
}
drawCharacter(characDirection);
drawFillRect(0, 128, 17, 14, 0xffffff);
drawString(String.valueOf(String.valueOf( (new StringBuffer(String.valueOf(
String.valueOf(nowDungeonFloor + 1)))).append("th"))), 1, 129);
offScreen.setClip(0, 0, 120, 143);
}
public void dungeonCleared(int stage) {
if (stage < 3) {
canDungeon = Math.max(stage + 1, canDungeon);
characYPos = 118;
characXPos = dungeonX[nbOfDungeon] + 5;
drawDungeonEntrance();
} else {
nowVillageNb = 1;
drawStreet();
}
repaintIt();
}
public void drawStreet() {
stateInGame = 10;
characYPos = 110;
drawFillRect(0, 23, 120, 60, rgbPixel(208, 255, 255));
drawFillRect(0, 95, 120, 48, rgbPixel(208, 216, 0));
drawCharacter(characDirection);
drawHouse1(76, nowVillageNb - 1);
drawStatusWin();
repaintIt();
}
public void drawDungeonEntrance() {
stateInGame = 10;
clearScreen();
drawFillRect(0, 23, 120, 60, rgbPixel(208, 255, 255));
drawFillRect(0, 95, 120, 48, rgbPixel(208, 216, 0));
drawStatusWin();
for (int i = 0; i < 8; i++) {
drawImage(i * 15, 63, dunbrick2);
}
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 3; j++) {
drawImage(i * 10, 71 + 10 * j, dunbrick1);
}
}
for (int i = 0; i <= canDungeon; i++) {
drawImage(dungeonX[i] + 4, 80, dungate);
}
characYPos = 110;
drawCharacter(characDirection);
repaintIt();
}
public void changePlace(int direction) {
if (nowVillageNb + direction >= 1 && nowVillageNb + direction <= 4) {
nowVillageNb += direction;
characXPos = direction <= 0 ? 100 : 0;
if (nowVillageNb == 4) {
drawDungeonEntrance();
} else {
drawStreet();
}
} else {
characXPos -= 3 * direction;
}
}
public void enterHouse() {
stateInGame = 30 + nowVillageNb;
stateInMenu = 100;
clearScreen();
drawStatusWin();
drawRoundBox(0, 24, 120, 65, 0xffffff);
drawRoundBox(0, 102, 120, 41, rgbPixel(208, 255, 255));
drawStringRight(String.valueOf(String.valueOf(gold)).concat(" G"), 116, 90);
switch (stateInGame) {
default:
break;
case 33: // '!'
if (afterSleep) {
drawString("Thank you.", 4, 105);
} else {
setMenuInfo(0, innMenu);
drawMenu(false);
drawString("(^.^) Wanna", 4, 105);
drawString("Rest?", 4, 118);
}
break;
case 31: // '\037'
case 32: // ' '
setMenuInfo(0, storeMenu[stateInGame - 31]);
drawMenu(false);
drawString("(^.^) May I", 4, 105);
drawString("help you?", 4, 118);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -