Hallo
also ich hab ein GO-Spiel geschrieben und das in Java das Feld is 9*9 und die Gewinnprüfung is nur auf das Standart gesetzt.
sprich das:
schwarz
schwarz weiß schwarz
schwarz
und umgekehrt
jetzt ist mein Problem das ich sobald ich einen weißen stein in ein solches belegtes Feld lege,..
schwarz
schwarz schwarz
schwarz
kommt als ausgabe das man da nicht setzten sollte weil es selbstmord wäre und der spieler kann iwo anders seinen stein platzieren.
Nun das Problem ist wenn ich das ganze in Weiß habe,..
weiß
weiß weiß
weiß
und da nen schwarzen stein reinlege erscheint dann einfach ein weißer stein....
es ist aber die genau gleiche if-abfrage nur auf die andere farbe zugeschnitten.
Ein weiteres Problem ist das mein Spielfeldgitter über den Spielsteinen liegt sprich man sieht es gut bei den Weißen steinen die somit hinter dem Gitter erscheinen. Keine Ahnung wieso das so is.
Ich hab das Programm in zwei Klassen geteilt einmal die GOGUI für die Grafische sache und die Logik für den logischen teil
pls meldet euch und vllt bekommt ihr das ja hin
also ich hab ein GO-Spiel geschrieben und das in Java das Feld is 9*9 und die Gewinnprüfung is nur auf das Standart gesetzt.
sprich das:
schwarz
schwarz weiß schwarz
schwarz
und umgekehrt
jetzt ist mein Problem das ich sobald ich einen weißen stein in ein solches belegtes Feld lege,..
schwarz
schwarz schwarz
schwarz
kommt als ausgabe das man da nicht setzten sollte weil es selbstmord wäre und der spieler kann iwo anders seinen stein platzieren.
Nun das Problem ist wenn ich das ganze in Weiß habe,..
weiß
weiß weiß
weiß
und da nen schwarzen stein reinlege erscheint dann einfach ein weißer stein....
es ist aber die genau gleiche if-abfrage nur auf die andere farbe zugeschnitten.
Ein weiteres Problem ist das mein Spielfeldgitter über den Spielsteinen liegt sprich man sieht es gut bei den Weißen steinen die somit hinter dem Gitter erscheinen. Keine Ahnung wieso das so is.
Ich hab das Programm in zwei Klassen geteilt einmal die GOGUI für die Grafische sache und die Logik für den logischen teil
Code:
GOGUI
import java.applet.Applet;
import java.awt.*;
public class GOGUI extends Applet
{
private static final long serialVersionUID = 1L;
private int[][][] spielfeld=new int[3][9][9];
private int farbe=1;
private boolean gewonnen=false;
private int[] anzahlsiege=new int [2];
private boolean easteregg=false;
private boolean infobutton=false;
private int[] anzahlsteine=new int [2];
public GOGUI()
{
// this.spielfeld[3][9][9] = 0;
this.farbe = 1;
this.gewonnen = false;
// this.anzahlsiege[2] = 0;
this.easteregg = false;
}
public GOGUI(int[][][] spielfeld, int farbe, boolean gewonnen)throws HeadlessException {
super();
this.spielfeld = spielfeld;
this.farbe = farbe;
this.gewonnen = gewonnen;
// this.anzahlsiege = anzahlsiege;
// this.easteregg = easteregg;
}
public int[][][] getSpielfeld() {
return spielfeld;
}
public void setSpielfeld(int[][][] spielfeld) {
this.spielfeld = spielfeld;
}
public int getFarbe() {
return farbe;
}
public void setFarbe(int farbe) {
this.farbe = farbe;
}
public boolean getGewonnen() {
return gewonnen;
}
public void setGewonnen(boolean gewonnen) {
this.gewonnen = gewonnen;
}
public int[] getAnzahlsiege() {
return anzahlsiege;
}
public void setAnzahlsiege(int[] anzahlsiege) {
this.anzahlsiege = anzahlsiege;
}
public boolean isEasteregg() {
return easteregg;
}
public void setEasteregg(boolean easteregg) {
this.easteregg = easteregg;
}
public boolean isInfobutton() {
return infobutton;
}
public void setInfobutton(boolean infobutton) {
this.infobutton = infobutton;
}
public int[] getAnzahlsteine() {
return anzahlsteine;
}
public void setAnzahlsteine(int[] anzahlsteine) {
this.anzahlsteine = anzahlsteine;
}
public void paint (Graphics stift)
{
setBackground(new Color (232,206,29));
stift.setFont(new Font("Arial",Font.PLAIN,36));
stift.drawString("GO", 300, 100);
for(int kx=0;kx<9;kx++)
for(int ky=0;ky<9;ky++)
{
if(spielfeld[0][kx][ky]==0)
{
//waagrechte Linie
for(int i=50;i<=450;i=i+50)
stift.drawLine(125, i+75, 525, i+75);
//senkrechte Linie
for(int i=50;i<=450;i=i+50)
stift.drawLine(i+75, 125, i+75, 525);
}
else
{
// bei click werden kringel da und da gemalt
if(spielfeld[0][kx][ky]==1)
stift.fillOval(spielfeld[1][kx][ky]+52, spielfeld[2][kx][ky]+52, 45, 45);
else
{
if(spielfeld[0][kx][ky]==2)
{
stift.setColor(Color.WHITE);
stift.fillOval(spielfeld[1][kx][ky]+52, spielfeld[2][kx][ky]+52, 45, 45);
stift.setColor(Color.BLACK);
stift.drawOval(spielfeld[1][kx][ky]+52, spielfeld[2][kx][ky]+52, 45, 45);
}
}
}
//Info-Anzeige LINKS
stift.drawRect(5, 125, 90, 200);
stift.setFont(new Font("Arial",Font.PLAIN,15));
stift.drawString("Erstellt von:", 7, 293);
stift.setFont(new Font("Arial",Font.PLAIN,12));
stift.drawString("Adrian Biehler", 7, 305);
stift.drawString("2BKI2 HvDetten", 7, 317);
//Spieler-Anzeige UNTEN
stift.drawRect(125,555,400,150);
stift.setFont(new Font("Arial",Font.PLAIN,20));
stift.fillRect(130,630,390,2);
stift.fillRect(324,558,2,145);
//Spieler Schwarz
stift.drawString("Spieler 1:",150,600);
stift.drawString("Anzahl Siege:",150,660);
stift.drawString(" "+anzahlsiege[0], 280, 660);
stift.drawString("Anzahl Steine:",150,690);
stift.drawString(" "+anzahlsteine[0], 280, 690);
//Stein
stift.setColor(Color.BLACK);
stift.fillOval(250,570,45,45);
//Spieler Weiß
stift.drawString("Spieler 2:",350,600);
stift.drawString("Anzahl Siege:",350,660);
stift.drawString(" "+anzahlsiege[1], 480, 660);
stift.drawString("Anzahl Steine:",350,690);
stift.drawString(" "+anzahlsteine[1], 480, 690);
//Stein
stift.setColor(Color.WHITE);
stift.fillOval(450,570,45,45);
stift.setColor(Color.BLACK);
stift.drawOval(450,570,45,45);
//Schrifterscheinung in der GUI
//Easteregg
if(easteregg==true)
stift.drawString("2F9E7 hex", 288, 120);
//Info
if(infobutton==true)
{
stift.fillRect(555, 222, 230, 265);
stift.setColor(Color.getHSBColor(232,206,29));
stift.fillRect(557, 224, 226, 261);
stift.setColor(Color.BLACK);
stift.drawString("Um dieses Spiel zu", 560, 245);
stift.drawString("Gewinnen, muss man", 560, 265);
stift.drawString("einen gegnerischen Stein", 560, 285);
stift.drawString("von jeder Seite sprich,", 560, 305);
stift.drawString("von Oben, Unten, Links", 560, 325);
stift.drawString("und Rechts, zusetzen.", 560, 345);
stift.drawString("Beispiel:", 560, 365);
//Beispiel für GewonnenBild
//Liniensenk
stift.drawLine(595, 370, 595, 480);
stift.drawLine(630, 370, 630, 480);
stift.drawLine(665, 370, 665, 480);
stift.drawLine(700, 370, 700, 480);
stift.drawLine(735, 370, 735, 480);
//Linienwaag
stift.drawLine(580, 390, 750, 390);
stift.drawLine(580, 425, 750, 425);
stift.drawLine(580, 460, 750, 460);
//Schwarz
stift.fillOval(650, 375, 30, 30);
stift.fillOval(615, 410, 30, 30);
stift.fillOval(685, 410, 30, 30);
stift.fillOval(650, 445, 30, 30);
//Weiß
stift.setColor(Color.WHITE);
stift.fillOval(650, 410, 30, 30);
stift.setColor(Color.BLACK);
stift.drawOval(650, 410, 30, 30);
}
//Gewinn setzung
stift.setFont(new Font("Arial",Font.PLAIN,20));
if(gewonnen==true)
stift.drawString("hat Gewonnen!", 650, 200);
else
stift.drawString("ist dran", 650,200);
if (farbe==1)
{
stift.setColor(Color.BLACK);
stift.fillOval(595,170,45,45);
}
else
{
stift.setColor(Color.WHITE);
stift.fillOval(595,170,45,45);
stift.setColor(Color.BLACK);
stift.drawOval(595,170,45,45);
}
}
}
}
Code:
Logik
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Logik extends GOGUI implements MouseListener, ActionListener{
private static final long serialVersionUID = 1L;
Button info = new Button("Info");
Button nochmal = new Button("Neues Spiel");
String Spielerfarbe;
public static void main (String[] args)
{
GOGUI A = new GOGUI ();
A.getFarbe();
A.getSpielfeld();
A.getGewonnen();
A.getAnzahlsiege();
A.getAnzahlsteine();
}
public void init()
{
setSize(800,770);
addMouseListener(this);
setLayout(null);
add(info);
add(nochmal);
nochmal.disable();//Läßt sich auch unnötig in eine Methode auslagern
info.addActionListener(this);
nochmal.addActionListener(this);
info.setBounds(10,130,80,70);
nochmal.setBounds(10,205,80,70);
// Spielfeld leeren bzw. auf 0 setzen
for(int kx=0;kx<9;kx++)
for(int ky=0;ky<9;ky++)
getSpielfeld()[0][kx][ky]=0;
// jeweilige X-Koordinate
for(int kx=0;kx<9;kx++)
for(int ky=0;ky<9;ky++)
getSpielfeld()[1][kx][ky]=kx*50+50;
// jeweilige Y-Koordinate
for(int kx=0;kx<9;kx++)
for(int ky=0;ky<9;ky++)
getSpielfeld()[2][kx][ky]=ky*50+50;
if(getFarbe()==1)
Spielerfarbe="SCHWARZ";
else
Spielerfarbe="WEIß";
} //init() Ende
//Hier wird beim Klicken umgerechnet wo man den Spielstein zeichnet
public int getSpalte(int mauskoordinate_x)
{
return ((int)(mauskoordinate_x/50)-2);
}
public int getZeile(int mauskoordinate_y)
{
return ((int)(mauskoordinate_y/50)-2);
}
//Wechselt den Spieler
public void wechsleSpieler()
{
if(getFarbe()==1)
setFarbe(2);
else
setFarbe(1);
}
//Hier läuft die Gewinnabfrage ab
public int Gewinnprüfung()
{
for(int spieler=1;spieler<=2;spieler++)
for(int spalte=0;spalte<=6;spalte++)
for(int zeile=0;zeile<=7;zeile++)
{
if((getSpielfeld()[0][spalte][zeile]==1)&&(getSpielfeld()[0][spalte+1][zeile]==spieler+1)&&(getSpielfeld()[0][spalte+2][zeile]==spieler)&&(getSpielfeld()[0][spalte+1][zeile+1]==spieler)&&(getSpielfeld()[0][spalte+1][zeile-1]==spieler))
{
setGewonnen(true);
wechsleSpieler();
if(getFarbe()==1)
getAnzahlsiege()[0]++;
return 1;
}
if((getSpielfeld()[0][spalte][zeile]==2)&&(getSpielfeld()[0][spalte+1][zeile]==spieler-1)&&(getSpielfeld()[0][spalte+2][zeile]==spieler)&&(getSpielfeld()[0][spalte+1][zeile+1]==spieler)&&(getSpielfeld()[0][spalte+1][zeile-1]==spieler))
{
setGewonnen(true);
wechsleSpieler();
if(getFarbe()==2)
getAnzahlsiege()[1]++;
return 2;
}
}
return 0;
} //Gewinnprüfung() Ende
//Sobald man mit der Maus klickt passiert folgendes
public void mouseClicked(MouseEvent arg0)
{
if(isInfobutton()==true)
setInfobutton(false);
if (getGewonnen()==false)
{
System.out.println("Spieler " + getFarbe() + " setzte seinen Stein auf:");
int x = arg0.getX();
int spalte = getSpalte(x);
System.out.println("s=" + spalte);
int y = arg0.getY();
int zeile = getZeile(y);
System.out.println("z=" + zeile);
if(getSpielfeld()[0][spalte][zeile]==0)
{
getSpielfeld()[0][spalte][zeile] = getFarbe();
// Die Folgenden 2 if-Abfragen lösen große Probleme in der Spalte 0 sowie 8 aus. Und die Farbe Schwarz beim setzten in einen Selbstmord
if(getFarbe()==1)
{
getAnzahlsteine()[0]++;
if(getSpielfeld()[0][spalte+1][zeile]==2 && getSpielfeld()[0][spalte-1][zeile]==2 && getSpielfeld()[0][spalte][zeile+1]==2 && getSpielfeld()[0][spalte][zeile-1]==2)
{
setFarbe(2);
setGewonnen(true);
}
}
if(getFarbe()==2)
{
getAnzahlsteine()[1]++;
if(getSpielfeld()[0][spalte+1][zeile]==1 && getSpielfeld()[0][spalte-1][zeile]==1 && getSpielfeld()[0][spalte][zeile+1]==1 && getSpielfeld()[0][spalte][zeile-1]==1)
{
setFarbe(1);
setGewonnen(true);
}
}
if (Gewinnprüfung() != 0)
System.out.println("Gewonnen hat der Spieler: "+Gewinnprüfung()+" oder "+Spielerfarbe);
else
wechsleSpieler();
}
else
System.out.println("Zug nicht möglich");
repaint();
}
if(getGewonnen()==true)
{
nochmal.enable();//Läßt sich auch unnötig in eine Methode auslagern
System.out.print("Neues Spiel?");
}
} //mouseClicked() Ende
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
//Soll man net so gut sehen xD (kleinmacht)
public void mousePressed(MouseEvent arg0){
int x = arg0.getX();
int y = arg0.getY();
if(x>=331 && x<=348 && y>=76 && y<=94){
setEasteregg(true);
repaint();}}
public void mouseReleased(MouseEvent arg0){
setEasteregg(false);
repaint();}
public void actionPerformed(ActionEvent e)
{
//Aufgabe Button "Info"
if(e.getSource().equals(info))
{
setInfobutton(true);
repaint();
}
//Aufgabe Button "Neues Spiel"
if(e.getSource().equals(nochmal))
{
// Spielfeld leeren bzw. auf 0 setzen
for(int x=0;x<9;x++)
for(int y=0;y<9;y++)
getSpielfeld()[0][x][y]=0;
// jeweilige X-Koordinate
for(int x=0;x<9;x++)
for(int y=0;y<9;y++)
getSpielfeld()[1][x][y]=x*50+50;
// jeweilige Y-Koordinate
for(int x=0;x<9;x++)
for(int y=0;y<9;y++)
getSpielfeld()[2][x][y]=y*50+50;
setGewonnen(false);
setFarbe(1);
getAnzahlsteine()[0]=0;
getAnzahlsteine()[1]=0;
System.out.println(" ");
System.out.println("Das neue Spiel startet ab hier");
System.out.println("------------------------------");
repaint();
}
} //actionPerformed Ende
} //Logik-Class Ende
//Probleme
//*größtes Problem ist die Spalte 8 und manchmal die Spalte 0.*
//
//Gitter geht von rechts unten immer weiter nach links vor die steine.
//Sollte aber immer vor den steinen sein.
//
//Die Abfragen in der mouseClicked führen zu einem teilweisen nicht richtigen Umsetzten und behindern
//die Spalte 8 und ab und zu die Spalte 0.
//
//Manchmal löst sich die Gewinnabfrage von selbst aus obwohl die gegebenen Steine nicht an ihren Orten sind.
pls meldet euch und vllt bekommt ihr das ja hin
Zuletzt bearbeitet: