Hallo liebe Forumgemeinde,
ich besuche im Moment in meinem 3.Semester meine erste Programmiervorlesung. Mir wurde das Projekt "VIER GEWINNT" zugeteilt, jedoch hänge ich schon seit geraumer Zeit an einem kleinen Problem hinsichtlich meines geschriebenen Vier Gewinnt Programms für Java (unter Eclipse).
Meine Aufgabe ist es ein Programm zu schreiben, dass das Spiel "Vier Gewinnt" verkörpert und darstellt. Das Grundprogramm steht, jedoch hänge ich an zwei Punkten und komme nicht weiter:
1) In meinem Vier Gewinnt Programm soll nach jedem Zug abgeprüft werden, ob vier "Steine" nebeneinander in der Tabelle sind. Ich muss sowohl horizontal, vertikal als auch diagonal abprüfen. Die Horizontale und Vertikale funktioniert mit meinem Programm (Zeile 146-158). Die Diagonale (Zeile 160-164) funktioniert mit dem derzeitigen Programm-Code nicht. Mir ist bewusst, dass ich für die Diagonal zwei Befehle brauche, da sowohl eine aufsteigend als auch eine absteigende Reihe abgeprüft werden soll. In meinem bisherigen Programm habe ich nur die aufsteigende Reihe, aber leider erkennt Java es noch nicht an.
Meine Idee war, dass das Programm abprüft ob z.B. im Feld 1/1, 2/2, 3/3, 4/4 ein Stein liegt. Bin ich hier auf der richtigen Fährte?
2) Mein zweiter Hänger ist, dass wenn ein Spieler gewonnen hat, abgefragt werden soll, ob man das Spiel "Weiterspielen" oder "Beenden" will. Die Beenden-Variante funktioniert in meinem Code (Zeile 174). Unter "Weiterspielen" versteht mein Professor, dass das Spielfeld kommt geleert wird und quasi von Anfang an neu startet. Dies funktioniert leider noch nicht (Zeile 176-180). Leider ist mir aus der Vorlesung und nach der Suche im www kein Befehl bekannt, der das Programm komplett neu startet.
Ich hoffe, dass vielleicht jemand von euch mir weiterhelfen oder einen Tipp zur Lösung meiner Probleme geben kann! Ich würde mich darüber sehr freuen
Gruß,
ClassiCBond
Hier ist der Auszug zu der Gewinnbedingung (Horizontal/Vertikal/Diagonal) und dem "Weiterspielen/Beenden":
Hier das komplette Programm:
ich besuche im Moment in meinem 3.Semester meine erste Programmiervorlesung. Mir wurde das Projekt "VIER GEWINNT" zugeteilt, jedoch hänge ich schon seit geraumer Zeit an einem kleinen Problem hinsichtlich meines geschriebenen Vier Gewinnt Programms für Java (unter Eclipse).
Meine Aufgabe ist es ein Programm zu schreiben, dass das Spiel "Vier Gewinnt" verkörpert und darstellt. Das Grundprogramm steht, jedoch hänge ich an zwei Punkten und komme nicht weiter:
1) In meinem Vier Gewinnt Programm soll nach jedem Zug abgeprüft werden, ob vier "Steine" nebeneinander in der Tabelle sind. Ich muss sowohl horizontal, vertikal als auch diagonal abprüfen. Die Horizontale und Vertikale funktioniert mit meinem Programm (Zeile 146-158). Die Diagonale (Zeile 160-164) funktioniert mit dem derzeitigen Programm-Code nicht. Mir ist bewusst, dass ich für die Diagonal zwei Befehle brauche, da sowohl eine aufsteigend als auch eine absteigende Reihe abgeprüft werden soll. In meinem bisherigen Programm habe ich nur die aufsteigende Reihe, aber leider erkennt Java es noch nicht an.
Meine Idee war, dass das Programm abprüft ob z.B. im Feld 1/1, 2/2, 3/3, 4/4 ein Stein liegt. Bin ich hier auf der richtigen Fährte?
2) Mein zweiter Hänger ist, dass wenn ein Spieler gewonnen hat, abgefragt werden soll, ob man das Spiel "Weiterspielen" oder "Beenden" will. Die Beenden-Variante funktioniert in meinem Code (Zeile 174). Unter "Weiterspielen" versteht mein Professor, dass das Spielfeld kommt geleert wird und quasi von Anfang an neu startet. Dies funktioniert leider noch nicht (Zeile 176-180). Leider ist mir aus der Vorlesung und nach der Suche im www kein Befehl bekannt, der das Programm komplett neu startet.
Ich hoffe, dass vielleicht jemand von euch mir weiterhelfen oder einen Tipp zur Lösung meiner Probleme geben kann! Ich würde mich darüber sehr freuen
Gruß,
ClassiCBond
Hier ist der Auszug zu der Gewinnbedingung (Horizontal/Vertikal/Diagonal) und dem "Weiterspielen/Beenden":
Code:
private static void Gewinnbedingung()
{
boolean a=false;
int s;
if (SpielerEins == true)
{
s=1;
}
else
{
s=2;
}
for(int i=0;i<=2;i++) <---------------- Horizontale
for(int j=0;j<=6;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i+1] [j]==s && SpielFeld [i+2] [j] ==s && SpielFeld [i+3] [j] ==s)
{a=true;}
}
for(int i=0;i<=5;i++) <---------------- Vertikale
for(int j=0;j<=3;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i] [j+1]==s && SpielFeld [i] [j+2] ==s && SpielFeld [i] [j+3] ==s)
{a=true;}
}
for(int i=0;i<=2;i++) <----HILFE <-------------- Diagonal Aufsteigend
for(int j=0;j<=3;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i+1] [j+1]==s && SpielFeld [i+2] [j+2] ==s && SpielFeld [i+3] [j+3] ==s)
{a=true;}
}
if (a==true)
{
System.out.println ("Gewonnen hat Spieler " + s );
String EingabeEnde = Input.readString("Weiterspielen (0) oder Beenden (1)");
int Eingabe = Integer.parseInt(EingabeEnde) ;
if (Eingabe== 1)
{
System.exit(0);
}
else if (Eingabe==0)
{
SpielFeldAusgeben(); <-----HILFE <--------- Hier ist "Weiterspielen"
}
}
}
Hier das komplette Programm:
Code:
public class VIERGewinnt
{
static int[][] SpielFeld = new int[6][7]; // 6 Zeilen, 7 Spalten
static int Zeilen = SpielFeld.length;
static int Spalten = 7;
static int[] spalteFuellstand = new int[7];
static boolean SpielerEins = true;
static int Spalte = 0;
static int ZeilenCounter;
static int SpaltenCounter;
private static void SpielFeldAusgeben()
{
// Ausgabe des Spielfelds
System.out.println("| | | | | | | |");
System.out.println("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |");
System.out.println("|___|___|___|___|___|___|___|");
for ( ZeilenCounter = 0; ZeilenCounter < Zeilen; ZeilenCounter++)
{
System.out.println("| | | | | | | |");
for ( SpaltenCounter = 0; SpaltenCounter < Spalten; SpaltenCounter++)
{
if (SpielFeld[ZeilenCounter][SpaltenCounter] == 0)
{
System.out.print("| " + " " + " ");
} // end of if
else
if (SpielFeld[ZeilenCounter][SpaltenCounter] == 1)
{
System.out.print("| " + "X" + " ");
} // end of if-else
else
if (SpielFeld[ZeilenCounter][SpaltenCounter] == 2)
{
System.out.print("| " + "O" + " ");
} // end of if-else
} // end of for
System.out.print("|");
System.out.println();
System.out.println("|___|___|___|___|___|___|___|");
} // end of for
System.out.println();
}
// end of private static void SpielFeldAusgeben
private static void Spielerwechsel()
{
// Spielerwechsel
if (SpielerEins == true)
{
SpielerEins = false;
} // end of if
else
{
SpielerEins = true;
} // end of if-else
} // end of private static void Spielerwechsel
private static void Spalteneingabe() {
// Spalteneingabe durch Spieler eins oder zwei
try{
int Spieler;
Spalte = 0;
String EingabeA;
if (SpielerEins == true)
{
EingabeA = Input.readString("Spieler 1: Bitte Spaltennummer angeben: ");
} // end of if
else
{
EingabeA = Input.readString("Spieler 2: Bitte Spaltennummer angeben: ");
} // end of if-else
// Prüfen der Eingabe auf einen Wert zwischen 1 und 7
Spalte = Integer.parseInt(EingabeA);
}catch(Exception ex)
{
//System.out.println("Bitte Zahl zwischen 1 und 7 eingeben");
}
if (Spalte < 1 || Spalte > 7)
{
System.out.println();
System.out.println("Achtung! Die eingegebene Spaltennummer muss zwischen 1 und 7 liegen!");
Spalteneingabe();
}
else
if (spalteFuellstand[Spalte - 1] > 5)
{
System.out.println("Spalte voll!!!!");
Spalteneingabe();
}
else
{
spalteFuellstand[Spalte - 1]++;
}
}
private static void Spielzug()
{
if (SpielerEins == true)
{
SpielFeld[6 - spalteFuellstand[Spalte - 1]][Spalte - 1] = 1;
} // end of if
else {
SpielFeld[6 - spalteFuellstand[Spalte - 1]][Spalte - 1] = 2;
} // end of if-else
}// end of private static void Spielzug
private static void Gewinnbedingung()
{
boolean a=false;
int s;
if (SpielerEins == true)
{
s=1;
}
else
{
s=2;
}
for(int i=0;i<=2;i++)
for(int j=0;j<=6;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i+1] [j]==s && SpielFeld [i+2] [j] ==s && SpielFeld [i+3] [j] ==s)
{a=true;}
}
for(int i=0;i<=5;i++)
for(int j=0;j<=3;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i] [j+1]==s && SpielFeld [i] [j+2] ==s && SpielFeld [i] [j+3] ==s)
{a=true;}
}
for(int i=0;i<=2;i++)
for(int j=0;j<=3;j++)
{if(SpielFeld [i] [j]==s && SpielFeld [i+1] [j+1]==s && SpielFeld [i+2] [j+2] ==s && SpielFeld [i+3] [j+3] ==s)
{a=true;}
}
if (a==true)
{
System.out.println ("Gewonnen hat Spieler " + s );
String EingabeEnde = Input.readString("Weiterspielen (0) oder Beenden (1)");
int Eingabe = Integer.parseInt(EingabeEnde) ;
if (Eingabe== 1)
{
System.exit(0);
}
else if (Eingabe==0)
{
SpielFeldAusgeben();
}
}
}
public static void main(String[] args)
{
while (true)
{
Spalteneingabe();
Spielzug();
SpielFeldAusgeben();
Gewinnbedingung();
Spielerwechsel();
}
}
}