2016-07-03 4 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()); 
} 

なぜ私は、同時に2つのゲームをプレイできないのですか?

EDIT:あなたのコードから

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

メンバーまたは何彼らは何であるかは明らかではない..です何をあなたの理解することは本当に難しいですコードはありません。 しかし、私はショットを与えるでしょう:

新しいスレッドの1つがsaを変更するかどうか試してみてください私は古いゲームのスレッドとしてオブジェクト。 または - それは問題かもしれないと思う - プレイヤーとコントローラーの配列/リストをクリアする - 両方のゲームが使用する..最初のゲームはうまくいくが、2番目のプレイヤーはリスト/アレイをきれいにしてそこにあるものを捨てるあなたの最初のゲームは動作を停止します。それをチェックしてください。

+0

不足しているコードは申し訳ありませんが、ここに投稿するにはあまりにも多すぎます。しかし、私は小さな変更を行ったのでコードを編集しますが、問題は同じです。 ご覧のとおり、コントローラのarraylistはクリアされず、すべてのゲームで異なるコントローラを使用します。 playerListに関しては、要素を消去する前にコードに表示されているように、GameThread内の新しいリストに要素がコピーされます。 私はデバッガでもチェックしました.2つのGameThreadには異なるplayerListがあります。 私には得られないものがあります。 –

+0

2番目のゲームを作成した後に最初のゲームに何が起こったのですか?それは止まる?それはクラッシュする?セコングゲームは覚醒しますか? –

+0

2番目のゲームが動作し、最初のgameThreadはデバッガで「実行中」に設定されていますが、入力できません。 –

関連する問題