133 lines
4.6 KiB
Java
133 lines
4.6 KiB
Java
import java.util.Scanner;
|
|
|
|
public class VierGewinnt {
|
|
public static char[][] spielfeldInitialisieren() {
|
|
char[][] spielfeld = new char[6][7];
|
|
return spielfeld;
|
|
}
|
|
|
|
public static void spielfeldAusgeben(char[][] spielfeld) {
|
|
for (int z = 0; z < spielfeld.length; z++) {
|
|
for (int s = 0; s < spielfeld[z].length; s++) {
|
|
System.out.print(spielfeld[z][s] + " ");
|
|
}
|
|
System.out.println();
|
|
}
|
|
}
|
|
|
|
public static boolean gewinnpruefung(char[][] spielfeld, char spieler) {
|
|
// Check for horizontal win
|
|
for (int z = 0; z < spielfeld.length; z++) {
|
|
for (int s = 0; s <= spielfeld[z].length - 4; s++) {
|
|
if (spielfeld[z][s] == spieler &&
|
|
spielfeld[z][s + 1] == spieler &&
|
|
spielfeld[z][s + 2] == spieler &&
|
|
spielfeld[z][s + 3] == spieler) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Check for vertical win
|
|
for (int s = 0; s < spielfeld[0].length; s++) {
|
|
for (int z = 0; z <= spielfeld.length - 4; z++) {
|
|
if (spielfeld[z][s] == spieler &&
|
|
spielfeld[z + 1][s] == spieler &&
|
|
spielfeld[z + 2][s] == spieler &&
|
|
spielfeld[z + 3][s] == spieler) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Check for diagonal win (from top-left to bottom-right)
|
|
for (int z = 0; z <= spielfeld.length - 4; z++) {
|
|
for (int s = 0; s <= spielfeld[z].length - 4; s++) {
|
|
if (spielfeld[z][s] == spieler &&
|
|
spielfeld[z + 1][s + 1] == spieler &&
|
|
spielfeld[z + 2][s + 2] == spieler &&
|
|
spielfeld[z + 3][s + 3] == spieler) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Check for diagonal win (from top-right to bottom-left)
|
|
for (int z = 0; z <= spielfeld.length - 4; z++) {
|
|
for (int s = 3; s < spielfeld[z].length; s++) {
|
|
if (spielfeld[z][s] == spieler &&
|
|
spielfeld[z + 1][s - 1] == spieler &&
|
|
spielfeld[z + 2][s - 2] == spieler &&
|
|
spielfeld[z + 3][s - 3] == spieler) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// No winning condition found
|
|
return false;
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("Willkommen beim 4 Gewinnt der PR1");
|
|
|
|
boolean weiter = true;
|
|
Scanner scanner = new Scanner(System.in);
|
|
|
|
// Game loop
|
|
do {
|
|
char[][] spielfeld = spielfeldInitialisieren();
|
|
|
|
// Gewinner loop
|
|
boolean gewonnen = false;
|
|
char aktuellerSpieler = 'X';
|
|
|
|
// Game loop
|
|
do {
|
|
// Spielfeld ausgeben
|
|
spielfeldAusgeben(spielfeld);
|
|
|
|
// Spielstein einwurf
|
|
System.out.println("Spieler " + aktuellerSpieler + " ist am Zug. Bitte Spalte wählen (1-7): ");
|
|
int spalte = scanner.nextInt() - 1;
|
|
|
|
// Überprüfen, ob die gewählte Spalte gültig ist
|
|
if (spalte < 0 || spalte >= spielfeld[0].length || spielfeld[0][spalte] != ' ') {
|
|
System.out.println("Ungültige Eingabe. Bitte erneut versuchen.");
|
|
continue;
|
|
}
|
|
|
|
// Spielstein setzen
|
|
for (int z = spielfeld.length - 1; z >= 0; z--) {
|
|
if (spielfeld[z][spalte] == ' ') {
|
|
spielfeld[z][spalte] = aktuellerSpieler;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Gewinnprüfung
|
|
gewonnen = gewinnpruefung(spielfeld, aktuellerSpieler);
|
|
|
|
// Wechsel zum anderen Spieler
|
|
aktuellerSpieler = (aktuellerSpieler == 'X') ? 'O' : 'X';
|
|
|
|
} while (!gewonnen);
|
|
|
|
// Spielfeld am Ende nochmal ausgeben
|
|
spielfeldAusgeben(spielfeld);
|
|
|
|
// Gewinner ausgabe bzw. Unentschieden
|
|
System.out.println("Spieler " + aktuellerSpieler + " hat gewonnen!");
|
|
|
|
// Spiel nochmal spielen?
|
|
System.out.println("Möchten Sie nochmal spielen? (ja/nein): ");
|
|
String wiederholen = scanner.next();
|
|
weiter = wiederholen.equalsIgnoreCase("ja");
|
|
|
|
} while (weiter);
|
|
|
|
scanner.close();
|
|
}
|
|
}
|