/** * Klasse: Game * * Diese Klasse beinhaltet die Logik für das Spiel. * Der Benutzer kann mit dieser Klasse die Felder des Spielfeldes setzen * * Klasse Language und Gamefield wird im Konstruktor initialisiert */ public class Game { private Gamefield gamefield; private Language language; private final int player1 = 1; private final int player2 = 2; private int playerPlaying = 1; // private boolean gameFinished = false; public Game() { gamefield = new Gamefield(); language = new Language("de"); language.outputGameStartedText(); } /** * Methode: placeField * * Spieler setzt sein Symbol in das gewünschte Feld. * Die Methode überprüft auch, ob der Spieler gewonnen hat. * Wenn der Spieler gewonnen hat, dann wird * * @param field vom Spieler markiertes Feld */ public void placeField(int field) { language.outputSeparator(); if (gameFinished) { language.outputGameOverText(); return; } if (!(field > 9 || field < 1) && !gamefield.setField(field, playerPlaying)) { language.outputWrongFieldSelected(); return; } language.outputMoveText(gamefield.countSetFields(), playerPlaying); gamefield.outputField(); if(checkForWin()) { language.outputWinnerText(playerPlaying); gameFinished = true; } else if (checkForTie()) { language.outputTieText(); language.outputGameOverText(); gameFinished = true; } switchPlayer(); } /** * Methode: switchPlayer * * Diese Methode wechselt den Spieler. Dieser wird von * Methode placeField aufgerufen. * Der Spieler wird automatisch gewechselt. */ public void switchPlayer() { if (playerPlaying == 1) { playerPlaying = player2; } else { playerPlaying = player1; } } /** * Diese Methode ändert die Spielsprache * @param language Spielsprache welche zur Verfügung stehen "de","en","vn" */ public void changeLanguage(String language) { this.language.setOutputLanguage(language); } /** * Methode: checkForWin * * Diese Methode prüft ob das Spiel einen Gewinner hat * @return bei erkanntem Gewinner true sonst false */ private boolean checkForWin() { if (checkWinVariants(1,4,7)) { return true; } else if (checkWinVariants(2,5,8)) { return true; } else if (checkWinVariants(3,6,9)) { return true; } else if (checkWinVariants(1,2,3)) { return true; } else if (checkWinVariants(4,5,6)) { return true; } else if (checkWinVariants(7,8,9)) { return true; } else if (checkWinVariants(1,5,9)) { return true; } else if (checkWinVariants(3,5,7)) { return true; } return false; } /** * Methode: checkWinVariants * * Diese Methode prüft ob 3 Werte denselben entsprechen und grösser als 0 sind. * Methode wird von checkForWin Methode verwendet. * * @param field1 erstes zu prüfende Feld * @param field2 zweites zu prüfende Feld * @param field3 drittes zu prüfende Feld * @return bei erkannten gleichen Zahlen grösser als 0 true sonst false */ private boolean checkWinVariants(int field1, int field2, int field3) { return ((gamefield.getField(field1) == gamefield.getField(field2)) && (gamefield.getField(field3) == gamefield.getField(field1)) && (gamefield.getField(field1) >= 1)); } public boolean checkForTie() { return gamefield.countSetFields() == 9; } }