我只是在战斗()方法结束时删除死角,然后递归地运行战斗(),直到其中一个列表为空。
伪代码:
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