G
guilhelm
Gast
ich habe einige Themen über dieses Problem im Forum gelesen, ich habe aber keine Lösung für mein Problem gefunden.
Wir programmieren das Spiel "4 Gewinnt" ohne graphische Darstellung und haben ein Problem, wenn das Programm überprüfen soll, ob der Spieler gewonnen hat.
Beim Compilieren gibts kein Problem, nur wenn man spielt kommt so was:
Wir programmieren das Spiel "4 Gewinnt" ohne graphische Darstellung und haben ein Problem, wenn das Programm überprüfen soll, ob der Spieler gewonnen hat.
Beim Compilieren gibts kein Problem, nur wenn man spielt kommt so was:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2
at Logik.gewonnen(Logik.java:50)
at Spiel.spielen(Spiel.java:65)
at Start.main(Start.java:22)
Code:
public class Start
{
public static void main(String[] args)
{
System.out.print("Wie heisst der 1. Spieler? ");
String name1 = Tools.stringEingabe();
System.out.print("Wie heisst der 2. Spieler? ");
String name2 = Tools.stringEingabe();
char[][] spielfeld = new char[6][7];
for(int j = 0; j <= 6; j++)
{
for(int k = 0; k <= 5; k++)
{
spielfeld[k][j] = ' ';
}
}
Spiel meinSpiel = new Spiel();
meinSpiel.ausgabe(spielfeld);
meinSpiel.spielen(spielfeld, 1, name1, name2);
}
}
Code:
public class Spiel
{
public char stein;
public int dran;
public int zeile;
public void spielen(char[][] spielfeld, int dran, String n1, String n2)
{
Logik l = new Logik(false);
boolean g = false;
for(int i = 1; i <= 42 && g == false; i++)
{
if(dran == 1)
{
stein = 'X';
System.out.println(n1+" ist dran!");
System.out.print("In welche Spalte? ");
int spalte = Tools.intEingabe();
if(spielfeld[5][spalte] == ' ')
{
spielfeld[5][spalte] = stein;
}
else
{
for(int z = 0; spielfeld[z][spalte] == ' ' && z <= 4; z++)
{
zeile = z;
}
spielfeld[zeile][spalte] = stein;
}
//Diese Zeile sollte die Zeile 65 sein (haben viele unwichtige Zeilen gelöscht)
g = l.gewonnen(stein, spielfeld, zeile, spalte);
Code:
public class Logik
{
boolean gewonnen;
public Logik(boolean gewonnen)
{
this.gewonnen = gewonnen;
}
boolean gewonnen(char stein, char[][] sf, int z, int s)
{
int l = s - 1;
int ll = s - 2;
int lll = s - 3;
int r = s + 1;
int rr = s + 2;
int rrr = s + 3;
int u = z + 1;
int uu = z + 2;
int uuu = z + 3;
int o = z - 1;
int oo = z - 2;
int ooo = z - 3;
System.out.println("Zeile = "+z+" Spalte = "+s);
//horizontal
if(s > 1 && s < 6 && sf[z][ll] == stein && sf[z][l] == stein && sf[z][r] == stein)
{ gewonnen = true;}
else if(s > 0 && s < 5 && sf[z][l] == stein && sf[z][r] == stein && sf[z][rr] == stein)
{ boolean gewonnen = true;}
else if(s > 2 && sf[z][lll] == stein && sf[z][ll] == stein && sf[z][l] == stein)
{ boolean gewonnen = true;}
else if(s < 4 && sf[z][r] == stein && sf[z][rr] == stein && sf[z][rrr] == stein)
{ boolean gewonnen = true;}
//vertikal
else if(z < 3 && sf[z][u] == stein && sf[z][uu] == stein && sf[z][uuu] == stein)
{ boolean gewonnen = true;}
//diagonal obenlinks - untenrechts
//Diese Zeile sollte die Zeile 50 sein:
else if(s > 1 && s < 6 && z < 5 && sf[oo][ll] == stein && sf[o][l] == stein && sf[u][r] == stein)
{ boolean gewonnen = true;}
else if(s > 0 && s < 5 && z < 4 && sf[o][l] == stein && sf[u][r] == stein && sf[uu][rr] == stein)
{ boolean gewonnen = true;}
else if(s > 2 && sf[ooo][lll] == stein && sf[oo][ll] == stein && sf[o][l] == stein)
{ boolean gewonnen = true;}
else if(s < 4 && z < 3 && sf[uuu][rrr] == stein && sf[uu][rr] == stein && sf[u][r] == stein)
{boolean gewonnen = true;}
//diagonal obenrechts - untenlinks
else if(s > 0 && s < 5 && z < 5 && sf[oo][rr] == stein && sf[o][r] == stein && sf[u][l] == stein)
{boolean gewonnen = true;}
else if(s > 1 && s < 6 && z < 4 && sf[o][r] == stein && sf[u][l] == stein && sf[uu][ll] == stein)
{ boolean gewonnen = true;}
else if(s < 4 && sf[ooo][rrr] == stein && sf[oo][rr] == stein && sf[o][r] == stein)
{ boolean gewonnen = true;}
else if(s > 2 && z < 3 && sf[u][l] == stein && sf[uu][ll] == stein && sf[uuu][lll] == stein)
{ boolean gewonnen = true;}
else { boolean gewonnen = false;}
return gewonnen;
}