hallo, alle zusammen. Ich hab folgendes problem: Jeder kennt bestimmt das Spiel "4 gewinnt". Ich versuche es in java zu programmieren und hab da ein kleines Problem. Da muss nach jedem Zug überprüft werden, ob 4 gleiche Chips horizontal , vertikal oder diagonal liegen. für vertikal und horizontal hab ich folgenden Quelltext:
also ich vergleiche 2 benachbarte chips und wenn sie gleich und nicht leer sind, wird die summe um 1 erhöht bis die summe gleich 4 ist, wenn sie ungleich sind, wird sie auf 1 zurückgesetzt.
hier noch ein Paar Sachen , die man vielleicht braucht:
wenn man das spiel startet, wird das spielfeld ausgegeben und nach der spaltennr. gefragt, danach kommt in diese spalte ein "X" (die chips haben enweder"X" oder "O") , dann kommt aber die fehlermeldung :
Exception in thread "main" kava.lang.NullPointerException
at Spielfeld.gewinnzeile<Spielfeld.java:72> (das ist die Zeile: if(spfeld[zeile][spalte].equals(spfeld[zeile][spalte+1]) && spfeld[zeile][spalte] != null) ...
dann kommen die Zeilen , wo die methode gewinnzeile benutzt wird..
Also ist an meinem Algorithmus mit großer Wahrscheinlichkeit irgendwas falsch. ich bin aber ein blutiger anfänger und kann den Fehler nicht finden
vielleicht darf man zwei Objekte nicht mit "equals.()" vergleichen o.ä? vielleicht hilft mir jemand , plz
Bitte, wenn möglich mit demselben Ansatz , über die Summe, also wenn zwei benachbarte Steine gleich sind , erhöhe die summe und überprüfe ob sie = 4 ist..
mfg, Alex
Code:
public class Spielfeld
{
Chip[][] spielfeld;;
public Spielfeld ()
{
spielfeld = new Chip[7][6];
for (int j=0; j<=5; j++)
{
for (int i=0; i<=6; i++)
{
spielfeld[i][j]=null;
}
}
}
...
public boolean gewinnzeile(Chip[][] spielfeld)
{
Chip[][] spfeld = new Chip[6][7];
spfeld= spielfeld;
for (int zeile=0; zeile<6; zeile++)
{int summe=1;
for (int spalte=0; spalte<6; spalte++)
{
if(spfeld[zeile][spalte].equals(spfeld[zeile][spalte+1]) && spfeld[zeile][spalte] != null)
{summe=summe+1;}
else {summe=1;}
if(summe>=4)
{return true;}
}
}
return false;
}
private boolean gewinnspalte(Chip[][] spielfeld)
{
Chip[][] spfeld = new Chip[6][7];
spfeld=spielfeld;
for (int spalte=0; spalte<7;spalte++)
{int summe=1;
for (int zeile=0; zeile<6; zeile++)
{
if(spfeld[zeile][spalte].equals(spfeld[zeile+1][spalte])& spfeld[zeile][spalte] != null)
summe=summe+1;
else summe=1;
if(summe==4)
return true;}
}
}
return false;
}
hier noch ein Paar Sachen , die man vielleicht braucht:
Code:
public class Chip //deklariert die Klasse Chip
{
//Attribute
public int nr; //es gibt zwei Arten von chips: Chip "1" (X) und Chip "2" (O)
public Spieler spieler;
//....
public class Spieler
{
public String name;
public int nr;
public Spieler (int nummer)
{
nr = nummer;
if(nummer == 1)
name = "Spieler X";
else
name = "Spieler O";
}
Exception in thread "main" kava.lang.NullPointerException
at Spielfeld.gewinnzeile<Spielfeld.java:72> (das ist die Zeile: if(spfeld[zeile][spalte].equals(spfeld[zeile][spalte+1]) && spfeld[zeile][spalte] != null) ...
dann kommen die Zeilen , wo die methode gewinnzeile benutzt wird..
Also ist an meinem Algorithmus mit großer Wahrscheinlichkeit irgendwas falsch. ich bin aber ein blutiger anfänger und kann den Fehler nicht finden
mfg, Alex