Programm nicht Erkennung:TicTacToe Swing Spiel Sieger
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TicTacToe implements ActionListener {
JFrame window = new JFrame("Tic Tac Toe");
JButton b[] = new JButton[9];
String letter = "";
ImageIcon X;
ImageIcon O;
ImageIcon ltr;
int value = 0;
boolean win = false;
public TicTacToe() {
// Assign images
X = new ImageIcon(getClass().getResource("X.png"));
O = new ImageIcon(getClass().getResource("O.png"));
// Create the Window
window.setSize(500,500);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new GridLayout(3,3));
// Add Buttons
for (int i = 0; i < 9; i++) {
b[i] = new JButton();
window.add(b[i]);
}
// Add ActionListener
for (int i = 0; i < 9; i++) {
b[i].addActionListener(this);
}
window.setVisible(true);
}
public void actionPerformed(ActionEvent a) {
value++;
// Who's Turn
if (value % 2 == 1) {
ltr = X;
letter = "X";
}
if (value % 2 == 0) {
ltr = O;
letter = "O";
}
String[] letters = new String[9];
for (int i = 0; i < 9; i++) {
letters[i] = "";
}
// Display Letters
for (int i = 0; i < 9; i++) {
if (a.getSource() == b[i]) {
b[i].setIcon(ltr);
b[i].setDisabledIcon(ltr);
b[i].setEnabled(false);
letters[i] = letter;
// Check what is printing
System.out.println(i + letters[i]);
}
}
// Who Won
// Horizontal
if (letters[0].equals(letters[1]) && letters[1].equals(letters[2]) && !letters[0].equals("")) {
win = true;
} else if (letters[3].equals(letters[4]) && letters[4].equals(letters[5]) && !letters[3].equals("")) {
win = true;
} else if (letters[6].equals(letters[7]) && letters[7].equals(letters[8]) && !letters[6].equals("")) {
win = true;
}
// Vertical
if (letters[0].equals(letters[3]) && letters[3].equals(letters[6]) && !letters[0].equals("")) {
win = true;
} else if (letters[1].equals(letters[4]) && letters[4].equals(letters[7]) && !letters[1].equals("")) {
win = true;
} else if (letters[2].equals(letters[5]) && letters[5].equals(letters[8]) && !letters[2].equals("")) {
win = true;
}
// Diagonal
if (letters[0].equals(letters[4]) && letters[4].equals(letters[8]) && !letters[0].equals("")) {
win = true;
} else if (letters[2].equals(letters[4]) && letters[4].equals(letters[6]) && !letters[2].equals("")) {
win = true;
}
if (win) {
JOptionPane.showMessageDialog(null, "Player " + letter + " wins!");
for (JButton i : b) {
i.setEnabled(false);
}
} else if (!win && value == 9) {
JOptionPane.showMessageDialog(null, "The game ended in a tie.");
}
}
public static void main(String[] args) {
new TicTacToe();
}
}
ich es ursprünglich hatte Buchstaben angezeigt werden, aber ich wollte es Bilder anzuzeigen. Um es zu überprüfen, habe ich ein String-Array erstellt. Ich habe die Icons in der for-Schleife angezeigt, während ich auch die Buchstaben zum String-Array hinzugefügt habe, damit ich sie vergleichen kann.
Es ist nicht zu erkennen, ein Gewinner, wenn es sollte, so dass es aussieht win
wird nicht wahr. Es wird erkannt, wenn alle Tasten gedrückt werden.
System.out.println(i + letters[i]);
soll überprüfen, was die Werte sind, und ich bekomme
0X
1O
2X
3O
4X
5O
6X
7O
8X
so offensichtlich die Buchstaben in der Anordnung sind. Die if-Bedingungen werden nicht korrekt verglichen. Irgendwelche Hilfe, bitte?
Während [dieses Beispiel] (https://stackoverflow.com/questions/32770321/connect-4-check-for-a-win-algorithm/32771401#32771401) für Verbindung vier ist, ist die Grundidee die gleiche – MadProgrammer
Haben Sie im Debugger Ihren Code durchgegangen, um zu sehen, was die Werte sind und wie die Bedingungen bewertet werden? Bitte tu das zumindest vor dem Posten. –
Sie initialisieren Ihr 'letters' Array auf jedem' actionPerformed'. Für jeden Klick gibt es also nur einen Wert im Array. Versuchen Sie, Ihr Array in den Klassenbereich zu verschieben –