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 文字列を受け取り、それらを setText に使用して、その戦闘ターンで何が起こったかをプレイヤーに表示します。

4

3 に答える 3

2

私はあなたがelseifステートメントを探していると思います:

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

のタイプnpcCritFlagintorに変更しenumます。次に、switchステートメントを使用しますcase

これははるかに見栄えが良く、理解しやすいはずです

于 2012-04-16T05:36:33.463 に答える