wood burning stoves 2.0*
The moose likes Beginning Java and the fly likes modifying a tic tac toe game Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "modifying a tic tac toe game" Watch "modifying a tic tac toe game" New topic
Author

modifying a tic tac toe game

MaryEllen Volb
Ranch Hand

Joined: Jan 31, 2001
Posts: 35
Hi,
i have to modify this code to declare Cell as a standalone class instead of an inner class, and, when the game is over, the user should not be able to click the empty cells to mark them. Can you give me a clue? Yes this is a class assignment!

// TicTacToe.java: Play the TicTacToe game
package Chapter10;
import java.awt.*;
import Chapter8.MyFrameWithExitHandling;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class TicTacToe extends JApplet
{
// Indicate which player has a turn, initially it is the X player
private char whoseTurn = 'X';
// Create and initialize cells
private Cell[][] cell = new Cell[3][3];
// Create and initialized a status label
private JLabel jlblStatus = new JLabel("X's turn playing");
// Initialize UI
public void init()
{
// Panel p to hold cells
JPanel p = new JPanel();
p.setLayout(new GridLayout(3, 3, 0, 0));
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
p.add(cell[i][j] = new Cell());
// Set line borders on the cells panel and the status label
p.setBorder(new LineBorder(Color.red, 1));
jlblStatus.setBorder(new LineBorder(Color.yellow, 1));
// Place the panel and the label to the applet
this.getContentPane().add(p, BorderLayout.CENTER);
this.getContentPane().add(jlblStatus, BorderLayout.SOUTH);
}
// This main method enables the applet to run as an application
public static void main(String[] args)
{
// Create a frame
MyFrameWithExitHandling frame = new MyFrameWithExitHandling(
"Mouse Drawing Demo");
// Create an instance of the applet
TicTacToe applet = new TicTacToe();
// Add the applet instance to the frame
frame.getContentPane().add(applet, BorderLayout.CENTER);
// Invoke init() and start()
applet.init();
applet.start();
// Display the frame
frame.setSize(300, 300);
frame.setVisible(true);
}
// Determine if the cells are all occupied
public boolean isFull()
{
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
if (cell[i][j].getToken() == ' ')
return false;
return true;
}
// Determine if the player with the specified toekn wins
public boolean won(char token)
{
for (int i=0; i<3; i++)
if ((cell[i][0].getToken()==token)
&& (cell[i][1].getToken()==token)
&& (cell[i][2].getToken()==token))
{
return true;
}
for (int j=0; j<3; j++)
if ((cell[0][j].getToken()==token)
&& (cell[1][j].getToken()==token)
&& (cell[2][j].getToken()==token))
{
return true;
}
if ((cell[0][0].getToken()==token)
&& (cell[1][1].getToken()==token)
&& (cell[2][2].getToken()==token))
{
return true;
}
if ((cell[0][2].getToken()==token)
&& (cell[1][1].getToken()==token)
&& (cell[2][0].getToken()==token))
{
return true;
}
return false;
}
// An inner class for a cell
public class Cell extends JPanel implements MouseListener
{
// Token used for this cell
private char token = ' ';
public Cell()
{
setBorder(new LineBorder(Color.black, 1)); // Set cell's border
addMouseListener(this); // Register listener
}
// The getter method for token
public char getToken()
{
return token;
}
// The setter method for token
public void setToken(char c)
{
token = c;
repaint();
}
// Paint the cell
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (token == 'X')
{
g.drawLine(10, 10, getSize().width-10, getSize().height-10);
g.drawLine(getSize().width-10, 10, 10, getSize().height-10);
}
else if (token == 'O')
{
g.drawOval(10, 10, getSize().width-20, getSize().height-20);
}
}
// Handle mouse click on a cell
public void mouseClicked(MouseEvent e)
{
if (token == ' ') // If cell is not occupied
{
if (whoseTurn == 'X') // If it is the X player's turn
{
setToken('X'); // Set token in the cell
whoseTurn = 'O'; // Change the turn
jlblStatus.setText("O's turn"); // Display status
if (won('X'))
jlblStatus.setText("X won! The game is over");
else if (isFull())
jlblStatus.setText("Draw! The game is over");
}
else if (whoseTurn == 'O') // If it is the O player's turn
{
setToken('O'); // Set token in the cell
whoseTurn = 'X'; // Change the turn
jlblStatus.setText("X's turn"); // Display status
if (won('O'))
jlblStatus.setText("O won! The game is over");
else if (isFull())
jlblStatus.setText("Draw! The game is over");
}
}
}
public void mousePressed(MouseEvent e)
{
//TODO: implement this java.awt.event.MouseListener method;
}
public void mouseReleased(MouseEvent e)
{
//TODO: implement this java.awt.event.MouseListener method;
}
public void mouseEntered(MouseEvent e)
{
//TODO: implement this java.awt.event.MouseListener method;
}
public void mouseExited(MouseEvent e)
{
//TODO: implement this java.awt.event.MouseListener method;
}
}
}
ryan burgdorfer
Ranch Hand

Joined: Jan 24, 2001
Posts: 219
YIKES!
That is alot of code to wade through. I suggest editing your post, enclosing the code within code tags and indenting it. Much more likely that someone will take the time to wade through it and point you in the right direction that way
BTW, code tags look like this: (beginning and end, respectively)
[ code ] insert code here [ /code ]
Just remove the spaces inside the brackets.
------------------
  • Ryan Burgdorfer
  • Java Acolyte in
  • Columbus, OH USA


<UL TYPE=SQUARE><I><LI>Ryan Burgdorfer<BR><LI>Java Acolyte</I></UL>
MaryEllen Volb
Ranch Hand

Joined: Jan 31, 2001
Posts: 35
Sorry!!!
I know it's alot of code, but I was just wondering if there is some way to insert some code that will stop the player from being able to continue to click on cells after the game has been won. I think that is really all this program requires.
thanks, Mary Ellen
Junilu Lacar
Bartender

Joined: Feb 26, 2001
Posts: 4447
    
    5

You have the answer right there. Maybe if I rephrase it for you:
"If the game has been won, ignore all mouse clicks on cells."
or
"If the game has been won, do nothing when user clicks on cells."
J.Lacar
Originally posted by MaryEllen Volb:
...stop the player from being able to continue to click on cells after the game has been won.


Junilu - [How to Ask Questions] [How to Answer Questions]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: modifying a tic tac toe game
 
Similar Threads
TicTacToe Game..
Game Tutorials -->> TicTacToe
TicTacToe game
TicTacToe Game
tictactoe help