From 026d592730b5e95764550509d90608d9b931b83c Mon Sep 17 00:00:00 2001 From: Oliver Hummel Date: Tue, 21 Nov 2023 15:32:17 +0100 Subject: [PATCH] =?UTF-8?q?Noch=20fehlerhafte=20diagonale=20Gewinnerpr?= =?UTF-8?q?=C3=BCfung=20eingef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (gewöhnlich sollte kein bewusst fehlerhafter Code ins Git committet werden) --- 4Gewinnt/src/VierGewinnt.java | 63 +++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/4Gewinnt/src/VierGewinnt.java b/4Gewinnt/src/VierGewinnt.java index 34e7662..ab35af4 100644 --- a/4Gewinnt/src/VierGewinnt.java +++ b/4Gewinnt/src/VierGewinnt.java @@ -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; } }