TicTacToe simple array

main
Andres Alberto Cruz Aguirre 2024-10-29 18:22:03 +01:00
parent 8a81e02559
commit 5ea64d5ac3
1 changed files with 189 additions and 0 deletions

View File

@ -0,0 +1,189 @@
package Uebung_02;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class TicTacToe_AC1 {
public static final String EMPTYFIELD = " ";
public static final String X = "X";
public static final String O = "O";
public static String[] gameFields = new String[9];
public static final boolean HUMAN = true;
public static final boolean BOT = false;
public static void main(String[] args) {
initializeGameStatus();
computerMove();
printGrid();
Scanner scanner = new Scanner(System.in);
while(true) {
humanMove(scanner);
printGrid();
if(gameHasEnded()) {
System.out.println("\nDu hast gewonnen!");
break;
}
computerMove();
printGrid();
if(gameHasEnded()) {
System.out.println("\nDer Roboter hat gewonnen!");
break;
}
}
scanner.close();
}
public static void initializeGameStatus() {
Arrays.fill(gameFields, EMPTYFIELD);
}
public static void computerMove() {
int randomNumber = -1;
do {
randomNumber = generateNumber();
} while(!isFieldChoosable(randomNumber));
updateStatus(randomNumber, BOT);
}
public static void humanMove(Scanner scanner) {
printOptionsMenu();
int choice = -1;
do {
choice = scanner.nextInt();
} while(!isFieldChoosable(choice-1));
updateStatus(choice-1, HUMAN);
}
public static int generateNumber() {
Random random = new Random();
return random.nextInt(9);
}
public static boolean isFieldChoosable(int index) {
return gameFields[index].equals(EMPTYFIELD);
}
public static void updateStatus(int index, boolean isHumanMove) {
if (isHumanMove) {
gameFields[index] = O;
} else {
gameFields[index] = X;
}
}
public static boolean gameHasEnded() {
return noMovesLeft() || gameWasWon();
}
public static boolean noMovesLeft() {
for (String s: gameFields) {
if(s.equals(EMPTYFIELD)) return false;
}
System.out.println("\nUnentschieden!");
return true;
}
public static boolean gameWasWon() {
return isDiagonalWin() || isHorizontalWin() || isVerticalWin();
}
public static boolean isDiagonalWin() {
if (!gameFields[0].equals(EMPTYFIELD) &&
gameFields[0].equals(gameFields[4]) &&
gameFields[0].equals(gameFields[8])
) return true;
if (!gameFields[2].equals(EMPTYFIELD) &&
gameFields[2].equals(gameFields[4]) &&
gameFields[2].equals(gameFields[6])
) return true;
return false;
}
public static boolean isHorizontalWin() {
if (!gameFields[0].equals(EMPTYFIELD) &&
gameFields[0].equals(gameFields[1]) &&
gameFields[0].equals(gameFields[2])
) return true;
if (!gameFields[3].equals(EMPTYFIELD) &&
gameFields[3].equals(gameFields[4]) &&
gameFields[3].equals(gameFields[5])
) return true;
if (!gameFields[6].equals(EMPTYFIELD) &&
gameFields[6].equals(gameFields[7]) &&
gameFields[6].equals(gameFields[8])
) return true;
return false;
}
public static boolean isVerticalWin() {
if (!gameFields[0].equals(EMPTYFIELD) &&
gameFields[0].equals(gameFields[3]) &&
gameFields[0].equals(gameFields[6])
) return true;
if (!gameFields[1].equals(EMPTYFIELD) &&
gameFields[1].equals(gameFields[4]) &&
gameFields[1].equals(gameFields[7])
) return true;
if (!gameFields[2].equals(EMPTYFIELD) &&
gameFields[2].equals(gameFields[5]) &&
gameFields[2].equals(gameFields[8])
) return true;
return false;
}
//Section for helper methods - Strings and outputs//
public static void printGrid() {
System.out.println("______________________________________________________________________");
String grid = "";
for (int i = 0; i < 9; i++) {
if (i % 3 == 0) grid += "\n";
grid += printSquare(gameFields[i]);
}
System.out.println(grid);
}
public static String printSquare(String c) {
return "[" + c + "]";
}
public static void printOptionsMenu() {
System.out.println("\n\nDu hast die folgende leeren Felder: ");
String grid = "";
for (int i = 0; i < 9; i++) {
if (i % 3 == 0) grid += "\n";
grid += choosableOption(i);
}
System.out.println(grid+"\nGib die Zahl ein, wo du deinen Kreis setzen willst: ");
}
public static String choosableOption(int index) {
if (isFieldChoosable(index)) {
return (index + 1) + " ";
} else {
return " ";
}
}
}