gruppe06-hufflepuff-projekt.../src/Game.java

149 lines
4.1 KiB
Java
Raw Normal View History

/**
* Klasse: Game
*
* Diese Klasse beinhaltet die Logik für das Spiel.
2021-10-08 09:15:24 +02:00
* 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;
2021-10-07 17:24:24 +02:00
//
private boolean gameFinished = false;
2021-10-07 17:24:24 +02:00
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) {
2021-10-09 15:57:54 +02:00
gamefield.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()) {
2021-10-08 09:15:24 +02:00
language.outputWinnerText(playerPlaying);
language.outputGameOverText();
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.
*/
private void switchPlayer() {
if (playerPlaying == 1) {
playerPlaying = player2;
} else {
playerPlaying = player1;
}
2021-10-07 17:24:24 +02:00
}
/**
* Diese Methode ändert die Spielsprache
* @param language Spielsprache welche zur Verfügung stehen "de","en","vn"
*/
2021-10-07 17:24:24 +02:00
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() {
2021-10-09 12:50:10 +02:00
if (checkWinVariants(1,4,7)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(2,5,8)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(3,6,9)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(1,2,3)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(4,5,6)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(7,8,9)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(1,5,9)) {
2021-10-07 22:18:34 +02:00
return true;
}
else if (checkWinVariants(3,5,7)) {
2021-10-07 22:18:34 +02:00
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) == playerPlaying));
}
2021-10-08 09:15:24 +02:00
2021-10-09 15:57:54 +02:00
/**
* Methode: chechForTie
*
* Diese Methode prüft ob bereits alle Felder von den Spielern belegt wurden.
* @return falls Unentschieden true sonst false
*/
private boolean checkForTie() {
return gamefield.countSetFields() == 9;
}
}