Hallo liebe Community,
ich habe mich heute mal als Anfänger an ein kleines Projekt gewagt. Ich habe das Spiel 3 Gewinnt programmiert.(3 gleiche Zeichen in einer Reihe= gewonnen). Es klappt auch alles super bis auf dann, wenn nachdem einer gewonnen hat eine Funktion (neustart(); ) gestartet wird. Denn dann kann man im nächsten Umlauf keine Felder mehr anklicken. Das komische ist jedoch wenn ich die selbe Funktion über einen Button "aufrufe" funktioniert der Neustart. Vielleicht habt ihr eine Idee.
Ich stell zuerst den Teil rein wo ich den Fehler vermute. Dann müsst ihr euch nicht durch 400 Zeilen quälen. Zum Verständnis packe ich natürlich alles nochmal rein.
nun der ganze Quellcode
nun noch die class Feldüberprüfer
Bei Fragen zum Quelltext einfach drunterposten
P.S: Die Erkennung das 3 in einer Reihe sind funktioniert nur für die oberste Reihe. Wollte zuerst den Fehler geklärt haben bevor ich des für die anderen Reihen erweitere. Sollte aber nicht stören.
ich habe mich heute mal als Anfänger an ein kleines Projekt gewagt. Ich habe das Spiel 3 Gewinnt programmiert.(3 gleiche Zeichen in einer Reihe= gewonnen). Es klappt auch alles super bis auf dann, wenn nachdem einer gewonnen hat eine Funktion (neustart(); ) gestartet wird. Denn dann kann man im nächsten Umlauf keine Felder mehr anklicken. Das komische ist jedoch wenn ich die selbe Funktion über einen Button "aufrufe" funktioniert der Neustart. Vielleicht habt ihr eine Idee.
Ich stell zuerst den Teil rein wo ich den Fehler vermute. Dann müsst ihr euch nicht durch 400 Zeilen quälen. Zum Verständnis packe ich natürlich alles nochmal rein.
Java:
private void jBNeustartActionPerformed(ActionEvent evt) { //Button für Neustart
neustart();
}
void neustart(){
for(int i =0; i>8; i++)
{
feld[i]=0;
}
jB14.setText("");
jB14.setEnabled(true);
jB15.setText("");
jB15.setEnabled(true);
jB16.setText("");
jB16.setEnabled(true);
jB24.setText("");
jB24.setEnabled(true);
jB25.setText("");
jB25.setEnabled(true);
jB26.setText("");
jB26.setEnabled(true);
jB34.setText("");
jB34.setEnabled(true);
jB35.setText("");
jB35.setEnabled(true);
jB36.setText("");
jB36.setEnabled(true);
player=true;
winner=0;
for (int b=0 ; b>8;b++)
{
feld[b]=0;
}
}
void tester()
{
winner = Prüfer.Winner(feld[0], feld[1], feld[2], feld[3], feld[4], feld[5], feld[6], feld[7], feld[7]);
if (winner!=0)
{
gewonnen();
}
}
void gewonnen ()
{
if(winner==7)
{
jLErklärung.setText("<html> Der Spieler von X hat gewonnen. \n Herzlichen Glückwunsch<html>\n");
}
if(winner==8)
{
jLErklärung.setText("<html> Der Spieler von O hat gewonnen. \n Herzlichen Glückwunsch<html>\n");
}
}
nun der ganze Quellcode
Java:
package gui;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {
private JButton jBStart;
private JButton jB24;
private JButton jB16;
private JButton jB15;
private JButton jB14;
private JButton jB25;
private JButton jB26;
private JButton jB34;
private JButton jB35;
private JButton jB36;
private JButton jBEnde;
private JLabel jLErklärung;
boolean player=true;//Spielerzuweisung true=x, false=o Optisch
private JButton jBNeustart;
private JButton jBSpielerwechsel;
public int [] feld=new int[] {0,0,0,0,0,0,0,0,0}; //Feld Spielerzugehörigkeitsüberbprüfung 0=unbelegt 1=x 2=o
private int winner;// Rückgabewert von Winner , !!! neu initalisieren bei neustart!!!
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
inst.setTitle("Drei gewinnt 0.1");
}
});
}
public NewJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
pack();
this.setSize(476, 323);
getContentPane().setLayout(null);
{
jBStart = new JButton();
getContentPane().add(jBStart);
jBStart.setText("Spiel Starten");
jBStart.setBounds(25, 222, 115, 23);
}
{
jBEnde = new JButton();
getContentPane().add(jBEnde);
jBEnde.setText("Beenden");
jBEnde.setBounds(276, 222, 88, 23);
jBEnde.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBEndeActionPerformed(evt);
}
});
}
{
jLErklärung = new JLabel ();
getContentPane().add(jLErklärung);
jLErklärung.setBounds(25, 123, 339, 87);
jLErklärung.setFont(new Font ("Arial", Font .ITALIC, 10));
jLErklärung.setText("<html><body>Du kennst doch sicher 3 gewinnt.\r\n Es gibt 2 Spieler einen x Spieler\r\n und einen o Spieler. Durch Klicken \r\nauf ein Feld erscheint sein Zeichen.\r\n Wenn man 3 Zeichen in einer Reihe\r\n hat, hat man gewonnen.\r\n Viel Spaß :)\r\n PS: Dies ist Version 0.1 Fehler sind erlaubt ;) \r\nbitte an [email]bjhmichele@gmx.net[/email] schreiben");
}
{
jB14 = new JButton(); // Hier kann man draufklicken und dann erscheint je nachdem wer draan ist ein x oder ein o
getContentPane().add(jB14);
jB14.setBounds(95, 11, 48, 32);
jB14.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB14ActionPerformed(evt);
}
});
}
{
jB15 = new JButton();
getContentPane().add(jB15);
jB15.setBounds(154, 11, 48, 32);
jB15.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB15ActionPerformed(evt);
}
});
}
{
jB16 = new JButton();
getContentPane().add(jB16);
jB16.setBounds(213, 11, 48, 32);
jB16.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB16ActionPerformed(evt);
}
});
}
{
jB24 = new JButton();
getContentPane().add(jB24);
jB24.setBounds(95, 50, 48, 27);
jB24.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB24ActionPerformed(evt);
}
});
}
{
jB25 = new JButton();
getContentPane().add(jB25);
jB25.setBounds(95, 84, 48, 27);
jB25.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB25ActionPerformed(evt);
}
});
}
{
jB26 = new JButton();
getContentPane().add(jB26);
jB26.setBounds(154, 84, 48, 28);
jB26.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB26ActionPerformed(evt);
}
});
}
{
jB34 = new JButton();
getContentPane().add(jB34);
jB34.setBounds(213, 49, 48, 29);
jB34.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB34ActionPerformed(evt);
}
});
}
{
jB35 = new JButton();
getContentPane().add(jB35);
jB35.setBounds(213, 83, 48, 29);
jB35.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB35ActionPerformed(evt);
}
});
}
{
jB36 = new JButton();
getContentPane().add(jB36);
jB36.setBounds(154, 49, 48, 30);
jB36.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB36ActionPerformed(evt);
}
});
}
{
jBSpielerwechsel = new JButton();
getContentPane().add(jBSpielerwechsel);
jBSpielerwechsel.setText("Spielerwechsel");
jBSpielerwechsel.setBounds(288, 47, 152, 23);
jBSpielerwechsel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBSpielerwechselActionPerformed(evt);
}
});
}
{
jBNeustart = new JButton();
getContentPane().add(jBNeustart);
jBNeustart.setText("Neustart");
jBNeustart.setBounds(288, 81, 152, 23);
jBNeustart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBNeustartActionPerformed(evt);
}
});
}
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
Feldüberprüfer Prüfer= new Feldüberprüfer();
private void jBEndeActionPerformed(ActionEvent evt) {
System.exit(0);
}
private void jB14ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB14.setFont(new Font("Arial", Font.BOLD, 15));
jB14.setText("X");
feld[0]=1;
jB14.setEnabled(false);
}
else
{
System.out.print("Fehlerx");
}
if(player==false)
{
jB14.setFont(new Font("Arial", Font.BOLD, 15));
jB14.setText("O");
feld[0]=2;
jB14.setEnabled(false);
}
else
{
System.out.print("Fehlero");
}
tester();
}
private void jBSpielerwechselActionPerformed(ActionEvent evt) {
if (player==true)
{
player=false;
}
else
{
player=true;
}
tester();
}
private void jB15ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB15.setFont(new Font("Arial", Font.BOLD, 15));
jB15.setText("X");
feld[1]=1;
jB15.setEnabled(false);
}
if(player==false)
{
jB15.setFont(new Font("Arial", Font.BOLD, 15));
jB15.setText("O");
feld[1]=2;
jB15.setEnabled(false);
}
tester();
}
private void jB16ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB16.setFont(new Font("Arial", Font.BOLD, 15));
jB16.setText("X");
feld[2]=1;
jB16.setEnabled(false);
}
if(player==false)
{
jB16.setFont(new Font("Arial", Font.BOLD, 15));
jB16.setText("O");
feld[2]=2;
jB16.setEnabled(false);
}
tester();
}
private void jB24ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB24.setFont(new Font("Arial", Font.BOLD, 15));
jB24.setText("X");
feld[3]=1;
jB24.setEnabled(false);
}
if(player==false)
{
jB24.setFont(new Font("Arial", Font.BOLD, 15));
jB24.setText("O");
feld[3]=2;
jB24.setEnabled(false);
}
tester();
}
private void jB25ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB25.setFont(new Font("Arial", Font.BOLD, 15));
jB25.setText("X");
feld[4]=1;
jB25.setEnabled(false);
}
if(player==false)
{
jB25.setFont(new Font("Arial", Font.BOLD, 15));
jB25.setText("O");
feld[4]=2;
jB25.setEnabled(false);
}
tester();
}
private void jB26ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB26.setFont(new Font("Arial", Font.BOLD, 15));
jB26.setText("X");
feld[5]=1;
jB26.setEnabled(false);
}
if(player==false)
{
jB26.setFont(new Font("Arial", Font.BOLD, 15));
jB26.setText("O");
feld[5]=2;
jB26.setEnabled(false);
}
tester();
}
private void jB34ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB34.setFont(new Font("Arial", Font.BOLD, 15));
jB34.setText("X");
feld[6]=1;
jB34.setEnabled(false);
}
if(player==false)
{
jB34.setFont(new Font("Arial", Font.BOLD, 15));
jB34.setText("O");
feld[6]=2;
jB34.setEnabled(false);
}
tester();
}
private void jB35ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB35.setFont(new Font("Arial", Font.BOLD, 15));
jB35.setText("X");
feld[7]=1;
jB35.setEnabled(false);
}
if(player==false)
{
jB35.setFont(new Font("Arial", Font.BOLD, 15));
jB35.setText("O");
feld[7]=2;
jB35.setEnabled(false);
}
tester();
}
private void jB36ActionPerformed(ActionEvent evt) {
if (player==true)
{
jB36.setFont(new Font("Arial", Font.BOLD, 15));
jB36.setText("X");
feld[8]=1;
jB36.setEnabled(false);
}
if(player==false)
{
jB36.setFont(new Font("Arial", Font.BOLD, 15));
jB36.setText("O");
feld[8]=2;
jB36.setEnabled(false);
}
tester();
}
private void jBNeustartActionPerformed(ActionEvent evt) { //Button für Neustart
neustart();
}
void neustart(){
for(int i =0; i>8; i++)
{
feld[i]=0;
}
jB14.setText("");
jB14.setEnabled(true);
jB15.setText("");
jB15.setEnabled(true);
jB16.setText("");
jB16.setEnabled(true);
jB24.setText("");
jB24.setEnabled(true);
jB25.setText("");
jB25.setEnabled(true);
jB26.setText("");
jB26.setEnabled(true);
jB34.setText("");
jB34.setEnabled(true);
jB35.setText("");
jB35.setEnabled(true);
jB36.setText("");
jB36.setEnabled(true);
player=true;
winner=0;
for (int b=0 ; b>8;b++)
{
feld[b]=0;
}
}
void tester()
{
winner = Prüfer.Winner(feld[0], feld[1], feld[2], feld[3], feld[4], feld[5], feld[6], feld[7], feld[7]);
if (winner!=0)
{
gewonnen();
}
}
void gewonnen ()
{
if(winner==7)
{
jLErklärung.setText("<html> Der Spieler von X hat gewonnen. \n Herzlichen Glückwunsch<html>\n");
}
if(winner==8)
{
jLErklärung.setText("<html> Der Spieler von O hat gewonnen. \n Herzlichen Glückwunsch<html>\n");
}
}
}
nun noch die class Feldüberprüfer
Java:
package gui;
public class Feldüberprüfer {
int Winner(int a, int b, int c, int d, int e, int f, int g, int h, int i)
{
if((a==1 && b==1 && c==1)||(d==1 && e==1 && f==1))
{
return 7; //x hat 3 in einer Reihe, Rückgabe 7
}
if((a==2 && b==2 && c==2)||(d==2 && e==2 && f==2))
{
return 8; //o hat 3 in einer Reihe, Rückgabe 8
}
else
{
return 9; // niemand hat 3 in einer Reihe, Rückgabe 9
}
}
}
Bei Fragen zum Quelltext einfach drunterposten
P.S: Die Erkennung das 3 in einer Reihe sind funktioniert nur für die oberste Reihe. Wollte zuerst den Fehler geklärt haben bevor ich des für die anderen Reihen erweitere. Sollte aber nicht stören.
Zuletzt bearbeitet: