2016-07-03 5 views
0

Ich habe eine Methode createGame auf Server, die eine Instanz eines Spiels erstellen. Ich möchte eine andere Instanz des Spiels für verschiedene Kunden erstellen, aber wenn ich eine andere Instanz des Spiels erstelle, funktioniert das erste erstellte Spiel nicht mehr. HierMehrere Spiel-Instanz

ist der Code:

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

Warum kann ich nicht zwei Spiele gleichzeitig spielen, wenn jeder auf einem anderen Thread ist?

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

}

Antwort

0

aus dem Code ist es nicht klar, was die Mitglieder sind oder was sie tun .. es ist wirklich schwer zu verstehen, was Ihre Code macht .. Aber ich gebe es eine Chance:

Versuchen Sie und sehen Sie, wenn einer der neuen Threads die Sa ändern Ich Objekte als der alte Spiel-Thread. Oder - und ich denke, dass könnte das Problem sein - Sie löschen das Array/Liste der Spieler und Controller - die beide Spiele verwenden .. so das erste Spiel funktioniert gut, aber die zweite reinigen diese Liste/Arrays und zerstören, was drin ist - so Dein erstes Spiel hört auf zu arbeiten .. schau es dir an.

+0

Es tut mir leid für den fehlenden Code, aber wahrscheinlich ist es zu viel, um es hier zu posten. Allerdings werde ich den Code bearbeiten, weil ich eine kleine Änderung vorgenommen habe, aber das Problem ist das gleiche. Wie Sie sehen können, ist die Arraylist der Controller nicht gelöscht und ich nehme für jedes Spiel einen anderen Controller. In Bezug auf die playerList werden ihre Elemente in eine neue Liste innerhalb von GameThread kopiert, wie ich sie jetzt im Code zeige, bevor ich sie säubere. Ich habe auch im Debugger eingecheckt, die beiden GameThreads haben unterschiedliche PlayerList. Da ist etwas, das ich nicht bekomme. –

+0

Was ist mit dem ersten Spiel nach dem Erstellen des zweiten? Es hört auf? es stürzt ab? Läuft das Secong-Spiel? –

+0

Das zweite Spiel funktioniert, das erste gameThread ist im Debugger auf "Running" eingestellt, kann aber keine Eingaben machen. –

Verwandte Themen