Compare commits

..

2 Commits
main ... tryOut

Author SHA1 Message Date
Oliver Hummel 3b5015caee Fehler behoben. 2023-11-21 15:44:59 +01:00
Oliver Hummel 026d592730 Noch fehlerhafte diagonale Gewinnerprüfung eingefügt.
(gewöhnlich sollte kein bewusst fehlerhafter Code ins Git committet
werden)
2023-11-21 15:32:17 +01:00
2 changed files with 35 additions and 79 deletions

View File

@ -1,40 +1,54 @@
import java.util.Scanner;
public class VierGewinnt {
static Scanner kb = new Scanner(System.in); // sog. Klassenvariable
public static void main(String[] args) {
System.out.println("Willkommen zu 4 Gewinnt!");
// Game Loop
String weiter;
Scanner kb = new Scanner(System.in);
boolean weiter = false;
char spieler = 'x';
do {
System.out.println("Willkommen zu 4 Gewinnt!");
char[][] spielfeld = spielfeldInitialisieren();
spielfeldAusgeben(spielfeld);
int steineZähler = 0;
spielfeldAusgeben(spielfeld);
// Gewinner Loop
boolean gewonnen = false;
do {
spieler = spielerWechseln(spieler);
int[] koordinate = spielsteinEinwerfen(spielfeld, spieler);
gewonnen = gewinnerPrüfung(spielfeld, koordinate[0], koordinate[1]);
if (spieler == 'o')
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);
} while(!gewonnen && ++steineZähler < 42);
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);
}
System.out.println();
System.out.print("Möchten Sie noch eine Runde spielen (j/n)? ");
weiter = kb.next();
} while (weiter.equalsIgnoreCase("j"));
} while (weiter);
System.out.println("Auf Wiedersehen!");
} // main
@ -50,7 +64,7 @@ public class VierGewinnt {
return spielfeld;
}
public static void spielfeldAusgeben(char[][] spielfeld) {
System.out.println();
@ -74,29 +88,6 @@ public class VierGewinnt {
System.out.println();
}
public static char spielerWechseln(char spieler) {
if (spieler == 'o')
return 'x';
return 'o';
}
public static int[] spielsteinEinwerfen(char[][] spielfeld, char spieler) {
int zeile, spalte;
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);
return new int[] {zeile, spalte};
}
public static int einwurfVerarbeiten(char[][] spielfeld, int spalte, char stein) {
if (spalte < 0 || spalte > 6)
return -1;
@ -134,7 +125,7 @@ public class VierGewinnt {
return true;
}
// diagonale Prüfung 1: "Plusplus-Fall", z.B. spielfeld[z+1][s+1]
// 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]
@ -145,18 +136,8 @@ public class VierGewinnt {
}
}
// 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;
}
}
// diagonale Prüfung 2: "Plusminus-Fall"
return false;
}
} // eof
}

View File

@ -1,25 +0,0 @@
import static org.junit.Assert.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class VierGewinntTest {
@Test // sog. Annotation, damit JUnit erkennt, wo es testen soll
void testSpielerWechseln() {
assertEquals('x', VierGewinnt.spielerWechseln('o'));
assertEquals('o', VierGewinnt.spielerWechseln('x'));
}
@Test
void testEinwurfVerarbeiten() {
char[][] expectedSpielfeld = VierGewinnt.spielfeldInitialisieren();
expectedSpielfeld[5][3] = 'o';
char[][] testSpielfeld = VierGewinnt.spielfeldInitialisieren();
assertEquals(5, VierGewinnt.einwurfVerarbeiten(testSpielfeld, 3, 'o'));
assertArrayEquals(expectedSpielfeld, testSpielfeld);
}
}