📄 gamecanvas.java
字号:
{
default:
break;
case 0: // '\0'
HP += item_value[(itemCursor + itemTop) * 4 + 1];
if(HP > getMaxHP())
HP = (short)getMaxHP();
break ;
case 1: // '\001'
SP += item_value[(itemCursor + itemTop) * 4 + 1];
if(SP > getMaxSP())
SP = (short)getMaxSP();
break;
}
break;
case 1: // '\001'
if(itemCursor > 0)
{
itemCursor--;
break;
}
if(itemTop > 0)
{
itemTop--;
itemCursor = 0;
}
break;
case 6: // '\006'
if(itemCursor < 2)
{
itemCursor++;
break;
}
if(itemTop + itemCursor < 6)
{
itemTop++;
itemCursor = 2;
}
break;
}
}
/**
* 系统菜单
* @param g
*/
void drawSystemMenu(Graphics g)
{
int i = start_y - 50;
int j = start_x - 60;
for(int k = 0; k < 4; k++)
{
int l = k;
if(k == 2 && !isVibration)
l += 3;
else
if(k == 1 && !isSound)
l += 3;
drawEnglish(systemMenu[l], j + 15, i + 55 + k * 10, g);
}
drawCursor(0, j + 2, i + 56 + systemCursor * 10, g);
}
void keySystemMenu(int i)
{
switch(getGameAction(i))
{
default:
break;
case 8: // '\b'
switch(systemCursor)
{
case 0: // '\0'
save();
setFieldMessageBox(save_done, start_x - 50, start_y - 8, 100, 16, 3);
break;
case 1: // '\001'
isSound = !isSound;
saveOption();
break;
case 2: // '\002'
isVibration = !isVibration;
saveOption();
break;
case 3: // '\003'
RagMerchant.midlet.notifyDestroyed();
break;
}
break;
case 1: // '\001'
if(systemCursor > 0)
systemCursor--;
break;
case 6: // '\006'
if(systemCursor < 3)
systemCursor++;
break;
}
}
void drawUI(Graphics g)
{
int i = start_x - 64;
int j = (start_y + 64) - 20;
drawEnglish(uiText[0], i + 5, j, uiText[0].length, g);
drawNumber(HP, i + 5 + 30, j, g, 1);
drawNumber(getMaxHP(), i + 5 + 36, j, g, 0);
drawEnglish(uiText[1], i + 5, j + 11, uiText[0].length, g);
drawNumber(SP, i + 5 + 30, j + 11, g, 1);
drawNumber(getMaxSP(), i + 5 + 36, j + 11, g, 0);
drawEnglish(uiText[2], i + 5 + 54, j + 11, uiText[2].length, g);
drawNumber(LEVEL, i + 5 + 72, j + 11, g, 0);
drawEnglish(uiText[3], i + 5 + 54 + 1, j, uiText[3].length, g);
if(slots[0] != 0)
drawEnglish(skill_names[(slots[0] - 1) * 2], i + 5 + 54 + 3 + uiText[3].length * 6, j, g);
drawEnglish(uiText[4], i + 120, j + 11, uiText[4].length, g);
drawNumber(ZENY, i + 120, j + 11, g, 1);
drawEnglish(uiText[7], 3, 3, uiText[7].length, g);
}
public void run()
{
if(!isVibration)
try
{
Thread.sleep(100L);
}
catch(Exception exception) { }
repaint();
RagMerchant.display.callSerially(this);
turn++;
if(turn > 0x989680)
turn = 0;
}
public void drawImage(Image image, int i, int j, int k, int l, int i1, int j1,
Graphics g)
{
g.setClip(i, j, i1, j1);
g.drawImage(image, i - k, j - l, 0);
g.setClip(0, 0, getWidth(), getHeight());
}
public void drawImage(Image image, int i, int j, int k, int l, int i1, int j1,
int k1, Graphics g)
{
DirectGraphics directgraphics = DirectUtils.getDirectGraphics(g);
g.setClip(i, j, i1, j1);
if(k1 == 0)
directgraphics.drawImage(image, i - k, j - l, 0, k1);
else
directgraphics.drawImage(image, (i - image.getWidth()) + i1 + k, j - l, 0, k1);
g.setClip(0, 0, getWidth(), getHeight());
}
void drawChar(Graphics g)
{
Image image = imgs[14];
switch(action)
{
case 0: // '\0'
if((getMaxHP() > HP || getMaxSP() > SP) && turn % 30 == 0)
action = 9;
// fall through
case 1: // '\001'
image = imgs[14];
if(action == 0)
plAniTurn = 0;
else
switch(dir)
{
case 0: // '\0'
if(availableMoveTile(player_X, player_Y, -4, 0))
player_X -= 4;
break;
case 1: // '\001'
if(availableMoveTile(player_X, player_Y, 4, 0))
player_X += 4;
break;
case 2: // '\002'
if(availableMoveTile(player_X, player_Y, 0, -4))
player_Y -= 4;
break;
case 3: // '\003'
if(availableMoveTile(player_X, player_Y, 0, 4))
player_Y += 4;
break;
}
break;
case 4: // '\004'
image = imgs[15];
break;
case 5: // '\005'
image = imgs[14];
break;
case 6: // '\006'
image = imgs[15];
break;
case 7: // '\007'
image = imgs[15];
break;
case 8: // '\b'
image = imgs[15];
break;
case 9: // '\t'
image = imgs[14];
if(turn % 5 == 0)
{
if(getMaxHP() > HP)
HP += LEVEL;
if(getMaxSP() > SP)
SP += LEVEL;
if(getMaxHP() < HP)
HP = (short)getMaxHP();
if(getMaxSP() < SP)
SP = (short)getMaxSP();
if(getMaxHP() == HP && getMaxSP() == SP)
action = 0;
}
break;
}
if(action < 4)
{
drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 19 * (dir * 3 + plAniTurn), 0, 19, 29, g);
plAniTurn++;
if(plAniTurn > 2)
plAniTurn = 0;
} else
if(action == 4)
{
drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (dir * 2 + plAniTurn), 0, 27, 32, g);
if(plAniTurn == 1)
switch(dir)
{
case 0: // '\0'
drawImage(imgs[16], ((start_x - 64) + player_X) - 10 - 15, ((start_y - 65) + player_Y) - 20, 20 * dir, 0, 20, 25, g);
break;
case 1: // '\001'
drawImage(imgs[16], (((start_x - 64) + player_X) - 10) + 15, ((start_y - 65) + player_Y) - 20, 20 * dir, 0, 20, 25, g);
break;
case 2: // '\002'
drawImage(imgs[16], ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 25 - 10, 20 * dir, 0, 20, 25, g);
break;
case 3: // '\003'
drawImage(imgs[16], ((start_x - 64) + player_X) - 10, (((start_y - 65) + player_Y) - 25) + 10, 20 * dir, 0, 20, 25, g);
break;
}
plAniTurn++;
if(plAniTurn > 1)
{
isColledgeAttack();
plAniTurn = 0;
action = 0;
}
} else
if(action == 5)
{
drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 19 * (dir * 3), 0, 19, 29, g);
drawImage(imgs[17], ((start_x - 64) + player_X) - 21, ((start_y - 65) + player_Y) - 29 - 27, (plAniTurn % 2) * 42, 0, 42, 27, g);
plAniTurn++;
if(plAniTurn > 5)
{
isCrazyColledge(0);
plAniTurn = 0;
action = 0;
}
} else
if(action == 6)
{
drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (2 * plAniTurn + 1), 0, 27, 32, g);
switch(plAniTurn)
{
case 0: // '\0'
drawImage(imgs[18], ((start_x - 64) + player_X) - 12 - 14, ((start_y - 64) + player_Y) - 24, 24, 0, 24, 24, g);
break;
case 1: // '\001'
drawImage(imgs[18], (((start_x - 64) + player_X) - 12) + 14, ((start_y - 64) + player_Y) - 24, 0, 0, 24, 24, g);
break;
case 3: // '\003'
drawImage(imgs[18], ((start_x - 64) + player_X) - 12, ((start_y - 64) + player_Y) - 10, 48, 0, 24, 24, g);
break;
}
plAniTurn++;
if(plAniTurn > 3)
{
isCrazyColledge(1);
plAniTurn = 0;
action = 0;
}
} else
if(action == 7)
{
drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (8 + dir), 0, 27, 32, g);
plAniTurn++;
if(plAniTurn > 1)
{
plAniTurn = 0;
action = 0;
}
} else
if(action == 8)
{
drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (8 + plAniTurn), 0, 27, 32, g);
plAniTurn++;
if(plAniTurn > 4)
{
plAniTurn = 0;
action = 0;
HP = (short)(getMaxHP() / 2);
SP = (short)(getMaxSP() / 2);
EXP -= EXP / 10;
setVillageMode();
}
} else
if(action == 9)
drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 228, 0, 19, 29, g);
NextField();
}
void isCrazyColledge(int i)
{
for(int j = 0; j < 3; j++)
{
if(monsterAction[j] == -1 || Math.abs(player_X - monsterX[j]) >= 50 || Math.abs(player_Y - monsterY[j]) >= 50)
continue;
play(0);
int k = 0;
if(i == 0)
k = getSkillValue(0, false);
else
k = getSkillValue(2, false);
if(k <= 0)
k = 1;
addNumberEffect(k, monsterX[j], monsterY[j] - 20);
monsterHp[j] -= k;
if(monsterHp[j] < 0)
{
ZENY += getMonLevel(monsterNo[j]) * 3;
monsterAction[j] = -1;
putExp(getMonExp(monsterNo[j]));
getRandomItem(monsterNo[j]);
} else
{
monsterAction[j] = 0;
}
}
}
//-------------------------¥玩家攻击¥---------------------------
//只要在一定区域内 矩形区域 攻击都有效
void isColledgeAttack()//TODO
{
for(int i = 0; i < 3; i++)
{
if(monsterAction[i] == -1 || Math.abs(player_X - monsterX[i]) >= 20 || Math.abs(player_Y - monsterY[i]) >= 20)
continue;
play(0);
int j = 0; //攻击力
if(getRandom(100) < getCritical()) //暴击
{
j = getAtkMax(); //最大值
} else
{
j = getAtkMin() + (getAtkMax() - getAtkMin()) / 2;
j -= getMonDef(monsterNo[i]);
}
if(j < 0)
j = 1;
if(getRandom(100) < getMonFlee(monsterNo[i]))
{
addNumberEffect(0, monsterX[i], monsterY[i] - 20);
continue;
}
addNumberEffect(j, monsterX[i], monsterY[i] - 20);
monsterHp[i] -= j;
if(monsterHp[i] < 0)
{
ZENY += getMonLevel(monsterNo[i]) * 3;
monsterAction[i] = -1;
putExp(getMonExp(monsterNo[i]));
getRandomItem(monsterNo[i]);
} else
{
monsterAction[i] = 0;
}
}
}
void NextField()
{
if(MAPX == 0 && player_X < 5 && dir == 0 && action == 1)
{
current_state = 2;
setVillageMode();
return;
}
if(player_X < 0)
{
MAPX--;
player_X = 128;
initMon();
}
if(player_X > 128)
{
MAPX++;
player_X = 0;
initMon();
}
if(player_Y < 0)
{
MAPY--;
player_Y = 128;
initMon();
}
if(player_Y > 128)
{
MAPY++;
player_Y = 0;
initMon();
}
}
void no_keyChar(int i)
{
switch(getGameAction(i))
{
case 2: // '\002'
case 4:
case 6: // '\006
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -