2013-11-24 67 views
0

所以,这是在游戏环境中。我有2个ArrayLists,一个是你拥有的3个角色的派对,另一个是3个敌人角色的ArrayList。JAVA:交互ArrayLists?

我有一种叫做战斗的方法,它把你的队伍中的角色“a”和敌方的角色“b”放在战斗中。我有这个工作没有任何问题,但是当其中一个字符死在任一ArrayList中,目标必须切换。

例如: 1)字符a,b,c与Vs.角色d,e,f 2)我使用我的战斗方法,以便战斗d,b战斗e和c战斗f。一切都很好。 3)性格a失去了,现在我必须让角色b战斗d和e,而c继续战斗f。

关于如何去做这件事的任何想法?

+0

实现实际的敌人的名单,然后在一个模具传递列表中的下一个播放器,FightMap类每一个玩家的地图,他的实际的敌人,用一个id也许,我不知道你是如何实现这些球员的,他们有一个ID? – DGomez

+0

如果b没有完成战斗e,死亡,那么b死了? –

+0

如果没有至少一小部分代码来显示你的战斗是如何工作的,那么很难回答。你意味着战斗同时进行 - 如何?回合制的?并发线程?列表中的敌方物体即使在死亡时也需要坚持下去吗?等等 – Radiodef

回答

0

我只是在战斗()方法结束时删除死角,然后递归地运行战斗(),直到其中一个列表为空。

伪代码:

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); 
} 
0

List friends = new ArrayList(); 列出enemies = new ArrayList();

//填充列表。

//将对手映射到对方。

//如果elementA在朋友去世,而战斗elementX

friends.remove( “元件” 中);

//战斗

期间,如果(friends.size()> 0){// 元素X的新的敌方是 friends.get(1); } 其他{ //敌人赢得了朋友。 }