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(" -----------------------------");
}
}