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 { spieler = spielerWechseln(spieler); // 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); 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 spielerWechseln(char spieler) { if (spieler == 'o') return 'x'; return 'o'; } 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(); } 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] && spielfeld[0 + i][spalte] == spielfeld[2 + i][spalte] && spielfeld[0 + i][spalte] == spielfeld[3 + i][spalte] && 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] && spielfeld[zeile][0 + i] == spielfeld[zeile][2 + i] && spielfeld[zeile][0 + i] == spielfeld[zeile][3 + i] && spielfeld[zeile][0 + i] != '_') return true; } // diagonale Prüfung 1: "Plusplus-Fall", z.B. spielfeld[z+1][s+1] 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][s+3] && spielfeld[z][s] != '_') return true; } } // diagonale Prüfung 2: "Minusplus-Fall", z.B. spielfeld[z-1][s+1] for (int z = spielfeld.length-1; z > spielfeld.length-4; 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][s+3] && spielfeld[z][s] != '_') return true; } } return false; } }