多个游戏实例

时间:2016-07-03 18:09:44

标签: java multithreading thread-safety multiplayer

我在服务器上有一个方法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();
}

}

2 个答案:

答案 0 :(得分:0)

从您的代码中不清楚成员是什么或他们做了什么......很难理解您的代码的作用。 但我会试一试:

尝试查看其中一个新线程是否更改与旧游戏线程相同的对象。 或者 - 我认为这可能是问题 - 你清除了两个游戏使用的玩家和控制器的阵列/列表......所以第一个游戏工作正常,但第二个游戏清理那些列表/数组并解释其中的内容 - 所以你的第一场比赛停止工作..检查出来。

答案 1 :(得分:0)

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());