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

Почему я не могу играть в две игры в то же время, если каждый из них находится в другом потоке?

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

Из кода не ясно, что являются членами или то, что они делают .. это очень трудно понять, что ваш код делает .. Но я дам ему снимок:

Попробуйте посмотреть, изменилась ли одна из новых потоков sa меня объекты как старый игровой поток. Или - и я думаю, что это может быть проблемой - вы очищаете массив/список игроков и контроллеров, - которые обе игры используют ... поэтому первая игра отлично работает, а вторая очищает список/массивы и уничтожает то, что там, - так ваша первая игра перестает работать .. проверьте это.

+0

Прошу прощения за недостающий код, но, вероятно, его будет слишком много, чтобы опубликовать его здесь. Однако я отредактирую код, потому что я сделал небольшое изменение, но проблема такая же. Как вы можете видеть, arraylist контроллеров не очищается, и я беру другой контроллер для каждой игры. Что касается playerList, его элементы копируются в новый список внутри GameThread, так как я покажу вам код в коде перед его очисткой. Я также проверил в Debugger, у двух GameThread есть другой playerList. Есть что-то, чего я не понимаю. –

+0

Что происходит с первой игрой после создания второго? Он останавливается? он падает? Происходит ли вторая игра? –

+0

Вторая игра работает, первый gameThread установлен как «Запуск» в отладчике, но я не могу дать ему никаких данных. –