Public feed
#602486
import java.util.Random;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TicTacToe extends JFrame implements ActionListener{ private static JButton[] bbox = new JButton[9]; private static JLabel lblwin = new JLabel(""), lblblank = new JLabel(""); public static String[][] boxes = new String[3][3]; // row,col public static int danger = 0; public static int first = 0; public TicTacToe() { super("Tic Tac Toe!"); super.setSize(200, 270); super.setResizable(false); getContentPane().setLayout(new GridLayout(4, 3)); // makes the form's X button work addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); for (int i = 0; i < bbox.length; i++) { bbox[i] = new JButton(" "); bbox[i].setFont(new Font("Verdana", Font.BOLD, 18)); bbox[i].addActionListener(this); getContentPane().add(bbox[i]); } lblwin.setFont(new Font("Verdana", Font.BOLD, 14)); getContentPane().add(lblblank); getContentPane().add(lblwin); setVisible(true); } public void actionPerformed(ActionEvent evt) { int square = -1; for (int h = 0; h < 9; h++) if (evt.getSource() == bbox[h]) square = h; if (boxes[square / 3][square % 3] == "") { bbox[square].setText("X"); boxes[square / 3][square % 3] = "X"; if (checkWin("X") == 1) lblwin.setText("X wins!"); else if (checkWin("X") == -1) JOptionPane.showMessageDialog(this, "Looks like a tie game.","Whoa",JOptionPane.WARNING_MESSAGE); else { square = go_cpu(); boxes[square / 3][square % 3] = "O"; if (checkWin("O") == 1) lblwin.setText("O wins!"); else if (checkWin("O") == -1) lblwin.setText("Tie game."); } } displayBoard(); } public static void displayBoard() { for (int i = 0; i < 9; i++) bbox[i].setText(boxes[i / 3][i % 3]); } public static String getOpponent(String player) { if (player == "X") return "O"; return "X"; } private static int horizontal(String player) { int fill_count = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (boxes[i][j] == player) fill_count++; else if (boxes[i][j] == getOpponent(player)) fill_count = -10; else if (boxes[i][j] == "") danger = i * 3 + j; } if (fill_count > 0) break; fill_count = 0; } return fill_count; } private static int vertical(String player) { int fill_count = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (boxes[j][i] == player) fill_count++; else if (boxes[j][i] == getOpponent(player)) fill_count = -10; else if (boxes[j][i] == "") danger = j * 3 + i; } if (fill_count > 0) break; fill_count = 0; } return fill_count; } private static int diag1(String player) { // looks like: \ int fill_count = 0; for (int i = 0; i < 3; i++) { if (boxes[i][i] == player) fill_count++; else if (boxes[i][i] == getOpponent(player)) fill_count = -10; else if (boxes[i][i] == "") danger = i * 4; } return fill_count; } private static int diag2(String player) { // looks like: / int fill_count = 0; for (int i = 0; i < 3; i++) { if (boxes[i][2 - i] == player) fill_count++; else if (boxes[i][2 - i] == getOpponent(player)) fill_count = -10; else if (boxes[i][2 - i] == "") danger = 2 * i + 2; } return fill_count; } public static int checkWin(String player) { boolean tie = true; for (int h = 0; h < 9; h++) if (boxes[h / 3][h % 3] != "") tie = false; if (tie == true) return -1; if (horizontal(player) == 3 || vertical(player) == 3 || diag1(player) == 3 || diag2(player) == 3) return 1; return 0; } public static int go_cpu() { if (first == 0) { first = 1; if (boxes[0][0] == "X" || boxes[0][2] == "X" || boxes[2][0] == "X" || boxes[2][2] == "X") return 4; } if (horizontal("O") == 2 || vertical("O") == 2 || diag1("O") == 2 || diag2("O") == 2) return danger; // win if it can else if (horizontal("X") == 2 || vertical("X") == 2 || diag1("X") == 2 || diag2("X") == 2) return danger; int ret = -1; Random generator = new Random(); do ret = generator.nextInt(9); while (boxes[ret / 3][ret % 3] != ""); return ret; } public static void main(String args[]) { for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) boxes[i][j] = ""; new TicTacToe(); }}