1
0
Fork 0

Noch fehlerhafte diagonale Gewinnerprüfung eingefügt.

(gewöhnlich sollte kein bewusst fehlerhafter Code ins Git committet
werden)
tryOut
Oliver Hummel 2023-11-21 15:32:17 +01:00
parent 4a6cef9fed
commit 026d592730
1 changed files with 38 additions and 25 deletions

View File

@ -1,21 +1,21 @@
import java.util.Scanner;
public class VierGewinnt {
public static void main(String[] args) {
System.out.println("Willkommen zu 4 Gewinnt!");
// Game Loop
Scanner kb = new Scanner(System.in);
boolean weiter = false;
char spieler = 'x';
do {
char[][] spielfeld = spielfeldInitialisieren();
int steineZähler = 0;
spielfeldAusgeben(spielfeld);
// Gewinner Loop
boolean gewonnen = false;
do {
@ -23,67 +23,67 @@ public class VierGewinnt {
spieler = 'x';
else
spieler = 'o';
// Spielstein einwerfen
int spalte, zeile;
do {
System.out.print("Spieler " + spieler + ", bitte wählen Sie eine Spalte aus: ");
spalte = kb.nextInt() - 1; // da Spalte eins verschoben
if ((zeile = einwurfVerarbeiten(spielfeld, spalte, spieler)) == -1)
System.err.println("Ungültige Auswahl!");
else
break;
} while(true);
steineZähler++;
spielfeldAusgeben(spielfeld);
gewonnen = gewinnerPrüfung(spielfeld, zeile, spalte);
} while(!gewonnen && steineZähler < 42);
if (!gewonnen && steineZähler == 42) {
System.out.println("Das Spiel endet unentschieden.");
} else {
System.out.println("Es gewinnt Spieler " + spieler);
}
} while (weiter);
System.out.println("Auf Wiedersehen!");
} // main
public static char[][] spielfeldInitialisieren() {
char[][] spielfeld = new char[6][7];
for (int z = 0; z < spielfeld.length; z++) {
for (int s = 0; s < spielfeld[z].length; s++) {
spielfeld[z][s] = '_';
}
}
return spielfeld;
}
public static void spielfeldAusgeben(char[][] spielfeld) {
System.out.println();
// Alle Zeilen ausgeben
for (int z = 0; z < spielfeld.length; z++) {
// Alle Spalten der z-ten Zeile ausgeben
for (int s = 0; s < spielfeld[z].length; s++) {
System.out.print("| " + spielfeld[z][s] + " " );
}
System.out.println("|");
}
System.out.println();
for (int s = 0; s < spielfeld[0].length; s++) {
System.out.print("| " + (s+1) + " " );
}
System.out.println("|");
System.out.println();
}
@ -91,22 +91,22 @@ public class VierGewinnt {
public static int einwurfVerarbeiten(char[][] spielfeld, int spalte, char stein) {
if (spalte < 0 || spalte > 6)
return -1;
for (int z = spielfeld.length - 1; z >= 0 ; z--) {
if (spielfeld[z][spalte] != '_' && z == 0) // Spalte voll?
return -1;
if (spielfeld[z][spalte] == '_') {
spielfeld[z][spalte] = stein;
return z;
}
}
return -1;
}
public static boolean gewinnerPrüfung(char[][] spielfeld, int zeile, int spalte) {
// vertikale Prüfung
for (int i = 0; i < 3; i++) {
if (spielfeld[0 + i][spalte] == spielfeld[1 + i][spalte]
@ -115,7 +115,7 @@ public class VierGewinnt {
&& spielfeld[0 + i][spalte] != '_')
return true;
}
// horizontale Prüfung
for (int i = 0; i < 4; i++) {
if (spielfeld[zeile][0 + i] == spielfeld[zeile][1 + i]
@ -124,7 +124,20 @@ public class VierGewinnt {
&& spielfeld[zeile][0 + i] != '_')
return true;
}
// diagonale Prüfung 1: "Plusplus-Fall"
for (int z = 0; z < 3; z++) {
for (int s = 0; s < 4; s++) {
if (spielfeld[z][s] == spielfeld[z+1][s+1]
&& spielfeld[z][s] == spielfeld[z+2][s+2]
&& spielfeld[z][s] == spielfeld[z+3][z+3]
&& spielfeld[z][s] != '_')
return true;
}
}
// diagonale Prüfung 2: "Plusminus-Fall"
return false;
}
}