У меня есть метод 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();
}
}
Прошу прощения за недостающий код, но, вероятно, его будет слишком много, чтобы опубликовать его здесь. Однако я отредактирую код, потому что я сделал небольшое изменение, но проблема такая же. Как вы можете видеть, arraylist контроллеров не очищается, и я беру другой контроллер для каждой игры. Что касается playerList, его элементы копируются в новый список внутри GameThread, так как я покажу вам код в коде перед его очисткой. Я также проверил в Debugger, у двух GameThread есть другой playerList. Есть что-то, чего я не понимаю. –
Что происходит с первой игрой после создания второго? Он останавливается? он падает? Происходит ли вторая игра? –
Вторая игра работает, первый gameThread установлен как «Запуск» в отладчике, но я не могу дать ему никаких данных. –