📄 battle.java~11~
字号:
case 0: //骷髅怪
enimyX = enimy0PosFrame[enimyNowFrame][0]; //进攻时怪物移动,改变坐标
enimyY = enimy0PosFrame[enimyNowFrame][1];
g.setClip(enimyX, enimyY, 64, 64);
g.drawImage(img_Emeny, enimyX - enimy0Frame[enimyNowFrame] * 64, enimyY, 0);
break;
case 1: //铁人怪
enimyX = enimy1PosFrame[enimyNowFrame][0]; //进攻时怪物移动,改变坐标
enimyY = enimy1PosFrame[enimyNowFrame][1];
g.setClip(enimyX, enimyY, 64, 64);
g.drawImage(img_Emeny, enimyX - enimy1Frame[enimyNowFrame] * 64, enimyY, 0);
break;
case 2: //火龙怪
enimyX = enimy2PosFrame[enimyNowFrame][0]; //进攻时怪物移动,改变坐标
enimyY = enimy2PosFrame[enimyNowFrame][1];
g.setClip(enimyX, enimyY, 80, 80);
g.drawImage(img_Emeny, enimyX - enimy2Frame[enimyNowFrame] * 80, enimyY, 0);
break;
}
g.setClip(5, 0, 45, 45);
g.drawImage(img_Emeny, 5 - enimyID * 45, 0, 0); //画怪物头像
g.setClip(0, 0, 176, 208);
}
//-----------------------------
//画战斗菜单
//-----------------------------
public void DrawMenu(Graphics g)
{
if (canSelect) //该回合战斗画面还没结束时不能选择
{
switch (pointer)
{
case 1: //攻击
g.setClip(73, 168, 40, 20);
g.drawImage(mc.image.img_BattleMenu, 73, 168, 0);
g.setClip(0, 0, 176, 208);
break;
case 2: //特技
g.setClip(120, 168, 40, 20);
g.drawImage(mc.image.img_BattleMenu, 120 - 40, 168, 0);
g.setClip(0, 0, 176, 208);
break;
case 3: //道具
g.setClip(82, 188, 40, 20);
g.drawImage(mc.image.img_BattleMenu, 82 - 80, 188, 0);
g.setClip(0, 0, 176, 208);
break;
case 4: //逃跑
g.setClip(130, 188, 40, 20);
g.drawImage(mc.image.img_BattleMenu, 130 - 120, 188, 0);
g.setClip(0, 0, 176, 208);
break;
}
}
}
//-----------------------------
//绘图部分
//-----------------------------
public void paint(Graphics g)
{
//清屏
g.setColor(255, 255, 255);
g.fillRect(0, 0, 176, 208);
g.drawImage(mc.image.img_BattleBG, 0, 0, 0);
DrawMenu(g);
DrawBlood(g);
if (enimyAttack) //敌人先进攻时,先画主角,再画敌人,实现遮挡
{
DrawPlayer(g);
DrawEnimy(g);
}
else //否则就让主角遮挡敌人
{
DrawEnimy(g);
if (!isEscaped) //没逃跑时才画主角
DrawPlayer(g);
}
//显示提示信息
if (selectEscape && !canEscape) //选择了逃跑时,逃跑失败,提示信息
{
if (timeForShowText-- > 0)
{
g.setClip(0, 0, 176, 208);
g.setColor(textColor);
g.drawString(text, 30, 150, 0); //显示逃跑失败
}
else
{
enimyAttack = true; //敌人开始进攻
selectEscape = false;
}
}
else if (selectMagic && noMoreMP) //选择了特技,不够 MP 时,提示信息
{
if (timeForShowText-- > 0)
{
g.setClip(0, 0, 176, 208);
g.setColor(textColor);
g.drawString(text, 30, 150, 0); //显示不够MP时
}
else
{
selectMagic = false;
noMoreMP = false;
}
}
else if (enimyAttack) //当主角攻击时(显示提示信息时,已是敌人进攻时候)
{
if (timeForShowText-- > 0)
{
g.setClip(0, 0, 176, 208);
g.setColor(textColor);
g.drawString(text, 100, 80, 0); //显示“MISS”或扣除的生命值,或提示信息
}
}
else //当敌人攻击时(显示提示信息时,已是敌人进攻完了的时候)
{
if (timeForShowText-- > 0)
{
g.setClip(0, 0, 176, 208);
g.setColor(textColor);
g.drawString(text, 20, 70, 0); //显示“MISS”或扣除的生命值,或提示信息
}
}
if (succeed != 0 || isEscaped) //战斗胜利或失败时,或者已经逃跑时
{
int tmpX[] = {0, 0, 176, 176};
int tmpY[] = {0, 208, 208, 0};
tmpX[0] = 15;
tmpX[1] = 15;
tmpX[2] = 160;
tmpX[3] = 160;
tmpY[0] = 52;
tmpY[1] = 155;
tmpY[2] = 155;
tmpY[3] = 52;
}
if (succeed == 1) //战斗胜利
{
g.setClip(0, 0, 176, 208);
g.setColor(59, 186, 252);
g.drawString("Battle Success!", 36, 78, 0);
g.setColor(255, 255, 0);
g.drawString("Battle Success!", 36, 76, 0);
g.setColor(0, 255, 0);
g.drawString("Got Exp: " + gotExp, 50, 100, 0);
if (playerExp >= playerLv * 100) //达到升级所需经验值时
{
isLevelUp = true;
playerLv++; //升级!
playerExp = 0;
playerHP = playerLv * 100;
playerMaxHP = playerHP;
playerMP = playerLv * 50;
playerMaxMP = playerMP;
}
if (isLevelUp)
{
g.drawString("Level Up!!!", 50, 120, 0); //显示升级了!
}
else
{
int tmp = playerLv * 100 - playerExp;
g.drawString("Next LvUp Exp: " + tmp, 20, 120, 0); //显示还需多少经验值升级
}
timeBeforeExit--;
if (timeBeforeExit <= 0) //结束战斗
{
exitBattle = true;
isLevelUp = false;
}
}
else if (succeed == 2) //战斗失败
{
g.setClip(0, 0, 176, 208);
g.setColor(59, 186, 252);
g.drawString("Battle Failure...", 36, 78, 0);
g.setColor(255, 255, 0);
g.drawString("Battle Failure...", 34, 76, 0);
timeBeforeExit--;
if (timeBeforeExit <= 0)
{
//战斗失败,回到主菜单
timeBeforeExit = 0;
}
}
if (isEscaped) //如果逃跑成功时
{
g.setClip(0, 0, 176, 208);
g.setColor(59, 186, 252);
g.drawString("Escape Succeeded!", 20, 78, 0);
g.setColor(255, 255, 0);
g.drawString("Escape Succeeded!", 20, 76, 0);
g.setColor(0, 255, 0);
g.drawString("Got Exp: 0", 50, 100, 0);
int tmp = playerLv * 100 - playerExp;
g.drawString("Next LvUp Exp: " + tmp, 20, 120, 0); //显示还需多少经验值升级
timeBeforeExit--;
if (timeBeforeExit <= 0) //结束战斗
{
exitBattle = true;
}
}
}
//-----------------------------
// 返回是否战斗失败
//-----------------------------
public boolean isDead()
{
if (succeed == 2 && timeBeforeExit <= 0)
return true;
else
return false;
}
//-----------------------------
// 返回是否该离开战斗画面
//-----------------------------
public boolean isFinished()
{
return exitBattle;
}
//-----------------------------
// 返回主角级别
//-----------------------------
public int getPlayerLevel()
{
return playerLv;
}
//-----------------------------
// 返回主角生命值
//-----------------------------
public int getPlayerHP()
{
return playerHP;
}
//-----------------------------
// 返回主角体力值
//-----------------------------
public int getPlayerMP()
{
return playerMP;
}
//-----------------------------
// 返回主角经验值
//-----------------------------
public int getPlayerExp()
{
return playerExp;
}
//-----------------------------
//按键处理
//-----------------------------
public void keyPressed(int n)
{
if (!canSelect)
return;
switch (n)
{
//向上
case 3:
if (pointer == 3) //若光标在“道具”上,光标指去“攻击”
pointer = 1;
else if (pointer == 4) //若光标在“逃跑”上,光标指去“特技”
pointer = 2;
break;
//向下
case 1:
if (pointer == 1) //若光标在“攻击”上,光标指去“道具”
pointer = 3;
else if (pointer == 2) //若光标在“特技”上,光标指去“逃跑”
pointer = 4;
break;
//向左
case 4:
if (pointer == 2) //若光标在“特技”上,光标指去“攻击”
pointer = 1;
else if (pointer == 4) //若光标在“逃跑”上,光标指去“道具”
pointer = 3;
break;
//向右
case 2:
if (pointer == 1) //若光标在“攻击”上,光标指去“特技”
pointer = 2;
else if (pointer == 3) //若光标在“道具”上,光标指去“逃跑”
pointer = 4;
break;
//确定
case 5:
selectItem = pointer;
pointer = 1; //下一回合光标在“攻击”上
canSelect = false;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -