4Gewinnt fast fertig

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 4Gewinnt fast fertig

    Hallo,

    ich habe mein 4gewinnt nun fast fertig programmiert, Steine werden gesetzt etc.
    Nur noch ein Problem:

    Ich will, dass das Programm erkennt, wenn 4 Steine vertikal, horizontal oder diagonal in reihe sind. Dann soll eine Ausgabe erfolgen: "Spieler X hat gewonnen!"


    Wäre nett wenn das jemand machen könnte, ich weiß nicht weiter und habe den Code nicht ganz selbst gemacht, habe keine Vorkentnisse!
    Hier die Elemente:


    SPIEL


    public class SPIEL{ public LAMPE[][] spielfeld; int groesse, zaehler; public SPIEL() { groesse=20; spielfeld = new LAMPE[7][6]; for (int i = 0; i<7; i++) for (int k = 0; k<6; k++) spielfeld[k] = new LAMPE(150+2*groesse*i,120+2*groesse*k, groesse); zaehler=0; }
    public void zeichne() { for (int i = 0; i<7;i++) for (int k = 0; k<6;k++) spielfeld[i][k].zeichne(); for (int i = 0; i<6;i++); } public void loeschen() { for (int i = 0; i<7; i++) for (int k = 0; k<6; k++) spielfeld[i][k].neuefarbe(7); } public int farbeholen(int posx, int posy) { return spielfeld[posx][posy].holfarbe(); } public int farbtest(int spalte) { int i =6; while (spielfeld[spalte][i].holfarbe()!=7) i--; return i; } public void allesneu() { loeschen(); } public boolean setzen(int spalte, int setzfarbe) { boolean setzja=false; int k=5; while (farbeholen(spalte,k)!=7) k--; if (k>-1) { setzja =true; zaehler++; spielfeld[spalte][k].neuefarbe(setzfarbe); } return setzja; } public int zaehlerzustand() { return zaehler; } }




    LAMPE
    public class LAMPE{ private int px,py; protected int radius, farbe; public LAMPE(int startx, int starty, int radiusneu) { px = startx; py = starty; farbe = 7; radius = radiusneu; }
    public void zeichne() { ZEICHENFENSTER.gibFenster().zeichneRechteck(px, py, 2*radius, 2*radius); ZEICHENFENSTER.gibFenster().fuelleKreis(px+radius, py+radius, radius, farbe); } public int holfarbe() { return farbe; } public void neuefarbe(int fneu) { farbe=fneu; }



    SPIELSTEUERUNG
    import javax.swing.*;import java.awt.event.*;import java.util.Random;public class SPIELSTEUERUNG{ private SPIEL s; private JButton Reihe1, Reihe2, Reihe3, Reihe4, Reihe5, Reihe6, Reihe7, start; private JLabel anzeige; public int links, oben, laenge, breite, farbe, spieler, anzahl; public SPIELSTEUERUNG() { s = new SPIEL(); start = new JButton("START"); Reihe1 = new JButton(" REIHE1 "); Reihe2 = new JButton(" REIHE2 "); Reihe3 = new JButton(" REIHE3 "); Reihe4 = new JButton(" REIHE4 "); Reihe5 = new JButton(" REIHE5 "); Reihe6 = new JButton(" REIHE6 "); Reihe7 = new JButton(" REIHE7 "); s.zeichne(); start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent st) { spielen(); } } ); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(start,"rechts"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe1,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe2,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe3,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe4,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe5,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe6,"unten"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(Reihe7,"unten"); ZEICHENFENSTER.gibFenster().zeichneRechteck(links, oben, laenge, breite); ZEICHENFENSTER.gibFenster().fuelleRechteck(links, oben, laenge, breite, farbe); links = 240; oben = 30; laenge = 100; breite = 50; farbe = 2; spieler = 1; } public void spielen() { allesneu(); Reihe1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r1) { steinesetzen(0); if (pruefen() ==true) ausgabe(); } } ); Reihe2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r2) { steinesetzen(1); if (pruefen() ==true) ausgabe(); } } ); Reihe3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r3) { steinesetzen(2); if (pruefen() ==true) ausgabe(); } } ); Reihe4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r4) { steinesetzen(3); if (pruefen() ==true) ausgabe(); } } ); Reihe5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r5) { steinesetzen(4); if (pruefen() ==true) ausgabe(); } } ); Reihe6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r6) { steinesetzen(5); if (pruefen() ==true) ausgabe(); } } ); Reihe7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r7) { steinesetzen(6); if (pruefen() ==true) ausgabe(); } } ); } public void ausgabe() { if (spieler==1) System.out.println("Spieler 1 hat gewonnen"); else System.out.println("Spieler 2 hat gewonnen");
    } public void steinesetzen(int spalte) { anzahl=s.zaehlerzustand(); if (spieler==1) { if (s.setzen(spalte,4)==true) { s.zeichne(); spieler=2; } } else { if (s.setzen(spalte,6)==true) { s.zeichne(); spieler=1; } } } public void allesneu() { s.allesneu(); spieler=1; s.zeichne(); } public boolean pruefen() { boolean gewonnen = false; for(int i=0;i<6;i++) { for (int k=0;k<4;k++) { if ((s.farbeholen(i,k)==s.farbeholen(i,k+1))&&(s.farbeholen(i,k+1)==s.farbeholen(i,k+2))&&(s.farbeholen(i,k+2)==s.farbeholen(i,k+3))) gewonnen = true;
    }} for(int i=0;i<7;i++) for (int k=0;k<4;k++) if ((s.farbeholen(i,k)==s.farbeholen(i,k+1))&&(s.farbeholen(i,k+1)==s.farbeholen(i,k+2))&&(s.farbeholen(i,k+2)==s.farbeholen(i,k+3))) gewonnen = true; // Überprüfeung der gesetzten Steine return gewonnen; }}
  • Ich würde die Abfrage so machen:

    sobald ein Spieler einen Stein geworfen hat, wird mit hilfe einer Schleife die KästchenID(glaub mal das jedes Kästchen eine ID hat) sollte um das Kästchen ein gleicher Stein liegen so wird die ID vom nächsten Steinchen überprüft ob dort im Umkreis(In bestimmte Richtung und berücksichtigung der zuvor benutzen ID) ein weiterer Stein liegt

    z.B Kästchen ID

    [01][02][03][04]
    [05][06][07][08]
    [09][10][11][12]
    [13][14][15][16]

    [01][02][##][04]
    [05][06][XX][08]
    [09][XX][##][12]
    [XX][##][##][16]

    vllt. verstehst du was ich meine ... ;)
  • Ich würde es so machen: Bei jedem Steinwurf prüfen, ob neben diesem (neuen) Stein bereits ein Stein gleicher Farbe liegt. Wenn nicht, geht das Spiel weiter. Wenn allerdings ein Stein gefunden wurde, wird dann von diesem Stein ausgehend nach gleichfarbigen Steinen gesucht. Natürlich muss es mindestens zwei Steine geben, die diesen Stein als Nachbarn haben. Und so weiter ...
    =O