Frage an java – Tic Tac Toe Java

1

Ich bin ein Anfänger im Erlernen der Java-Programmierung und spiele Tic Tac Toe.

Wenn ich mein Spiel beendet habe, kann ich das Spiel nicht fortsetzen, da das Programm beendet wird. Was soll ich diesem Code hinzufügen? Da ich die Paint-Methode nicht verwende, kann repaint () nicht verwendet werden.

import java.awt.*;  
import java.awt.event.*;
import javax.swing.*;

public class TicTacToeV1 implements ActionListener {
    /*Instance Variables*/
    private JFrame window = new JFrame("Tic-Tac-Toe");
    private JButton button1 = new JButton("");
    private JButton button2 = new JButton("");
    private JButton button3 = new JButton("");
    private JButton button4 = new JButton("");
    private JButton button5 = new JButton("");
    private JButton button6 = new JButton("");
    private JButton button7 = new JButton("");
    private JButton button8 = new JButton("");
    private JButton button9 = new JButton("");

    private String letter = "";
    public static int count = 0;
    public TicTacToeV1(){           
        /*Create Window*/
        window.setSize(300,300);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new GridLayout(3,3));

        /*Add Buttons To The Window*/
        window.add(button1);
        window.add(button2);
        window.add(button3);
        window.add(button4);
        window.add(button5);
        window.add(button6);
        window.add(button7);
        window.add(button8);
        window.add(button9);

        /*Add The Action Listener To The Buttons*/
        button1.addActionListener(this);
        button2.addActionListener(this);
        button3.addActionListener(this);
        button4.addActionListener(this);
        button5.addActionListener(this);
        button6.addActionListener(this);
        button7.addActionListener(this);
        button8.addActionListener(this);
        button9.addActionListener(this);

        /*Make The Window Visible*/
        window.setVisible(true);

        String input = JOptionPane.showInputDialog("Please select ur pawn: \n1) X\n2) O");
        int pawn = Integer.parseInt(input);
        if ( input.equals("2")){
              setCount(1);
        }
    }

    public static void setCount (int co){
        count = co;            
    }

    public void actionPerformed(ActionEvent a) {    
        count++;

        /*Calculate Who's Turn It Is*/
        if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9|| count == 11){
            letter = "X";

        } else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){
            letter = "O";
        }

        /*Display X's or O's on the buttons*/
        if(a.getSource() == button1){
            button1.setText(letter);
            button1.setEnabled(false);
        } else if(a.getSource() == button2){
            button2.setText(letter);
            button2.setEnabled(false);
        } else if(a.getSource() == button3){
            button3.setText(letter);
            button3.setEnabled(false);
        } else if(a.getSource() == button4){
             button4.setText(letter);
             button4.setEnabled(false);
        } else if(a.getSource() == button5){
             button5.setText(letter);
             button5.setEnabled(false);
        } else if(a.getSource() == button6){
             button6.setText(letter);
             button6.setEnabled(false);
        } else if(a.getSource() == button7){
             button7.setText(letter);
             button7.setEnabled(false);
        } else if(a.getSource() == button8){
             button8.setText(letter);
             button8.setEnabled(false);
        } else if(a.getSource() == button9){
             button9.setText(letter);
             button9.setEnabled(false);
        }       
    }

    public static void main(String[] args){           
            new TicTacToeV1();
    }
}
Gib es einreset() Methode, bei der Sie den Status Ihres Programms zurücksetzen und dies über den ActionListener eines resetButtons aufrufen. Hovercraft Full Of Eels
Mit meinem Browser scrollt sie ... Dave Newton
Anmerkungen 1 + 2: Wenn Sie nach jeder Zeile eine Leerzeile einfügen, dient dies nicht zur Strukturierung der Ausgabe. 2: Wenn Sie die Variablen jb1, jb2 usw. benennen, verwenden Sie verkrüppelte Arrays ohne all ihre Vorteile. user unknown
Man sollte sich hier wirklich zweidimensionale Arrays ansehen - würde den Code bei weitem vereinfachen und auch das machenreset Methode Hovercraft schlägt einfacher. Auch wenn etwas Platz im Allgemeinen als eine gute Idee angesehen wird, kann man es übertreiben. Voo

Deine Antwort

2   die antwort
1

um den Gewinner oder ein fertiges Spiel zu ermitteln. Deshalb habe ich den Code nach count == 9 hinzugefügt.

import java.awt.*;  
import java.awt.event.*;
import javax.swing.*;

public class TicTacToeV1 extends JFrame implements ActionListener {
    private JButton [] button  = new JButton [9];
    private int count = 0;

    public TicTacToeV1 () {           
        super ("Tic-Tac-Toe");
        setSize (300, 300);
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        setLayout (new GridLayout (3, 3));
        init ();
    }

    private void init () {           
        count = 0;
        for (int i = 0; i < 9; ++i) {
            button [i] = new JButton ("");
            button [i].addActionListener (this);
            add (button [i]);
        }
        setVisible (true);
    }

    public void actionPerformed (ActionEvent a) {    
        String letter = (++count % 2 == 1) ? "X" : "O";
        /*Display X's or O's on the buttons*/
        for (JButton jb : button) 
        if (a.getSource () == jb) {
            jb.setText (letter);
            jb.setEnabled (false);
        }
        if (count == 9) {
            for (JButton jb : button) 
                remove (jb) ;
            init ();
        }
    }

    public static void main (String [] args) {           
        new TicTacToeV1 ();
    }
}

Ich stelle den variablen Teil in seine eigene Methode (init) und rufe ihn vom Ctor oder von der Spielende-Methode aus auf.

Natürlich können Sie von dort auch einen neuen Ctor anrufen. Oder setzen Sie einfach den Tastenzustand und den Zähler zurück. Es gibt viele Wege nach Rom. Obwohl dies keine Rolle spielen sollte, können durch das Vermeiden von 100 beendeten Spielen mit all ihren Schaltflächen etwa 10 KB Speicher eingespart werden.

@MadBurn: Ja, aber Neueinsteiger bekommen normalerweise Probleme bei der Initialisierung von Arrays von Nicht-Primitiven. Verwechseln Sie das Array für 9 Buttons mit den 9 Button selbst, holen Sie sich daher NPEs, und ich habe eine funktionierende Lösung ohne eine sinnvolle Erkennung neuer Spiele gefunden. user1403675 kann es sich ansehen und versuchen, dasselbe zu schreiben, ohne es erneut zu betrachten, oder es auszuschneiden und einzufügen. das ist seine wahl. Er hat einen unbenutzten Code, um das Symbol auszuwählen, das der erste Spieler verwendet, und muss etwas tun, damit es funktioniert. user unknown
Dies ist ein sehr häufiges CS-Kursproblem (es handelt sich wahrscheinlich um Hausaufgaben). Das Korrigieren seiner gesamten Methode, sodass er nur kopieren und einfügen kann, macht ihn nicht zu einem besseren Programmierer. mawburn
1

nd führen Sie die folgenden Schritte aus:

Setzen Sie jeden Textwert zurück.Zähler auf 0 zurücksetzen.

Möglicherweise möchten Sie ein Array [] (oder ein 2D-Array, wenn Sie wissen, wie man >> [] []) für die Schaltflächen erstellt und die Verwaltung vereinfacht. Dies ermöglicht eine bessere Verwaltung vieler Schaltflächen und beseitigt unnötige Wiederholungen Ihres aktuellen Codes.

Beispielcode:

public static void reset() {
    button1.setText("");
    button1.setEnabled(true);
    //etc...
    count = 0;
}

Dann rufen Sie einfach reset () auf, wenn das Spiel endet (Sie können auch überprüfen, wer gewonnen hat).

Hoffe das hilft und DFTBA. :)

Verwandte Fragen