2016-07-03 2 views
0

서버 인스턴스에 게임 인스턴스를 생성하는 createGame 메서드가 있습니다. 내가 원하는 것은 differents 클라이언트를위한 게임의 또 다른 인스턴스를 만드는 것이지만, 게임의 또 다른 인스턴스를 만들면 생성 된 첫 번째 게임이 더 이상 작동하지 않습니다. 각자가 다른 스레드에있는 경우,복수 게임 인스턴스

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

누락 된 코드는 유감이지만, 여기에 게시하는 것은 너무 어려울 것입니다. 그러나 나는 약간의 변경을했기 때문에 코드를 편집 하겠지만 문제는 동일합니다. 아시다시피 컨트롤러의 arraylist는 지워지지 않고 모든 게임마다 다른 컨트롤러를 사용합니다. playerList와 관련하여, 엘리먼트는 GameThread 내의 새로운 목록에 복사됩니다. 코드를 청소하기 전에 코드에 표시합니다. 디버거에서 두 GameThread가 다른 playerList를 가지고 있는지 확인했습니다. 내가 얻지 못하는 것이 있습니다. –

+0

두 번째 게임을 만든 후 첫 번째 게임에서 무슨 일이 일어 났습니까? 그만 해요? 그것은 추락 하는가? secong 게임 woks 있습니까? –

+0

두 번째 게임이 작동합니다. 첫 번째 gameThread는 디버거에서 "실행 중"으로 설정되어 있지만 입력 할 수는 없습니다. –

관련 문제