forked from hummel/4Gewinnt-WS23
Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
Oliver Hummel | 5d719ae8db | |
Oliver Hummel | bb9bcf63bd | |
Oliver Hummel | 1453ff4717 | |
Oliver Hummel | 336965b91e | |
Oliver Hummel | 2180f16195 | |
Oliver Hummel | 7831e195ea | |
Oliver Hummel | 635d1640f6 |
|
@ -1,46 +1,29 @@
|
|||
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
|
||||
Scanner kb = new Scanner(System.in);
|
||||
|
||||
boolean weiter = false;
|
||||
String weiter;
|
||||
char spieler = 'x';
|
||||
do {
|
||||
System.out.println("Willkommen zu 4 Gewinnt!");
|
||||
char[][] spielfeld = spielfeldInitialisieren();
|
||||
int steineZähler = 0;
|
||||
|
||||
spielfeldAusgeben(spielfeld);
|
||||
|
||||
int steineZähler = 0;
|
||||
|
||||
// Gewinner Loop
|
||||
boolean gewonnen = false;
|
||||
do {
|
||||
if (spieler == 'o')
|
||||
spieler = 'x';
|
||||
else
|
||||
spieler = 'o';
|
||||
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);
|
||||
steineZähler++;
|
||||
int[] koordinate = spielsteinEinwerfen(spielfeld, spieler);
|
||||
gewonnen = gewinnerPrüfung(spielfeld, koordinate[0], koordinate[1]);
|
||||
|
||||
spielfeldAusgeben(spielfeld);
|
||||
|
||||
gewonnen = gewinnerPrüfung(spielfeld, zeile, spalte);
|
||||
} while(!gewonnen && steineZähler < 42);
|
||||
} while(!gewonnen && ++steineZähler < 42);
|
||||
|
||||
if (!gewonnen && steineZähler == 42) {
|
||||
System.out.println("Das Spiel endet unentschieden.");
|
||||
|
@ -48,7 +31,10 @@ public class VierGewinnt {
|
|||
System.out.println("Es gewinnt Spieler " + spieler);
|
||||
}
|
||||
|
||||
} while (weiter);
|
||||
System.out.println();
|
||||
System.out.print("Möchten Sie noch eine Runde spielen (j/n)? ");
|
||||
weiter = kb.next();
|
||||
} while (weiter.equalsIgnoreCase("j"));
|
||||
|
||||
System.out.println("Auf Wiedersehen!");
|
||||
} // main
|
||||
|
@ -88,6 +74,29 @@ 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;
|
||||
|
@ -125,6 +134,29 @@ public class VierGewinnt {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
||||
} // eof
|
|
@ -0,0 +1,25 @@
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue