Public feed #602486

Tic Tac Toe - intimidat0r

public java v1 · immutable
Raw Edit
·published 2007-07-04 03:04 UTC
rendered paste body
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();	}}