2012-04-15 157 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

這看起來更好,更容易理解