2013-11-24 66 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); } 其他{ //敵人贏得了朋友。 }