Merge remote-tracking branch 'origin/master'
This commit is contained in:
		
						commit
						eb467a5cfc
					
				
							
								
								
									
										140
									
								
								README.md
								
								
								
								
							
							
						
						
									
										140
									
								
								README.md
								
								
								
								
							| 
						 | 
				
			
			@ -11,3 +11,143 @@ wie dieses benötigt, um es laufen lassen zu können.
 | 
			
		|||
 | 
			
		||||
Bevorzugt wird die IDE IntelliJ, da mit dieser Entwicklungsumgebung das Programm
 | 
			
		||||
programmiert worden ist und alle Voraussetzungen bereits gesetzt worden sind für die IDE.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Tutorial
 | 
			
		||||
 | 
			
		||||
Das TicTacToe besteht aus 9 Feldern und wird von zwei Spielern gespielt. Diese zwei Spieler werden mit den Zeichen `X` oder `O` versehen. Spieler werden mit jedem Zug gewechselt.
 | 
			
		||||
 | 
			
		||||
Das ist ein Beispiel von einem gespielten TicTacToe Feld.
 | 
			
		||||
 | 
			
		||||
| X |  | |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** | **X** | |
 | 
			
		||||
|  |  | **O** |
 | 
			
		||||
 | 
			
		||||
Der Spieler gewinnt, wenn er zuerst 3 von seinen Zeichen in einer vertikalen, horizontalen oder diagonale Reihe gesetzt hat. 
 | 
			
		||||
 | 
			
		||||
Das Spiel hat folgende zwei Inputs, die zur Bedienung des Spieles dienen.
 | 
			
		||||
 | 
			
		||||
Um das TicTacToe spielen zu können, müssen Sie in der `TicTacToe.java` Datei öffnen. Die Datei wird dann so aussehen:
 | 
			
		||||
 | 
			
		||||
```java
 | 
			
		||||
public class TicTacToe {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Game g1 = new Game();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**Feld setzen**
 | 
			
		||||
 | 
			
		||||
Um ein Feld setzen zu können, fügen Sie eine neue Zeile hinzu und schreiben Sie 
 | 
			
		||||
 | 
			
		||||
```java
 | 
			
		||||
public class TicTacToe {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Game g1 = new Game();
 | 
			
		||||
        
 | 
			
		||||
        g1.placeField( 1 /*Hier das gewünschte Feld */);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Wenn Sie ein Feld gesetzt hat, dann wird im Terminal folgendes ausgegeben:
 | 
			
		||||
```
 | 
			
		||||
Spiezug: 1, Spieler 1 spielt.
 | 
			
		||||
X| |
 | 
			
		||||
-----
 | 
			
		||||
 | |
 | 
			
		||||
-----
 | 
			
		||||
 | |
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
*Wenn* ein Feld bereits gesetzt worden ist und der Spieler versucht, diese wieder zu setzen, dann wird im Terminal folgendes ausgegeben 
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Dieses Feld ist nicht zulässig
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**Sprache wechseln**
 | 
			
		||||
 | 
			
		||||
Das Spiel ist in der Lage, in Deutsch(`de`) Englisch(`en`) und Vietnamesisch(`vn`) auszugeben. Um die Sprache ändern zu können, benutzen Sie die Methode `g1.changeLanguage();` 
 | 
			
		||||
 | 
			
		||||
```java
 | 
			
		||||
public class TicTacToe {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Game g1 = new Game();
 | 
			
		||||
        
 | 
			
		||||
        /* Hier die gewünschte Sprache als Kürzel und in kleiner Schrift wie hier dargestellt*/
 | 
			
		||||
        g1.changeLanguage("de");
 | 
			
		||||
        g1.changeLanguage("en");
 | 
			
		||||
        g1.changeLanguage("vn");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**Spiel neustarten**
 | 
			
		||||
 | 
			
		||||
Um ein neues Spiel zu spielen, muss eine neues `Game` Objekt generiert werden. Das Objekt `Game` hat keine Methode, um das Spiel neuzustarten.
 | 
			
		||||
 | 
			
		||||
Hier eine Darstellung:
 | 
			
		||||
 | 
			
		||||
```java
 | 
			
		||||
public class TicTacToe {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Game g1 = new Game();
 | 
			
		||||
        
 | 
			
		||||
        /* Neues Spiel */
 | 
			
		||||
        Game g2 = new Game();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Beispiele der Kombinationen für den Sieg
 | 
			
		||||
 | 
			
		||||
Vertikale:
 | 
			
		||||
 | 
			
		||||
| X |  | |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **X** | **O** | |
 | 
			
		||||
| **X** |  | **O** |
 | 
			
		||||
 | 
			
		||||
| X | X | |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** | **X** | |
 | 
			
		||||
| **O** | **X** | **O** |
 | 
			
		||||
 | 
			
		||||
|  | O | X |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** |  | **X**|
 | 
			
		||||
| **O** | **X** | **X** |
 | 
			
		||||
 | 
			
		||||
Horizontale:
 | 
			
		||||
 | 
			
		||||
| X | X | X |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
|  | **O** | |
 | 
			
		||||
| |  | **O** |
 | 
			
		||||
 | 
			
		||||
|  |  | O |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **X** | **X** | **X** |
 | 
			
		||||
| **O** |  | **O** |
 | 
			
		||||
 | 
			
		||||
|  | O | X |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** |  | **O**|
 | 
			
		||||
| **X** | **X** | **X** |
 | 
			
		||||
 | 
			
		||||
Diagonale:
 | 
			
		||||
 | 
			
		||||
| X |  | |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** | **X** | |
 | 
			
		||||
| **O** |  | **X** |
 | 
			
		||||
 | 
			
		||||
|  |  | X |
 | 
			
		||||
| --- | --- | --- |
 | 
			
		||||
| **O** | **X** | |
 | 
			
		||||
| **X** | | **O** |
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,6 @@ public class Game {
 | 
			
		|||
    private int player2 = 2;
 | 
			
		||||
    private int playerPlaying = 1;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    private boolean gameFinished = false;
 | 
			
		||||
 | 
			
		||||
    public Game() {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +56,6 @@ public class Game {
 | 
			
		|||
            language.outputGameOverText();
 | 
			
		||||
            gameFinished = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switchPlayer();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -89,33 +87,13 @@ public class Game {
 | 
			
		|||
     *
 | 
			
		||||
     * 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;
 | 
			
		||||
        return checkWinVariants(1,4,7) || checkWinVariants(2,5,8) ||
 | 
			
		||||
                checkWinVariants(3,6,9) || checkWinVariants(1,2,3) ||
 | 
			
		||||
                checkWinVariants(4,5,6) || checkWinVariants(7,8,9) ||
 | 
			
		||||
                checkWinVariants(1,5,9) || checkWinVariants(3,5,7);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ public class Language {
 | 
			
		|||
     */
 | 
			
		||||
    public void outputWinnerText(int player) {
 | 
			
		||||
        System.out.println(checkLanguage(
 | 
			
		||||
                "Spieler "+player+" hat gewonnen! Gut gespiel!",
 | 
			
		||||
                "Spieler "+player+" hat gewonnen! Gut gespielt!",
 | 
			
		||||
                "Player "+player+" won! Well played genius!",
 | 
			
		||||
                "Người chơi "+player+" đã thắng. Làm tốt!"));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,17 +20,17 @@ public class TicTacToe {
 | 
			
		|||
    /**
 | 
			
		||||
     * ## Die Bedienung:
 | 
			
		||||
     *
 | 
			
		||||
     * Um diese innovative TicTacToe Edition spielen zu können,
 | 
			
		||||
     * müssen Sie folgende Befehle eingeben.
 | 
			
		||||
     *
 | 
			
		||||
     * Um das TicTacToe spielen zu können, müssen Sie folgende Befehle eingeben:
 | 
			
		||||
     * g.placeField( Hier das gewünschte Feld als Zahl )
 | 
			
		||||
     *
 | 
			
		||||
     * Um die Sprache im Spiel zu wechseln, geben Sie folgendes Befehl ein:
 | 
			
		||||
     * g.changeLanguage("de");
 | 
			
		||||
     *
 | 
			
		||||
     * Um ein neues Spiel starten zu können, initialisieren Sie eine
 | 
			
		||||
     * neue Klasse mit folgendem Befehl:
 | 
			
		||||
     * Game g = new Game();
 | 
			
		||||
     */
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Game g1 = new Game();
 | 
			
		||||
 | 
			
		||||
        g1.placeField(1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,5 @@
 | 
			
		|||
import org.junit.jupiter.api.AfterEach;
 | 
			
		||||
import org.junit.jupiter.api.BeforeEach;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
 | 
			
		||||
import java.io.ByteArrayOutputStream;
 | 
			
		||||
import java.io.PrintStream;
 | 
			
		||||
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Klasse GameTest
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -15,37 +8,17 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
			
		|||
 */
 | 
			
		||||
class GameTest {
 | 
			
		||||
 | 
			
		||||
    private final PrintStream standardOut = System.out;
 | 
			
		||||
    private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
 | 
			
		||||
 | 
			
		||||
    private Game game = new Game();
 | 
			
		||||
 | 
			
		||||
    @BeforeEach
 | 
			
		||||
    public void beforeEach() {
 | 
			
		||||
        game = new Game();
 | 
			
		||||
        System.setOut(new PrintStream(outputStreamCaptor));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @AfterEach
 | 
			
		||||
    public void tearDown() {
 | 
			
		||||
        System.setOut(standardOut);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Konstruktive Testfälle
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void placeOneField() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGameShouldbeTie() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
| 
						 | 
				
			
			@ -57,22 +30,190 @@ class GameTest {
 | 
			
		|||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant147() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
    // Destruktive Testfälle
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void placeNotExistingField() {
 | 
			
		||||
    public void Player2WinVariant147() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        System.out.println("Hello Baeldung Readers!!");
 | 
			
		||||
        System.out.println("Hello Baeldung Readers!!");
 | 
			
		||||
        System.out.println("Hello Baeldung Readers!!");
 | 
			
		||||
        System.out.println("Hello Baeldung Readers!!");
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant123() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant123() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant159() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant159() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant258() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(8);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant258() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(8);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant369() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant369() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant456() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant456() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant789() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(8);
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant789() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(8);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(9);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player1WinVariant357() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void Player2WinVariant357() {
 | 
			
		||||
        Game game = new Game();
 | 
			
		||||
 | 
			
		||||
        game.placeField(1);
 | 
			
		||||
        game.placeField(3);
 | 
			
		||||
        game.placeField(2);
 | 
			
		||||
        game.placeField(5);
 | 
			
		||||
        game.placeField(4);
 | 
			
		||||
        game.placeField(7);
 | 
			
		||||
 | 
			
		||||
        assertEquals("Hello Baeldung Readers!!\n" +
 | 
			
		||||
                "Hello Baeldung Readers!!\n" +
 | 
			
		||||
                "Hello Baeldung Readers!!\n" +
 | 
			
		||||
                "Hello Baeldung Readers!!", outputStreamCaptor.toString()
 | 
			
		||||
            .trim());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue