我正在尝试使用GUI元素在Java中编写Tic Tac Toe。我已经为控制台完成了程序,我已经有了一个带有GUI的3x3网格。
我的问题是:如何连接这些程序?我可以通过jButton上的计算机“创建”一次点击吗?
Java网格代码:
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GridLayoutDemo extends javax.swing.JFrame {
boolean kreuz1 = true;
private javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
private javax.swing.JButton[] jButton = new javax.swing.JButton[9];
private int Kreuz[] = new int[9];
public GridLayoutDemo() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setSize(getWidth(), getHeight());
jPanel1.setLayout(new java.awt.GridLayout(3, 3));
ButtonListener bl = new ButtonListener();
for (int i = 0; i < 9; i++) {
jButton[i] = new javax.swing.JButton("");
jButton[i].addActionListener(bl);
jPanel1.add(jButton[i]);
}
this.getContentPane().add(jPanel1);
pack();
}
class ButtonListener implements java.awt.event.ActionListener {
public void actionPerformed(java.awt.event.ActionEvent e) {
for (int i = 0; i < 9; i++) {
if (e.getSource() == jButton[i]) {
if(Kreuz[i]==0){
if (kreuz1 == true) {
Kreuz[i]=1;
jButton[i].setText("X");
kreuz1 = false;
} else {
Kreuz[i]=2;
jButton[i].setText("O");
kreuz1 = true;
}}
}
}
}
}
public static void main(String args[]) {
new GridLayoutDemo().setVisible(true);
}}
我的Tic Tac Toe代码(包含德语):
import java.util.Random;
import java.util.Scanner;
public class TicTactooooo {
int counter = 0;
int x = 0;
int y = 0;
// Kreuz = 1
// Kreis = 2
// leer = 0
int[][] feld1 = new int[3][3];
boolean kreuz1 = true;
boolean Spieler1G = false;
boolean gesetzt = false;
public static void main(String[] args) {
TicTactooooo A = new TicTactooooo();
A.Tic();
}
public void Tic() {
int feld = 0;
System.out.println("Willkommen bei TicTacToe!");
System.out
.println("Drücken sie '1' um zu starten oder '2' um zu verlassen.");
System.out.println("Drücken sie '0' um gegen den Computer zu spielen");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
if (num > 2) {
System.out.println("Bitte wiederholen sie die Eingabe");
System.out.println("Drücken sie '1' um zu starten oder '2' um zu verlassen.");
System.out.println("Drücken sie '0' um gegen den Computer zu spielen");
num = scan.nextInt();
if (num > 2) {
System.out.println("Sie sind leider zu dumm um TicTacToe zu spielen!");
System.exit(0);
}
}
if (num == 2) {
System.exit(0);
}
if (num == 0) {
while (true) {
gesetzt = false;
System.out.println("1|2|3");
System.out.println("4|5|6");
System.out.println("7|8|9");
System.out
.println("Drücken sie, wenn sie aufgefordert werden, die jeweilige Zahl für das jeweilige Feld");
if (kreuz1 == true) {
feld = scan.nextInt();
} else {
feld = TesteSiegCom(feld);
feld = TesteSiegGegner(feld);
if (counter == 1) {
if ((feld1[0][0] | feld1[0][2] | feld1[2][0]
| feld1[2][2] | feld1[2][1] | feld1[1][0]
| feld1[1][2] | feld1[0][1]) == 1) {
feld = 5;
gesetzt = true;
} else {
if (feld1[2][0] == 0) {
feld = 7;
gesetzt = true;
} else {
feld = 1;
gesetzt = true;
}
}
}
if (counter == 3) {
if (gesetzt == false) {
if ((feld1[0][1] & feld1[2][2]) == 1) {
feld = 3;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[0][1] & feld1[2][0]) == 1) {
feld = 1;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[1][2] & feld1[2][0]) == 1) {
feld = 9;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[1][2] & feld1[0][0]) == 1) {
feld = 3;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[2][1] & feld1[0][2]) == 1) {
feld = 9;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[2][1] & feld1[0][0]) == 1) {
feld = 7;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[1][0] & feld1[0][2]) == 1) {
feld = 1;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[1][0] & feld1[2][2]) == 1) {
feld = 7;
gesetzt = true;
}
}
if (gesetzt == false) {
if ((feld1[0][0] | feld1[2][2] | feld1[0][2] | feld1[2][0]) == 1) {
if (feld1[2][1] == 0) {
feld = 8;
gesetzt = true;
}
}
}
if (gesetzt == false) {
if (feld1[0][0] == 0) {
feld = 1;
gesetzt = true;
} else {
if (feld1[2][2] == 0) {
feld = 9;
gesetzt = true;
} else {
feld = 5;
gesetzt = true;
}
}
}
}
if (gesetzt == false) {
Random R = new Random();
feld = R.nextInt(9) + 1;
gesetzt = true;
}
}
Feld9Kreuz(feld);
Ausgabe();
Spieler1gewonnen();
Spieler2gewonnen();
if (counter == 9) {
System.out.println("Unentschieden!");
System.exit(0);
}
}
}
if (num == 1) {
while (true) {
System.out.println("1|2|3");
System.out.println("4|5|6");
System.out.println("7|8|9");
System.out
.println("Drücken sie, wenn sie aufgefordert werden, die jeweilige Zahl für das jeweilige Feld");
feld = scan.nextInt();
Feld9Kreuz(feld);
Ausgabe();
Spieler1gewonnen();
Spieler2gewonnen();
if (counter == 9) {
System.out.println("Unentschieden!");
System.exit(0);
}
}
}
}
private int TesteSiegCom(int feld) {
for (int testsieg = 1; testsieg < 10; testsieg++) {
int a = (testsieg - 1) / 3;
int b = (testsieg - 1) % 3;
if (gesetzt == false) {
if (feld1[a][b] == 0) {
feld1[a][b] = 2;
if (Spieler2Test()) {
feld = testsieg;
gesetzt = true;
}
feld1[a][b] = 0;
}
}
}
return feld;
}
private int TesteSiegGegner(int feld) {
for (int testsieg = 1; testsieg < 10; testsieg++) {
int a = (testsieg - 1) / 3;
int b = (testsieg - 1) % 3;
if (gesetzt == false) {
if (feld1[a][b] == 0) {
feld1[a][b] = 1;
if (Spieler1Test()) {
feld = testsieg;
gesetzt = true;
}
feld1[a][b] = 0;
}
}
}
return feld;
}
private void Spieler2gewonnen() {
if ((feld1[0][0] & feld1[0][1] & feld1[0][2]) == 2
| (feld1[1][0] & feld1[1][1] & feld1[1][2]) == 2
| (feld1[2][0] & feld1[2][1] & feld1[2][2]) == 2
| (feld1[0][0] & feld1[1][1] & feld1[2][2]) == 2
| (feld1[0][2] & feld1[1][1] & feld1[2][0]) == 2
| (feld1[0][0] & feld1[1][0] & feld1[2][0]) == 2
| (feld1[0][1] & feld1[1][1] & feld1[2][1]) == 2
| (feld1[0][2] & feld1[1][2] & feld1[2][2]) == 2) {
System.out
.println("Spieler 2 hat gewonnen! Herzlichen Glückwunsch!");
System.exit(0);
}
}
private void Spieler1gewonnen() {
if ((feld1[0][0] & feld1[0][1] & feld1[0][2]) == 1
| (feld1[1][0] & feld1[1][1] & feld1[1][2]) == 1
| (feld1[2][0] & feld1[2][1] & feld1[2][2]) == 1
| (feld1[0][0] & feld1[1][1] & feld1[2][2]) == 1
| (feld1[0][2] & feld1[1][1] & feld1[2][0]) == 1
| (feld1[0][0] & feld1[1][0] & feld1[2][0]) == 1
| (feld1[0][1] & feld1[1][1] & feld1[2][1]) == 1
| (feld1[0][2] & feld1[1][2] & feld1[2][2]) == 1) {
System.out
.println("Spieler 1 hat gewonnen! Herzlichen Glückwunsch!");
System.exit(0);
}
}
public boolean Spieler1Test() {
return ((feld1[0][0] & feld1[0][1] & feld1[0][2]) == 1
| (feld1[1][0] & feld1[1][1] & feld1[1][2]) == 1
| (feld1[2][0] & feld1[2][1] & feld1[2][2]) == 1
| (feld1[0][0] & feld1[1][1] & feld1[2][2]) == 1
| (feld1[0][2] & feld1[1][1] & feld1[2][0]) == 1
| (feld1[0][0] & feld1[1][0] & feld1[2][0]) == 1
| (feld1[0][1] & feld1[1][1] & feld1[2][1]) == 1 | (feld1[0][2]
& feld1[1][2] & feld1[2][2]) == 1);
}
public boolean Spieler2Test() {
return ((feld1[0][0] & feld1[0][1] & feld1[0][2]) == 2
| (feld1[1][0] & feld1[1][1] & feld1[1][2]) == 2
| (feld1[2][0] & feld1[2][1] & feld1[2][2]) == 2
| (feld1[0][0] & feld1[1][1] & feld1[2][2]) == 2
| (feld1[0][2] & feld1[1][1] & feld1[2][0]) == 2
| (feld1[0][0] & feld1[1][0] & feld1[2][0]) == 2
| (feld1[0][1] & feld1[1][1] & feld1[2][1]) == 2 | (feld1[0][2]
& feld1[1][2] & feld1[2][2]) == 2);
}
private void Ausgabe() {
if (feld1[0][0] == 0) {
System.out.print(" |");
} else {
if (feld1[0][0] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if (feld1[0][1] == 0) {
System.out.print(" |");
} else {
if (feld1[0][1] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if ((feld1[0][2] == 0)) {
System.out.println(" ");
} else {
if (feld1[0][2] == 1) {
System.out.println("X ");
} else {
System.out.println("O ");
}
}
if (feld1[1][0] == 0) {
System.out.print(" |");
} else {
if (feld1[1][0] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if (feld1[1][1] == 0) {
System.out.print(" |");
} else {
if (feld1[1][1] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if (feld1[1][2] == 0) {
System.out.println(" ");
} else {
if (feld1[1][2] == 1) {
System.out.println("X ");
} else {
System.out.println("O ");
}
}
if (feld1[2][0] == 0) {
System.out.print(" |");
} else {
if (feld1[2][0] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if (feld1[2][1] == 0) {
System.out.print(" |");
} else {
if (feld1[2][1] == 1) {
System.out.print("X|");
} else {
System.out.print("O|");
}
}
if (feld1[2][2] == 0) {
System.out.println(" ");
} else {
if (feld1[2][2] == 1) {
System.out.println("X ");
} else {
System.out.println("O ");
}
}
}
private void Feld9Kreuz(int feld) {
x = (feld - 1) / 3;
y = (feld - 1) % 3;
if (feld1[x][y] != 0) {
System.out.println("Das Feld ist leider schon belegt!");
} else {
if (kreuz1 == true) {
feld1[x][y] = 1;
kreuz1 = false;
} else {
feld1[x][y] = 2;
kreuz1 = true;
}
counter++;
}
}
}