import java.io.*; import java.awt.geom.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.util.Random; class TicTacToe2 extends JPanel { //int [][] board; Icon xIcon; Icon oIcon; int [] values; boolean keepPlaying=true; JButton [][] buttons; JButton bPlayAgain; JButton bQuit; JLabel lStatus; public static final int O_VALUE=-1; //ordi public static final int X_VALUE=1; //person public static final int NIL_VALUE=0; TicTacToe2() { super(new BorderLayout()); xIcon=new ImageIcon("x.gif"); oIcon=new ImageIcon("o.gif"); //JPanel boardPanel = new JPanel(new GridLayout(3,3)); JPanel boardPanel = new JPanel(new FlowLayout());//GridLayout(3,3)); //board = new int[3][3]; values = new int[8]; //values for each winning row, column or diagonal buttons = new JButton[3][3]; TicTacToeMouseListener a = new TicTacToeMouseListener(); for (int r=0;r<3;r++) { for (int c=0;c<3;c++) { buttons[r][c] = new JButton(""); boardPanel.add(buttons[r][c]); buttons[r][c].addMouseListener(a); } } add(boardPanel,BorderLayout.CENTER); JPanel statPanel = new JPanel(new FlowLayout()); lStatus = new JLabel("Votre tour!"); bPlayAgain = new JButton("Joue Encore"); bPlayAgain.addMouseListener(a); bQuit = new JButton("Quit"); bQuit.addMouseListener(a); statPanel.add(lStatus); statPanel.add(bPlayAgain); statPanel.add(bQuit); add(statPanel,BorderLayout.SOUTH); } class TicTacToeMouseListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { for (int r=0;r<3;r++) { for (int c=0;c<3;c++) { if (e.getSource()==buttons[r][c]) { if (getBoard(r,c)==0) { setBoard(r,c,1); //user has moved eval board evalBoard(); if (keepPlaying) { doComputerMove(); evalBoard(); } } break; } } } if (e.getSource()==bQuit) { System.exit(0); } if (e.getSource()==bPlayAgain) { reset(); } } } private int getBoardText(int r,int c) { String txt = buttons[r][c].getText(); if (txt.equals("X")) { return X_VALUE; } else if (txt.equals("O")) { return O_VALUE; } else { return NIL_VALUE; } } private int getBoard(int r,int c) { if (buttons[r][c].getIcon()==xIcon) { return X_VALUE; } else if (buttons[r][c].getIcon()==oIcon) { return O_VALUE; } else { return NIL_VALUE; } } private void setBoard(int r,int c, int val) { if (val==X_VALUE) { //buttons[r][c].setText("X"); buttons[r][c].setIcon(xIcon); } else if (val==O_VALUE) { //buttons[r][c].setText("O"); buttons[r][c].setIcon(oIcon); } else { //buttons[r][c].setText(""); buttons[r][c].setIcon(null); } } public void reset() { System.out.println(""); for (int r=0;r<3;r++) { for (int c=0;c<3;c++) { //board[r][c]=0; //buttons[r][c].setText(""); buttons[r][c].setIcon(null); } } } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(stringFromPos(0,0) + "|" + stringFromPos(0,1) + "|" + stringFromPos(0,2)); sb.append(" 1|2|3\n"); sb.append("----- -----\n"); sb.append(stringFromPos(1,0) + "|" + stringFromPos(1,1) + "|" + stringFromPos(1,2)); sb.append(" 4|5|6\n"); sb.append("----- -----\n"); sb.append(stringFromPos(2,0) + "|" + stringFromPos(2,1) + "|" + stringFromPos(2,2)); sb.append(" 7|8|9\n"); return sb.toString(); } public void updateValues() { //updates values //row values System.out.print("Rows "); for (int r=0;r<3;r++) { values[r]=0; for (int c=0;c<3;c++) { values[r]+=getBoard(r,c); } System.out.print(values[r] + " "); } System.out.println(""); //column values System.out.print("Cols "); for (int c=0;c<3;c++) { values[c+3]=0; for (int r=0;r<3;r++) { values[c+3]+=getBoard(r,c); } System.out.print(values[c+3] + " "); } System.out.println(""); //diag values values[6]= getBoard(0,0) + getBoard(1,1) + getBoard(2,2); values[7]= getBoard(0,2) + getBoard(1,1) + getBoard(2,0); System.out.println("Diags " + values[6] + " " + values[7]); System.out.println(this); } public void evalBoard() { updateValues(); for (int i=0;i