Java :: Aufgabe #41
2 Lösungen

4 Gewinnt für die Konsole
Anfänger - Java
von Gustl
- 05.01.2013 um 16:57 Uhr
Es soll 4 Gewinnt für die Konsole programmiert werden.
2 Spieler spielen gegeneinander, ohne Computergegner (ohne künstliche Intelligenz), spielen können.
Optional mit Computergegner, aber bitte in der Beschreibung dann angeben.
2 Spieler spielen gegeneinander, ohne Computergegner (ohne künstliche Intelligenz), spielen können.
Optional mit Computergegner, aber bitte in der Beschreibung dann angeben.
Lösungen:

import java.util.*; public class Hauptprogramm { public Hauptprogramm() { } public static void initialisiereSpielmenue(int zeile, int spalte) { //Objekter andere Klassen Spielfeld sp1 = new Spielfeld(zeile,spalte); Spieler spieler1 = new Spieler("Sabrina", 1); Spieler spieler2 = new Spieler("Olli", 2); //aktueller Spieler Spieler aktuellerSpieler = spieler1; //Scanner Scanner sc = new Scanner(System.in); // Spielfeld ausgaben do { System.out.println(aktuellerSpieler.getName() + ", Sie sind an der Reihe!"); System.out.println(); sp1.ausgabeSpielfeld(); System.out.println(); System.out.println("Bitte wählen Sie die Spalte aus! (Wert zwischen 0 und " + spalte + ")"); System.out.println("bei Eingaben über " + spalte + " wird das Spiel beendet!"); int eingabe = sc.nextInt(); if(eingabe >= 0 && eingabe < spalte) { sp1.setzeSpielstein(aktuellerSpieler.getSpielerNr(), eingabe); if(aktuellerSpieler.getSpielerNr() == 1) { aktuellerSpieler = spieler2; } else { aktuellerSpieler = spieler1; } } else { beendeSpiel(); } } while(sp1.unentschieden() == false && sp1.testeReihe(aktuellerSpieler.getSpielerNr()) == false); System.out.println("Herzlichen Glückwunsch, " + aktuellerSpieler.getName() + " hat gewonnen!!"); beendeSpiel(); } public static void initialisiereMenue() { System.out.println("Willkommen bei 4 Gewinnt!"); System.out.println(); System.out.println("Spiel beginnen: [1]"); System.out.println("Spiel beenden: [beliebige Eingabe]"); Scanner sc = new Scanner(System.in); int eingabe = sc.nextInt(); if(eingabe == 1) { Hauptprogramm.initialisiereSpielmenue(6,7); } else { beendeSpiel(); } } public static void beendeSpiel() { System.exit(0); } }

import java.util.*; public class Hauptprogramm { public Hauptprogramm() { } public static void initialisiereSpielmenue(int zeile, int spalte) { //Objekter andere Klassen Spielfeld sp1 = new Spielfeld(zeile,spalte); Spieler spieler1 = new Spieler("Sabrina", 1); Spieler spieler2 = new Spieler("Olli", 2); //aktueller Spieler Spieler aktuellerSpieler = spieler1; //Scanner Scanner sc = new Scanner(System.in); // Spielfeld ausgaben do { System.out.println(aktuellerSpieler.getName() + ", Sie sind an der Reihe!"); System.out.println(); sp1.ausgabeSpielfeld(); System.out.println(); System.out.println("Bitte wählen Sie die Spalte aus! (Wert zwischen 0 und " + spalte + ")"); System.out.println("bei Eingaben über " + spalte + " wird das Spiel beendet!"); int eingabe = sc.nextInt(); if(eingabe >= 0 && eingabe < spalte) { sp1.setzeSpielstein(aktuellerSpieler.getSpielerNr(), eingabe); if(aktuellerSpieler.getSpielerNr() == 1) { aktuellerSpieler = spieler2; } else { aktuellerSpieler = spieler1; } } else { beendeSpiel(); } } while(sp1.unentschieden() == false && sp1.testeReihe(aktuellerSpieler.getSpielerNr()) == false); System.out.println("Herzlichen Glückwunsch, " + aktuellerSpieler.getName() + " hat gewonnen!!"); beendeSpiel(); } public static void initialisiereMenue() { System.out.println("Willkommen bei 4 Gewinnt!"); System.out.println(); System.out.println("Spiel beginnen: [1]"); System.out.println("Spiel beenden: [beliebige Eingabe]"); Scanner sc = new Scanner(System.in); int eingabe = sc.nextInt(); if(eingabe == 1) { Hauptprogramm.initialisiereSpielmenue(6,7); } else { beendeSpiel(); } } public static void beendeSpiel() { System.exit(0); } }

public class Spielfeld { private int feld[][] = null; public Spielfeld(int x, int y) { feld = new int[x][y]; for(int i=0; i < feld.length; i++) { for(int j=0; j < feld[i].length; j++) { feld[i][j] = 0; } } } public void setzeSpielstein(int spielerNr, int spalte) { int x = feld.length-1; boolean fortsetzen = true; while(x >= 0 && fortsetzen == true) { if(feld[x][spalte] == 0 ) { feld[x][spalte] = spielerNr; fortsetzen = false; } x--; } if(x < 0) { System.out.println("Der Stein konnte nicht gesetzt werden!"); } } public void ausgabeSpielfeld() { for(int i=0; i < feld.length; i++) { for(int j=0; j < feld[i].length; j++) { System.out.print("| " + feld[i][j] + " |"); } System.out.println(); } } public boolean unentschieden() { boolean returnwert = false; if(getAnzahlGesetzterSteine() == feld.length*feld[0].length) { returnwert = true; } return returnwert; } public int getAnzahlGesetzterSteine() { int anzSteine = 0; for(int i=0; i < feld.length; i++) { for(int j=0; j < feld[i].length; j++) { if(feld[i][j] != 0) { anzSteine++; } } } return anzSteine; } public boolean testeReihe(int spielerNr) { boolean returnwert = false; if(getAnzahlGesetzterSteine() >= 7) { for(int i=0; i < feld.length; i++) { for(int j=0; j < feld.length; j++) { if(testeHorizontal(i,j,spielerNr) == true || testeVertikal(i,j,spielerNr) == true || testeQuer(i,j,spielerNr) == true ) { returnwert = true; } } } } else { return returnwert; } return returnwert; } public boolean testeHorizontal(int x, int y, int Spieler) { boolean returnwert = false; if(y + 3 < feld[x].length) { if(feld[x][y] == Spieler && feld[x][y+1] == Spieler && feld[x][y+2] == Spieler && feld[x][y+3] == Spieler) { returnwert = true; } } return returnwert; } public boolean testeVertikal(int x, int y, int Spieler) { boolean returnwert = false; if(x + 3 < feld.length) { if(feld[x][y] == Spieler && feld[x+1][y] == Spieler && feld[x+2][y] == Spieler && feld[x+3][y] == Spieler) { returnwert = true; } } return returnwert; } public boolean testeQuer(int x, int y, int Spieler) { boolean returnwert = false; if(x + 3 < feld.length && y + 3 < feld.length) { if(feld[x][y] == Spieler && feld[x+1][y+1] == Spieler && feld[x+2][y+2] == Spieler && feld[x+3][y+3] == Spieler) { returnwert = true; } } if(x - 3 >= 0 && y + 3 < feld.length) { if(feld[x][y] == Spieler && feld[x-1][y+1] == Spieler && feld[x-2][y+2] == Spieler && feld[x-3][y+3] == Spieler) { returnwert = true; } } return returnwert; } }

public class Testprogramm { public static void main(String[] args) { Hauptprogramm.initialisiereMenue(); } }

import java.util.*; public class gewinnt { static String[] [] spielfeld = new String[6] [7]; static Scanner scanner = new Scanner(System.in); public static void main (String[] args) { boolean sp = true; //Spielfeld mit leeren Strings füllen for(int i = 0; i < 6; i++) { for(int j = 0; j < 7; j++) { spielfeld[i][j] = ""; } } do { spielfeldausgeben(); if(sp == true) { einwurf(1); } else { einwurf(2); } //Spielerwechsel nach Zug sp = !sp; if(feldVoll() == true) break; }while(gewonnen() == false); spielfeldausgeben(); } public static String diagonal() { int var = 0; String spieler = ""; int counter = 0; //untenlinks nach oben rechts + verschiebung nach rechts //4 Möglichkeiten for(int mögl = 0; mögl < 4; mögl++) { //5 Felder for(int felder = 5; felder >= 0; felder--) { //damit keine OutOfRangeException if((mögl + var) > 6) break; //setze counter auf 1, wenn kein leeres Feld if(spieler != spielfeld[felder][mögl+var]) { spieler = spielfeld[felder][mögl + var]; counter = 1; } else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden //wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden if((counter == 4) && (spieler != "")) return spieler; //Variable hochzählen für die richtigen Felder var++; } //alles zurücksetzen für den neuen Durchgang var = 0; counter = 0; spieler = ""; } //untenlinks nach oben rechts + verschiebung nach oben //3 Möglichkeiten for(int mögl = 0; mögl < 3; mögl++) { int zahl = 0; for(int felder = 5; felder >= 0; felder--) { //damit keine OutOfRangeException if((felder - var) < 0 ) break; //setze counter auf 1, wenn kein leeres Feld if(spieler != spielfeld[felder - var][zahl]) { spieler = spielfeld[felder - var][zahl]; counter = 1; } else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden //wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden if((counter == 4) && (spieler != "")) return spieler; //Zahl hochzählen für die richtigen Felder zahl++; } //Variable hochzählen für die richtigen Felder var++; //alles zurücksetzen für den neuen Durchgang counter = 0; spieler = ""; } //Var zurücksetzen var = 1; //untenrechts nach oben links + verschiebung nach links //4 Möglichkeiten for(int mögl = 0; mögl < 4; mögl++) { //5 Felder for(int reihe = 5; reihe >= 0; reihe--) { //damit keine OutOfRangeException if((reihe+var) < 0) break; //setze counter auf 1, wenn kein leeres Feld if(spieler != spielfeld[reihe][reihe+var]) { spieler = spielfeld[reihe][reihe+var]; counter = 1; } else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden //wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden if((counter == 4) &&(spieler != "")) return spieler; } //Variable runterzählen für die richtigen Felder var--; //alles zurücksetzen für den neuen Durchgang counter = 0; spieler = ""; } //Variable zurücksetzen var = 0; //untenrechts nach oben links + verschiebung nach oben //3 Möglichkeiten for(int mögl = 0; mögl < 3; mögl++) { //Variable für die richtigen Felder int zahl = 6; //5 Felder for(int reihe = 5; reihe >= 0; reihe--) { //damit keine OutOfRangeException if((reihe-var) < 0) break; //setze counter auf 1, wenn kein leeres Feld if(spieler != spielfeld[reihe-var][zahl]) { spieler = spielfeld[reihe-var][zahl]; counter = 1; }else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden //wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden if((counter == 4) && (spieler != "")) return spieler; //Variable runterzählen für die richtigen Felder zahl--; } //Variable hochzählen für die richtigen Felder var++; } //nichts zurückgeben, wenn nichts davon zutrifft return ""; } public static String horizontal() { int counter = 0; String spieler = ""; for(int reihe = 5; reihe >= 0; reihe--) { for(int spalte = 0; spalte < 7; spalte++) { if(spieler != spielfeld[reihe][spalte]) { spieler = spielfeld[reihe][spalte]; counter = 1; } else counter++; if(counter == 4 && spieler != "") { return spieler; } } counter = 0; spieler = ""; } return ""; } public static String vertikal() { int counter = 0; String spieler = ""; for(int spalte = 0; spalte < 7; spalte++) { for(int reihe = 5; reihe >= 0; reihe--) { if(spieler != spielfeld[reihe][spalte]) { spieler = spielfeld[reihe][spalte]; counter = 1; } else counter++; if((counter == 4) && (spieler != "")) { return spieler; } } counter = 0; spieler = ""; } return ""; } public static boolean gewonnen() { if(vertikal() != "") return true; else if(horizontal() != "") return true; else if(diagonal() != "") return true; else return false; } public static boolean feldVoll() { int counter = 0; for(int i = 0; i < 7; i++) { if(spielfeld[0][i] != "") { counter++; } } if(counter == 7) { System.out.println("Das Spielfeld ist voll! Unentschieden!"); return true; } else return false; } public static boolean spalteVoll(int spalte) { if(spielfeld[0][spalte] != "") { return true; } else return false; } public static void einwurf(int spieler) { int spalte; boolean gilt = false; do { System.out.println("Spieler " + spieler + " ist dran!"); System.out.print("Spalte:\t"); spalte = scanner.nextInt() - 1; if(spalteVoll(spalte) == false) { for(int i = 5; i >= 0; i--) { if(spielfeld[i][spalte] == "") { if(spieler == 1) { spielfeld [i][spalte] = "1"; } else { spielfeld [i][spalte] = "2"; } gilt = true; break; } } } else System.out.println("Spalte voll!"); }while(gilt == false); } public static void spielfeldausgeben() { for(int i = 0; i < 6; i++) { for(int j = 0; j < 7; j++) { System.out.print(" | "); switch (spielfeld[i][j]) { case "": System.out.print(" "); break; case "1": System.out.print("X"); break; case "2": System.out.print("O"); break; } } System.out.print(" |"); System.out.println(); } System.out.println(" -----------------------------"); } }