我只是在戰鬥()方法結束時刪除死角,然後遞歸地運行戰鬥(),直到其中一個列表爲空。
僞代碼:
protected void combat(List<Character> heroes, List<Character> enemies) {
if (heroes.isEmpty() || enemies.isEmpty()) {
//one of the parties wins
return;
}
List<Pair<Character, Character>> vs = new LinkedList<>();
int i = 0;
while (i< heroes.length() && i< enemies.length()) {
vs.add(heroes.get(i), enemies.get(i));
++i;
}
for (Pair<Character, Character> fight : vs) {
//figure out the loser
Character loser = fight(vs.getFirst(), vs.getSecond();
if (loser.isEnemy()) {
enemies.remove(loser);
} else {
heroes.remove(loser);
}
}
combat(heroes, enemies);
}
實現實際的敵人的名單,然後在一個模具傳遞列表中的下一個播放器,FightMap類每一個玩家的地圖,他的實際的敵人,用一個id也許,我不知道你是如何實現這些球員的,他們有一個ID? – DGomez
如果b沒有完成戰鬥e,死亡,那麼b死了? –
如果沒有至少一小部分代碼來顯示你的戰鬥是如何工作的,那麼很難回答。你意味着戰鬥同時進行 - 如何?回合制的?併發線程?列表中的敵方物體即使在死亡時也需要堅持下去嗎?等等 – Radiodef