import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class Player{
private int xCoordinate;
private int yCoordinate;
private String playerText;
public Player(int x, int y, String t)
{
playerText = t;
xCoordinate = x;
yCoordinate = y;
}
public void draw(Graphics g)
{
g.drawString(playerText, xCoordinate, yCoordinate);
}
public void SetText(String t)
{ playerText = t;
}
}//end player
class Square
{
private int x;
private int y;
private int occupied;
public Square(int x1, int y1)
{
x = x1;
y= y1;
occupied = 0;
}
public void setX(int x1)
{
x = x1;
}
public int getX()
{
return x;
}
public void setY(int y1)
{
y = y1;
}
public int getY()
{
return y;
}
public void setOccupied(int o)
{
occupied = o;
}
public int getOccupied()
{
return occupied;
}
}
public class TicTac extends JApplet implements ActionListener
{ private JPanel panel;
private JButton newgame;
private Board B;
public void init()
{
B = new Board();
add( B, BorderLayout.CENTER );
panel = new JPanel();
newgame = new JButton( "New Game" );
panel.add( newgame);
add( panel, BorderLayout.SOUTH );
newgame.addActionListener(this);
}
public void actionPerformed( ActionEvent ev)
{ Object source = ev.getSource();
if (source == newgame)
{remove(B);
repaint();
B = new Board();
add( B, BorderLayout.CENTER );
B.setTurn(1);
repaint();
validate();
}
}
}//end class TicTac
class Board extends JPanel implements MouseListener, MouseMotionListener
{
private JLabel playerlabel;
private boolean play;
private boolean start;
private int turn;
private Square squares[][];
private Player myplayer[][];
public Board()
{
setBackground( Color.WHITE );
playerlabel = new JLabel( "X player first" );
//playerlabel.setLayout(null);
// playerlabel.setLocation(500,500);
add( playerlabel );
play = true;
turn = 1;
squares = new Square[3][3];
myplayer = new Player[3][3];
int x = 40;
int y = 40;
for (int i=0; i<3; i++){
x = 40;
for (int j=0; j<3; j++){
Square s = new Square( x,y );
squares[i][j] = s;
x +=50;
}
y +=50;
}
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void mouseClicked( MouseEvent event ){}
public void mouseMoved( MouseEvent event ){}
public void mouseEntered( MouseEvent event ){}
public void mouseExited( MouseEvent event ){}
public void mousePressed( MouseEvent event )
{int xPos = event.getX();
int yPos = event.getY();
if(play && turn ==1){
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
int x = squares[i][j].getX();
int y = squares[i][j].getY();
if(xPos> x && xPos<x+40&& yPos> y && yPos<y+40){
if( squares[i][j].getOccupied() ==0 ){
String ptext;
ptext = "X";
Player p = new Player(x, y,ptext);
myplayer[i][j] = p;
squares[i][j].setOccupied(1);
playerlabel.setText( "O Player Turn" );
turn = 2;
repaint();
Win();
}
else{
turn = 2;
playerlabel.setText( "O Player Turn" );
repaint();
}
}
}
}
}
if ( play && turn ==2 )
{
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
int x = squares[i][j].getX();
int y = squares[i][j].getY();
if(xPos> x && xPos<x+40&& yPos> y && yPos<y+40){
if( squares[i][j].getOccupied() ==0 ){
String ptext;
ptext = "O";
Player p = new Player(x, y,ptext);
myplayer[i][j] = p;
squares[i][j].setOccupied(2);
playerlabel.setText( "X Player Turn" );
turn = 1;
repaint();
Win();
}
else{
turn = 1;
playerlabel.setText( "X Player Turn" );
repaint();
}
}
}
}
}
}
public void mouseReleased( MouseEvent event )
{ }
public void mouseDragged( MouseEvent event )
{ }
public void Win(){
if(squares[0][0].getOccupied() == squares[0][1].getOccupied() &&squares[0][1].getOccupied()==squares[0][2].getOccupied() &&squares[0][2].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
else if (squares[1][0].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[1][2].getOccupied() &&squares[1][2].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
else if(squares[2][0].getOccupied() == squares[2][1].getOccupied() &&squares[2][1].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
if(squares[0][0].getOccupied() == squares[0][1].getOccupied() &&squares[0][1].getOccupied()==squares[0][2].getOccupied() &&squares[0][2].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
else if (squares[1][0].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[1][2].getOccupied() &&squares[1][2].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
else if(squares[2][0].getOccupied() == squares[2][1].getOccupied() &&squares[2][1].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
//Vertically win
if (squares[0][0].getOccupied() == squares[1][0].getOccupied() &&squares[1][0].getOccupied()==squares[2][0].getOccupied() &&squares[2][0].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
else if (squares[0][1].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][1].getOccupied() &&squares[2][1].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
else if(squares[0][2].getOccupied() == squares[1][2].getOccupied() &&squares[1][2].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
if (squares[0][0].getOccupied() == squares[1][0].getOccupied() &&squares[1][0].getOccupied()==squares[2][0].getOccupied() &&squares[2][0].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
else if (squares[0][1].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][1].getOccupied() &&squares[2][1].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
else if(squares[0][2].getOccupied() == squares[1][2].getOccupied() &&squares[1][2].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
//Diagonal win
if (squares[0][0].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
else if (squares[0][2].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][0].getOccupied() &&squares[2][0].getOccupied() == 1)
{playerlabel.setText("Player 1 X WON THE GAME!");
play =false; }
if (squares[0][0].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][2].getOccupied() &&squares[2][2].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
else if (squares[0][2].getOccupied() == squares[1][1].getOccupied() &&squares[1][1].getOccupied()==squares[2][0].getOccupied() &&squares[2][0].getOccupied() == 2)
{playerlabel.setText("Player 2 O WON THE GAME!");
play =false; }
}//end win
public void setTurn(int t)
{
turn = t;
playerlabel.setText( "X Player Plays First" );
}
public void paintComponent( Graphics g )
{
super.paintComponent( g );
this.setBackground( Color.WHITE );
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
g.setColor( Color.BLACK );
g.drawRect( squares[i][j].getX(), squares[i][j].getY(), 50, 50 );
}
}
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
myplayer[i][j].draw(g);
}
}
}
//End of paintComponent
}