📄 cbattle.java
字号:
{
m_enimyNowFrame = 0;
}
switch (m_enimyID) //画怪物
{
case 0: //骷髅怪
m_enimyX = m_enimy0PosFrame[m_enimyNowFrame][0]; //进攻时怪物移动,改变坐标
m_enimyY = m_enimy0PosFrame[m_enimyNowFrame][1];
m_offG.setClip(m_enimyX, m_enimyY, 64, 64);
m_offG.drawImage(m_imEnimy, m_enimyX - m_enimy0Frame[m_enimyNowFrame] * 64, m_enimyY, 0);
break;
case 1: //铁人怪
m_enimyX = m_enimy1PosFrame[m_enimyNowFrame][0]; //进攻时怪物移动,改变坐标
m_enimyY = m_enimy1PosFrame[m_enimyNowFrame][1];
m_offG.setClip(m_enimyX, m_enimyY, 64, 64);
m_offG.drawImage(m_imEnimy, m_enimyX - m_enimy1Frame[m_enimyNowFrame] * 64, m_enimyY, 0);
break;
case 2: //火龙怪
m_enimyX = m_enimy2PosFrame[m_enimyNowFrame][0]; //进攻时怪物移动,改变坐标
m_enimyY = m_enimy2PosFrame[m_enimyNowFrame][1];
m_offG.setClip(m_enimyX, m_enimyY, 80, 80);
m_offG.drawImage(m_imEnimy, m_enimyX - m_enimy2Frame[m_enimyNowFrame] * 80, m_enimyY, 0);
break;
}
m_offG.setClip(5, 0, 45, 45);
m_offG.drawImage(m_imEnimyHead, 5 - m_enimyID * 45, 0, 0); //画怪物头像
m_offG.setClip(0, 0, 176, 208);
}
//-----------------------------
//画战斗菜单
//-----------------------------
public void DrawMenu()
{
if (m_canSelect) //该回合战斗画面还没结束时不能选择
{
switch (m_pointer)
{
case 1: //攻击
m_offG.setClip(73, 168, 40, 20);
m_offG.drawImage(m_imBattleMenu, 73, 168, 0);
m_offG.setClip(0, 0, 176, 208);
break;
case 2: //特技
m_offG.setClip(120, 168, 40, 20);
m_offG.drawImage(m_imBattleMenu, 120 - 40, 168, 0);
m_offG.setClip(0, 0, 176, 208);
break;
case 3: //道具
m_offG.setClip(82, 188, 40, 20);
m_offG.drawImage(m_imBattleMenu, 82 - 80, 188, 0);
m_offG.setClip(0, 0, 176, 208);
break;
case 4: //逃跑
m_offG.setClip(130, 188, 40, 20);
m_offG.drawImage(m_imBattleMenu, 130 - 120, 188, 0);
m_offG.setClip(0, 0, 176, 208);
break;
}
}
}
//-----------------------------
//绘图部分
//-----------------------------
public void paint()
{
//清屏
m_offG.setColor(255, 255, 255);
m_offG.fillRect(0, 0, 176, 208);
m_offG.drawImage(m_imBackground, 0, 0, 0);
DrawMenu();
DrawBlood();
if (m_enimyAttack) //敌人先进攻时,先画主角,再画敌人,实现遮挡
{
DrawPlayer();
DrawEnimy();
}
else //否则就让主角遮挡敌人
{
DrawEnimy();
if (!m_isEscaped) //没逃跑时才画主角
DrawPlayer();
}
//显示提示信息
if (m_selectEscape && !m_canEscape) //选择了逃跑时,逃跑失败,提示信息
{
if (m_timeForShowText-- > 0)
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(m_textColor);
m_offG.drawString(m_text, 30, 150, 0); //显示逃跑失败
}
else
{
m_enimyAttack = true; //敌人开始进攻
m_selectEscape = false;
}
}
else if (m_selectMagic && m_noMoreMP) //选择了特技,不够 MP 时,提示信息
{
if (m_timeForShowText-- > 0)
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(m_textColor);
m_offG.drawString(m_text, 30, 150, 0); //显示不够MP时
}
else
{
m_selectMagic = false;
m_noMoreMP = false;
}
}
else if (m_enimyAttack) //当主角攻击时(显示提示信息时,已是敌人进攻时候)
{
if (m_timeForShowText-- > 0)
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(m_textColor);
m_offG.drawString(m_text, 100, 80, 0); //显示“MISS”或扣除的生命值,或提示信息
}
}
else //当敌人攻击时(显示提示信息时,已是敌人进攻完了的时候)
{
if (m_timeForShowText-- > 0)
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(m_textColor);
m_offG.drawString(m_text, 20, 70, 0); //显示“MISS”或扣除的生命值,或提示信息
}
}
if (m_succeed != 0 || m_isEscaped) //战斗胜利或失败时,或者已经逃跑时
{
DirectGraphics dg = DirectUtils.getDirectGraphics(m_offG);
int tmpX[] = {0, 0, 176, 176};
int tmpY[] = {0, 208, 208, 0};
dg.fillPolygon(tmpX, 0, tmpY, 0, 4, 0x55000000); //背景变暗
tmpX[0] = 15;
tmpX[1] = 15;
tmpX[2] = 160;
tmpX[3] = 160;
tmpY[0] = 52;
tmpY[1] = 155;
tmpY[2] = 155;
tmpY[3] = 52;
dg.fillPolygon(tmpX, 0, tmpY, 0, 4, 0x99004E98); //中间蓝色“画布”
}
if (m_succeed == 1) //战斗胜利
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(59, 186, 252);
m_offG.drawString("Battle Success!", 36, 78, 0);
m_offG.setColor(255, 255, 0);
m_offG.drawString("Battle Success!", 36, 76, 0);
m_offG.setColor(0, 255, 0);
m_offG.drawString("Got Exp: " + m_gotExp, 50, 100, 0);
if (m_playerExp >= m_playerLv * 100) //达到升级所需经验值时
{
m_isLevelUp = true;
m_playerLv++; //升级!
m_playerExp = 0;
m_playerHP = m_playerLv * 100;
m_playerMaxHP = m_playerHP;
m_playerMP = m_playerLv * 50;
m_playerMaxMP = m_playerMP;
}
if (m_isLevelUp)
{
m_offG.drawString("Level Up!!!", 50, 120, 0); //显示升级了!
}
else
{
int tmp = m_playerLv * 100 - m_playerExp;
m_offG.drawString("Next LvUp Exp: " + tmp, 20, 120, 0); //显示还需多少经验值升级
}
m_timeBeforeExit--;
if (m_timeBeforeExit <= 0) //结束战斗
{
m_exitBattle = true;
m_isLevelUp = false;
}
}
else if (m_succeed == 2) //战斗失败
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(59, 186, 252);
m_offG.drawString("Battle Failure...", 36, 78, 0);
m_offG.setColor(255, 255, 0);
m_offG.drawString("Battle Failure...", 34, 76, 0);
m_timeBeforeExit--;
if (m_timeBeforeExit <= 0)
{
//战斗失败,回到主菜单
m_timeBeforeExit = 0;
}
}
if (m_isEscaped) //如果逃跑成功时
{
m_offG.setClip(0, 0, 176, 208);
m_offG.setColor(59, 186, 252);
m_offG.drawString("Escape Succeeded!", 20, 78, 0);
m_offG.setColor(255, 255, 0);
m_offG.drawString("Escape Succeeded!", 20, 76, 0);
m_offG.setColor(0, 255, 0);
m_offG.drawString("Got Exp: 0", 50, 100, 0);
int tmp = m_playerLv * 100 - m_playerExp;
m_offG.drawString("Next LvUp Exp: " + tmp, 20, 120, 0); //显示还需多少经验值升级
m_timeBeforeExit--;
if (m_timeBeforeExit <= 0) //结束战斗
{
m_exitBattle = true;
}
}
}
//-----------------------------
// 返回是否战斗失败
//-----------------------------
public boolean isDead()
{
if (m_succeed == 2 && m_timeBeforeExit <= 0)
return true;
else
return false;
}
//-----------------------------
// 返回是否该离开战斗画面
//-----------------------------
public boolean isFinished()
{
return m_exitBattle;
}
//-----------------------------
// 返回主角级别
//-----------------------------
public int getPlayerLevel()
{
return m_playerLv;
}
//-----------------------------
// 返回主角生命值
//-----------------------------
public int getPlayerHP()
{
return m_playerHP;
}
//-----------------------------
// 返回主角体力值
//-----------------------------
public int getPlayerMP()
{
return m_playerMP;
}
//-----------------------------
// 返回主角经验值
//-----------------------------
public int getPlayerExp()
{
return m_playerExp;
}
//-----------------------------
//按键处理
//-----------------------------
public void keyPressed(int n)
{
if (!m_canSelect)
return;
switch (n)
{
//向上
case Canvas.UP:
if (m_pointer == 3) //若光标在“道具”上,光标指去“攻击”
m_pointer = 1;
else if (m_pointer == 4) //若光标在“逃跑”上,光标指去“特技”
m_pointer = 2;
break;
//向下
case Canvas.DOWN:
if (m_pointer == 1) //若光标在“攻击”上,光标指去“道具”
m_pointer = 3;
else if (m_pointer == 2) //若光标在“特技”上,光标指去“逃跑”
m_pointer = 4;
break;
//向左
case Canvas.LEFT:
if (m_pointer == 2) //若光标在“特技”上,光标指去“攻击”
m_pointer = 1;
else if (m_pointer == 4) //若光标在“逃跑”上,光标指去“道具”
m_pointer = 3;
break;
//向右
case Canvas.RIGHT:
if (m_pointer == 1) //若光标在“攻击”上,光标指去“特技”
m_pointer = 2;
else if (m_pointer == 3) //若光标在“道具”上,光标指去“逃跑”
m_pointer = 4;
break;
//确定
case Canvas.FIRE:
m_selectItem = m_pointer;
m_pointer = 1; //下一回合光标在“攻击”上
m_canSelect = false;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -