2016-07-03 64 views
0

我有一個方法createGame在服務器上創建一個遊戲的實例。我想要的是爲不同客戶創建另一個遊戲實例,但是當我創建另一個遊戲實例時,創建的第一個遊戲不再起作用。多個遊戲實例

下面是代碼:

private void createGame(){ 

    gameThread.add(new GameThread(playerList, controllers.get(controllerNumber), controllers.get(controllerNumber))); 

    gameThread.get(gameNumber).start(); 

    //just to shift the array of game 
    gameNumber++; 

    //shift the array of controller 
    controllerNumber++; 

    clientCounter = 0; 

    playerList.clear(); 

    controllers.add(new ControllerServerSide()); 
} 

爲什麼我不能在同一時間打兩場比賽,如果每一個都是在不同的線程?

編輯:

GameThread

public class GameThread extends Thread{ 

private Settings settings; 
private Game game; 

private static int gamesActive = 0; 

public GameThread(ArrayList<Player> playerList, Observer observer, ObservableInput controllerServer){ 

    ArrayList<Player> newPlayerList = new ArrayList<>(); 
    int size = playerList.size(); 

    for(int i = 0; i < size; i++){ 
     newPlayerList.add(playerList.remove(0)); 
    } 

    settings = new Settings("src/main/java/it/polimi/ingsw/ps05/gamelogic/mappa.xml", newPlayerList); 
    game = new Game(settings, gamesActive++, observer, controllerServer); 

    game.init(); 

} 

public void run(){ 
    game.play(); 
} 

}

回答

0

從你的代碼,目前還不清楚什麼是會員或他們做什麼..它真的很難理解你代碼是.. 但我會給它一個:

嘗試,看看是否有一個新的線程更改sa我反對作爲老遊戲線程。 或者 - 我認爲這可能是問題 - 你清除了玩家和控制器的數組/列表 - 這兩個遊戲都使用..所以第一個遊戲工作正常,但第二個清理這些列表/數組,並研究它裏面的東西 - 所以你的第一場比賽停止工作..檢查出來。

+0

對於缺少的代碼,我很抱歉,但是在這裏發佈它可能太多了。不過,我會編輯代碼,因爲我做了一些小改動,但問題是一樣的。 正如你所看到的,控制器的數組列表不會被清除,並且我爲每個遊戲採用不同的控制器。 關於playerList,它的元素被複制到GameThread中的新列表中,正如我現在在代碼中展示給你的,然後再清除它。 我也檢查過Debugger,這兩個GameThread有不同的playerList。 有些東西我不明白。 –

+0

創建第二個遊戲後,第一個遊戲會如何?它停止?它崩潰? Seong遊戲炒鍋嗎? –

+0

第二款遊戲有效,第一款遊戲線程在調試器中設置爲「正在運行」,但我無法給它任何輸入。 –