2012-04-15 160 views
0

Java/android仍然是一个新手,因此试图找出编写多级if语句的最佳方法。我想要做的是一个战斗系统,需要检查如果player/npc是活着的。如果他们还活着,它会检查他们是否获得了致命一击。如果他们没有重击,那么会看到他们是否击中或错过。If语句中的语句else

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串并使用它们的setText显示发生了什么作战的那个回合玩家结束。

+0

您的代码将是一个更容易阅读和遵守,如果你使用一个标准的缩进风格。通常情况下,结束块的'}'总是自己排成一行。 – 2012-04-15 23:17:39

+0

这里没有问题。如果你想要改善工作代码的建议,请尝试codereview.se – 2012-04-15 23:21:36

回答

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 
} 
+0

泰乔这是我想知道的。对不起,所有其他问题都没有解决。试图不厌倦了不需要的细节。 – maebe 2012-04-15 23:39:40

0

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

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

我认为你需要将你完成的逻辑与你的决定分开。封装Command对象中的内容,并使用映射或状态机查找要执行的操作。

0

我的npcCritFlag的类型更改为intenum。然后使用switch语句case

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