0

Java/android 仍然是新手,因此试图找出编写多级 if 语句的最佳方法。我正在尝试做的是一个需要检查玩家/NPC是否还活着的战斗系统。如果他们还活着,那么它将检查他们是否获得了重击。如果他们没有暴击,那么将查看他们是否击中或错过了。

combat = mydbhelper.getCombat();
startManagingCursor(combat);
if (playerCurHp == 0) {
    combat.moveToPosition(11);
    npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
} else {
    if (playerCritFlag.equals("Critical")) {
        combat.moveToPosition(2);
        playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
    } else {
        if (playerHitFlag.equals("Hit")) {
            combat.moveToPosition(1);
            playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
        if (playerHitFlag.equals("Miss")) {
            combat.moveToPosition(3);
            playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
    }
}           
if (npcCurHp == 0) {
    combat.moveToPosition(10);
    npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
} else {
    if (npcCritFlag.equals("Critical")) {
        combat.moveToPosition(5);
        npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
    } else {
        if (npcHitFlag.equals("Hit")) {
            combat.moveToPosition(4);
            npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
        if(npcHitFlag.equals("Miss")) {
            combat.moveToPosition(6);
            npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
    }
}   

是我正在使用的。当我将 if 语句全部分开时正在工作。但它会检查每一个并做我不需要的动作(如果他们击中,拉弦,如果暴击拉另一个,那么如果再次拉死)。当它找到匹配的“标志”时试图让它停止。当玩家击中我的掷骰时,它会将标志设置为“命中”,如下面的代码。

Random attackRandom = new Random();
int attackRoll = attackRandom.nextInt(100);
totalAtt = attackRoll + bonusAttack + weaponAtt + stanceAtt;
Random defensiveRandom = new Random();
int defenseRoll = defensiveRandom.nextInt(100);
npcDef = defenseRoll + npcDodge + npcBonusDodge;
if (totalAtt > npcDef) {
    playerHitFlag = "Hit";
    playerDamage();
} else {
    playerHitFlag = "Miss";
    npcAttack();
}

最后,它使用这些 playerCombatStory 和 npcCombatStory 字符串并使用它们来设置文本,以向玩家展示在战斗回合中发生了什么。

4

3 回答 3

2

我认为您正在寻找 else if 语句:

if (condition) {

}
else if (other_condition) {

}
else if (another_condition) {

}
else {
   // There can only be one else statement in a given if-else block
}
于 2012-04-15T23:23:23.483 回答
0

你的问题不清楚。但仍然可以提供有意义的建议。

就个人而言,我发现这段代码很难阅读。我认为随着您的逻辑变得更加复杂,将来很难维护。

我认为您需要将所做工作的逻辑与您的决定方式分开。将已完成的操作封装在 Command 对象中,并使用映射或状态机来查找要执行的操作。

于 2012-04-15T23:20:09.313 回答
0

我会将类型更改npcCritFlagintenum。然后使用switch语句case

这应该看起来更好,更容易理解

于 2012-04-16T05:36:33.463 回答