Simple tic tac toe

heres my code: my question is at the bottom
import apcslib.*;
import chn.util.*;
public class TicTacToe
public static void main(String[] args)
//variables and objects
TicTac one = new TicTac();
SketchPad paper = new SketchPad(500,500);
DrawingTool pen = new DrawingTool(paper);
ConsoleIO console = new ConsoleIO();
System.out.print("Choose who's turn it is:");
String choose = console.readToken();
char variable = choose.charAt(0);
if(variable == 'O' || variable == 'o')
System.out.println("1: Top Left Corner");
System.out.println("2: Top Middle");
System.out.println("3: Top Right Corner");
System.out.println("4: Middle Left");
System.out.println("5: Middle");
System.out.println("6: Middle Right");
System.out.println("7: Bottem Left Corner");
System.out.println("8: Bottom Middle");
System.out.println("9: Bottom Right Corner");
System.out.print("Choose where you want to put your mark by picking its number:");
int choice = console.readInt();
if(choice == 1)
one.board(); //draws a tic tac toe board
one.circle(-120, 65); //draws a circle at that location
else if(choice == 2);
one.board();
one.circle(-50, 65);
now my question, if i input 1 it draws the circle but it then continues on and draws the second circle to without me telling it to. but if i skip right to drawing the second circle it does and ignores the first one. thanks in advance for any input

   if(choice == 1)
      one.board();   //draws a tic tac
      one.circle(-120, 65);  //draws a
   else if(choice == 2);
       one.board();
       one.circle(-50, 65);
   }   Take the semicolen off of the second condition. It should be " if ( choice == 2 ) { ". Otherwise, the compiler thinks there is nothing to be executed as the result of choice == 2, and the instructions to draw the second circle are a seperate block of code that gets executed regardless of whether the choice is one, two, or fifteen billion.

Similar Messages

  • Tic Tac Toe Java help!

    Hi, I have been trying to create a simple Tic Tac Toe game using Java. I'm currently having problems as to how to create the board using arrays (sorry I don't understand them very well). All I have so far is this,
    public class ticTacToe {
    private int [] [] theBoard = new int [3] [3];
         // *'N' is no winner
         // 'X' is X won
         // 'O' is O won
         // 'C' is a cat's game
         public static char didSomeoneWin(int [] [] currentBoard)
              int winForX = 8000, winForO = 1, checkIfItsAcatsGame = 1, product;
              char winner = 'N';
              for(int column = 0; column < 3; column++) // Check the columns
                   product = currentBoard [0] [column] * currentBoard [1] [column] * currentBoard [2] [column];
                   if(product == winForX) winner = 'X';
                   if(product == winForO) winner = 'O';
              for(int row = 0; row < 3; row++) // Check the rows
                   product = currentBoard [row] [0] * currentBoard [row] [1] * currentBoard [row] [2];
                   if(product == winForX) winner = 'X';
                   if(product == winForO) winner = 'O';
              product = currentBoard [0] [0] * currentBoard [1] [1] * currentBoard [2] [2]; // Check one diagonal
              if(product == winForX) winner = 'X';
              if(product == winForO) winner = 'O';
              product = currentBoard [0] [2] * currentBoard [1] [1] * currentBoard [2] [0]; // Check the other diagonal
              if(product == winForX) winner = 'X';
              if(product == winForO) winner = 'O';
              if(winner == 'N') // If nobody's won, Check for a cat's game
                   for(int row = 0; row < 3; row++)
                        for(int column = 0; column < 3; column++)
                             checkIfItsAcatsGame *=currentBoard [row] [column];
                   if(checkIfItsAcatsGame != 0) winner = 'C'; // any empty space is a zero. So product is zero if there is space left.
              return winner;
         public void markX(int row, int column)
              myBoard [row] [column] = 20;
         public void markO(int row, int column)
              myBoard [row] [column] = 1;
    That is all so far, could someone help me print out the board? And help me out on the arrays? I don't think they are quite right. Thanks in Advance!
    Message was edited by:
    matthews1.7.2.0

    Hi,
    Do you need a GUI ?
    If yes see http://java.sun.com/docs/books/tutorial/uiswing/index.html
    You can also see this : http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-Printing.html about printing.
    --Marc (http://jnative.sf.net)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Tic Tac Toe with AI

    Well I'm getting ready for my second semester of Java programing and I figured I would try and get back in the swing (no pun intended) of things by creating a simple tic tac toe game. I was able to make a two player game with in a matter of hours so I figured I would try and make a one player game with AI and thats where im having some issues. Here is my code for two person tic tac toe
    package mytictactoe;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class TicTacToeV2 implements ActionListener {
         /*Instance Variables*/
         private int[][] winCombinations = new int[][] {
                   {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, //horizontal wins
                   {1, 4, 7}, {2, 5, 8}, {3, 6, 9}, //virticle wins
                   {1, 5, 9}, {3, 5, 7}                //diagonal wins
         private JFrame window = new JFrame("Tic-Tac-Toe");
         private JButton buttons[] = new JButton[10];
         private int count = 0;
         private String letter = "";
         private boolean win = false;
         public TicTacToeV2(){
         /*Create Window*/
         window.setSize(300,300);
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         window.setLayout(new GridLayout(3,3));
         /*Add Buttons To The Window*/
         for(int i=1; i<=9; i++){
              buttons[i] = new JButton();
              window.add(buttons);
              buttons[i].addActionListener(this);
         /*Make The Window Visible*/
         window.setVisible(true);
         public void actionPerformed(ActionEvent a) {
              count++;
              /*Calculate whose turn it is*/
              if(count % 2 == 0){
                   letter = "O";
              } else {
                   letter = "X";
              /*Write the letter to the button and deactivate it*/
              for(int i=1; i<=9; i++){
                   if(a.getSource() == buttons[i]){
                        buttons[i].setText(letter);
                        buttons[i].setEnabled(false);
              /*Determine who won*/
              for(int i=0; i<=7; i++){
                   if( buttons[winCombinations[i][0]].getText() == buttons[winCombinations[i][1]].getText() &&
                        buttons[winCombinations[i][1]].getText() == buttons[winCombinations[i][2]].getText() &&
                        buttons[winCombinations[i][0]].getText() != ""){
                        win = true;
              /*Show a dialog when game is over*/
              if(win == true){
                   JOptionPane.showMessageDialog(null, letter + " wins the game!");
                   System.exit(0);
              } else if(count == 9 && win == false){
                   JOptionPane.showMessageDialog(null, "The game was tie!");
                   System.exit(0);
         public static void main(String[] args){
              TicTacToeV2 starter = new TicTacToeV2();
    Now for my program with AI I'm essentially using the same code and just for clarity I removed all the code that determines who won (as it isnt needed to get the AI to work) This is what I have so far
    package mytictactoe;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Random;
    import javax.swing.*;
    public class TicTacToeV3 implements ActionListener {
         /*Instance Variables*/
         private JFrame window = new JFrame("Tic-Tac-Toe");
         private JButton buttons[] = new JButton[10];
         private int count = 0;
         public TicTacToeV3(){
         /*Create Window*/
         window.setSize(300,300);
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         window.setLayout(new GridLayout(3,3));
         /*Add Buttons To The Window*/
         for(int i = 1; i<=9; i++){
              buttons[i] = new JButton();
              window.add(buttons);
              buttons[i].addActionListener(this);
         /*Make The Window Visible*/
         window.setVisible(true);
         public void actionPerformed(ActionEvent a) {
              count++;
              /*Write the letter to the button and deactivate it*/
              for(int i = 1; i<= 9; i++){
                   if(a.getSource() == buttons[i]){
                        buttons[i].setText("X");
                        buttons[i].setEnabled(false);
              AI();
         public void AI(){
              Random x = new Random();
              int y = 1 + x.nextInt(9);
              if(buttons[y].getText() == "X" || buttons[y].getText() == "O" ){
                   AI();
              } else {
                   buttons[y].setText("O");
                   buttons[y].setEnabled(false);
         public static void main(String[] args){
              new TicTacToeV3();
    It kind of works because each time i choose a box the "computer" also chooses one, but since it is so random the chances the computer wins is very limited. I then tried to do something like this in the AI() method and it seems to be on the right track but once one of the if's are satisfied the all the AI logic stops
         public void AI(){
              //horizontal AI defencive code
              if(buttons[1].getText().equals(buttons[2].getText()) && buttons[1].getText() != ""){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);
              } else if(buttons[2].getText().equals(buttons[3].getText()) && buttons[2].getText() != ""){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);
              } else if(buttons[4].getText().equals(buttons[5].getText()) && buttons[4].getText() != ""){
                   buttons[6].setText("O");
                   buttons[6].setEnabled(false);
              } else if(buttons[5].getText().equals(buttons[6].getText()) && buttons[5].getText() != ""){
                   buttons[4].setText("O");
                   buttons[4].setEnabled(false);
              } else if(buttons[7].getText().equals(buttons[8].getText()) && buttons[7].getText() != ""){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);
              } else if(buttons[8].getText().equals(buttons[9].getText()) && buttons[8].getText() != ""){
                   buttons[7].setText("O");
                   buttons[7].setEnabled(false);
              } else {
                   Random x = new Random();
                   int y = 1 + x.nextInt(9);
                   if(buttons[y].getText() == "X" || buttons[y].getText() == "O" ){
                        AI();
                   } else {
                        buttons[y].setText("O");
                        buttons[y].setEnabled(false);
         }And basically what that does is it checks if I have two X's in a row horizontally, If I do it will place an O in the box preventing me from getting three in a row (only in horizontal rows). Of course I would iterate this over and over for all possible combinations of offensive moves and defensive moves and probably do it using a for loop but this is just some scratch code I threw together to show you my thoughts. And again my problem is once one of the conditions are satisfied it never checks the conditions again and I'm not sure why that is...
    So I'm looking for some ideas and/or some pseudo code to help me out a little.
    Thanks

    Well I did this and its a step closer to working but there is another bug and all this logic is hurting my head. Again lets say my grid is numbered like this
    1 | 2 | 3
    4 | 5 | 6
    7 | 8 | 9
    If I go 1, the computer will randomly pick a square thats not set. Lets say the computer picks 4. Now I pick 5 and the computer picks 9 because I would earn 3 in a row diagonally. Then I pick 2 and I can now win three in a row 2-5-8 or 1-2-3. The computer picks 3 because that logic is earlier in the code. BUT when I press 8 to to take the win, but the computer cheats and labels my button thats supposed to be an X as an O, so it should look like this:
    X | X | O
    O | X | 6
    7 | X | O
    but it does this
    X | X | O
    O | X | 6
    7 | O | O
    Here is the AI logic part (its mostly repetitive)
         public void AI(){
              /*Defencive Moves*/
              //horizontal defencive possabilities
              if((buttons[1].getText() == "X")&&
                        (buttons[2].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);
              } else if((buttons[2].getText() == "X")&&
                        (buttons[3].getText() == "X")&&
                        (buttons[1].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              } else if((buttons[4].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[6].getText() != "O")){
                   buttons[6].setText("O");
                   buttons[6].setEnabled(false);               
              } else if((buttons[5].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[4].getText() != "O")){
                   buttons[4].setText("O");
                   buttons[4].setEnabled(false);               
              } else if((buttons[7].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              }  else if((buttons[8].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[7].getText() != "O")){
                   buttons[7].setText("O");
                   buttons[7].setEnabled(false);               
              }  else if((buttons[1].getText() == "X")&&
                        (buttons[3].getText() == "X")&&
                        (buttons[2].getText() != "O")){
                   buttons[2].setText("O");
                   buttons[2].setEnabled(false);               
              }  else if((buttons[4].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              }  else if((buttons[7].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[8].getText() != "O")){
                   buttons[8].setText("O");
                   buttons[8].setEnabled(false);               
              //horizontal virticle possabilities
                else if((buttons[1].getText() == "X")&&
                             (buttons[4].getText() == "X")&&
                             (buttons[7].getText() != "O")){
                        buttons[7].setText("O");
                        buttons[7].setEnabled(false);               
              }  else if((buttons[7].getText() == "X")&&
                        (buttons[4].getText() == "X")&&
                        (buttons[1].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              }  else if((buttons[1].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[4].getText() != "O")){
                   buttons[4].setText("O");
                   buttons[4].setEnabled(false);               
              }  else if((buttons[2].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[8].getText() != "O")){
                   buttons[8].setText("O");
                   buttons[8].setEnabled(false);               
              }  else if((buttons[5].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[2].getText() != "O")){
                   buttons[2].setText("O");
                   buttons[2].setEnabled(false);               
              }  else if((buttons[2].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              }  else if((buttons[3].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              }  else if((buttons[6].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);               
              }  else if((buttons[3].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[6].getText() != "O")){
                   buttons[6].setText("O");
                   buttons[6].setEnabled(false);
              //diagonal
              else if((buttons[1].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              }  else if((buttons[5].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              }  else if((buttons[1].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              }  else if((buttons[3].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[7].getText() != "O")){
                   buttons[7].setText("O");
                   buttons[7].setEnabled(false);               
              }  else if((buttons[5].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);               
              }  else if((buttons[3].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              //random move
              else {
                   RandomMove();
         public void RandomMove(){
              Random x = new Random();
              int y = 1 + x.nextInt(9);
              if(buttons[y].getText() == "X" || buttons[y].getText() == "O" ){
                   AI();
                   went = true;
              } else {
                   buttons[y].setText("O");
                   buttons[y].setEnabled(false);
                   went = true;
         }Here is the entire code if you want to try it and compile it to see what im talking about in real time:
    package mytictactoe;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Random;
    import javax.swing.*;
    public class TicTacToeV4 implements ActionListener {
         /*Instance Variables*/
         private JFrame window = new JFrame("Tic-Tac-Toe");
         private JButton buttons[] = new JButton[10];
         private int count = 0;
         private boolean went = false;
         public TicTacToeV4(){
         /*Create Window*/
         window.setSize(300,300);
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         window.setLayout(new GridLayout(3,3));
         /*Add Buttons To The Window*/
         for(int i = 1; i<=9; i++){
              buttons[i] = new JButton();
              window.add(buttons);
              buttons[i].addActionListener(this);
         /*Make The Window Visible*/
         window.setVisible(true);
         public void actionPerformed(ActionEvent a) {
              count++;
              /*Write the letter to the button and deactivate it*/
              for(int i = 1; i<= 9; i++){
                   if(a.getSource() == buttons[i]){
                        buttons[i].setText("X");
                        buttons[i].setEnabled(false);
              AI();
         public void AI(){
              /*Defencive Moves*/
              //horizontal defencive possabilities
              if((buttons[1].getText() == "X")&&
                        (buttons[2].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);
              } else if((buttons[2].getText() == "X")&&
                        (buttons[3].getText() == "X")&&
                        (buttons[1].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              } else if((buttons[4].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[6].getText() != "O")){
                   buttons[6].setText("O");
                   buttons[6].setEnabled(false);               
              } else if((buttons[5].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[4].getText() != "O")){
                   buttons[4].setText("O");
                   buttons[4].setEnabled(false);               
              } else if((buttons[7].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              } else if((buttons[8].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[7].getText() != "O")){
                   buttons[7].setText("O");
                   buttons[7].setEnabled(false);               
              } else if((buttons[1].getText() == "X")&&
                        (buttons[3].getText() == "X")&&
                        (buttons[2].getText() != "O")){
                   buttons[2].setText("O");
                   buttons[2].setEnabled(false);               
              } else if((buttons[4].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              } else if((buttons[7].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[8].getText() != "O")){
                   buttons[8].setText("O");
                   buttons[8].setEnabled(false);               
              //horizontal virticle possabilities
              else if((buttons[1].getText() == "X")&&
                             (buttons[4].getText() == "X")&&
                             (buttons[7].getText() != "O")){
                        buttons[7].setText("O");
                        buttons[7].setEnabled(false);               
              } else if((buttons[7].getText() == "X")&&
                        (buttons[4].getText() == "X")&&
                        (buttons[1].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              } else if((buttons[1].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[4].getText() != "O")){
                   buttons[4].setText("O");
                   buttons[4].setEnabled(false);               
              } else if((buttons[2].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[8].getText() != "O")){
                   buttons[8].setText("O");
                   buttons[8].setEnabled(false);               
              } else if((buttons[5].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[2].getText() != "O")){
                   buttons[2].setText("O");
                   buttons[2].setEnabled(false);               
              } else if((buttons[2].getText() == "X")&&
                        (buttons[8].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              } else if((buttons[3].getText() == "X")&&
                        (buttons[6].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              } else if((buttons[6].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);               
              } else if((buttons[3].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[6].getText() != "O")){
                   buttons[6].setText("O");
                   buttons[6].setEnabled(false);
              //diagonal
              else if((buttons[1].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[9].setText("O");
                   buttons[9].setEnabled(false);               
              } else if((buttons[5].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[9].getText() != "O")){
                   buttons[1].setText("O");
                   buttons[1].setEnabled(false);               
              } else if((buttons[1].getText() == "X")&&
                        (buttons[9].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              } else if((buttons[3].getText() == "X")&&
                        (buttons[5].getText() == "X")&&
                        (buttons[7].getText() != "O")){
                   buttons[7].setText("O");
                   buttons[7].setEnabled(false);               
              } else if((buttons[5].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[3].getText() != "O")){
                   buttons[3].setText("O");
                   buttons[3].setEnabled(false);               
              } else if((buttons[3].getText() == "X")&&
                        (buttons[7].getText() == "X")&&
                        (buttons[5].getText() != "O")){
                   buttons[5].setText("O");
                   buttons[5].setEnabled(false);               
              //random move
              else {
                   RandomMove();
         public void RandomMove(){
              Random x = new Random();
              int y = 1 + x.nextInt(9);
              if(buttons[y].getText() == "X" || buttons[y].getText() == "O" ){
                   AI();
                   went = true;
              } else {
                   buttons[y].setText("O");
                   buttons[y].setEnabled(false);
                   went = true;
         public static void main(String[] args){
              new TicTacToeV4();
    What am I doing wrong?

  • Tic Tac Toe with simple GUI

    Hello,
    I am working on a Tic Tac Toe game, I have already started woking on it put i am
    stuck on the array part. This is what is required in the project: Create a nine-member array to hold results of the game.. Initialize the array before the start of the game...Allow the user input to indicate which square ther user selects...
    Thank You
    help will be appreciated..
    import javax.swing.JOptionPane;
    import java.awt.*;
    import java.applet.*;
    public class TicTacToe extends Applet
    public void init()
    // declaration aand created array
    int Array[];
    Array = new int[8];
    String input1;
    String input2;
    int choice1;
    int choice2;
    input1 =
    JOptionPane.showInputDialog
    "Please select your symbol\n"+
    "1= O \n"+
    "2= X \n");
    // converts string to integer
    choice1 = Integer.parseInt( input1 );
    // draws the TicTacToe Board...
    public void paint (Graphics g)
         Dimension d = getSize();
         g.setColor(Color.blue);
    int X_coordinate = d.width / 3;
         int Y_coordinate = d.height / 3;
         g.drawLine(X_coordinate, 0, X_coordinate, d.height);      
         g.drawLine(2*X_coordinate, 0, 2*X_coordinate, d.height);
         g.drawLine(0, Y_coordinate, d.width, Y_coordinate);
         g.drawLine(0, 2*Y_coordinate, d.width, 2*Y_coordinate);
    } //end of paitn method
    }// end of class

    Try this:
    import javax.swing.*;
    import java.awt.*;
    import java.applet.*;
    public class TicTac extends JApplet
    public void init()
    // declaration aand created array
         int Array[] = new int[8];
         String input1;
         String input2;
         int    choice1 = 0;
         int    choice2;
         for(int i=0; i < Array.length; i++) Array[i] = 0;
         while (choice1 == 0)
              input1 = JOptionPane.showInputDialog
                   ("Please select your symbol\n"+
                    "1= O \n"+
                    "2= X \n");
              if (input1.equals("1")) choice1 = 1;
              if (input1.equals("2")) choice1 = 2;
    //     converts string to integer
    //     choice1 = Integer.parseInt( input1 );
    // draws the TicTacToe Board...
    public void paint(Graphics g)
         Dimension d = getSize();
         g.setColor(Color.blue);
         int sz = 0;
         if (d.height/4 - 10 < d.width/4) sz = d.height / 4;
              else             sz = d.width  / 4;
         for (int j=0; j < 4; j++)
              g.drawLine(10,sz*j+10,sz*3+10,sz*j+10);
              g.drawLine(j*sz+10,10,j*sz+10,sz*3+10);
         g.setColor(Color.black);
         g.drawRect(9,9,sz*3+2,sz*3+2);
    } //end of paitn method
    }// end of class
    Noah
    import javax.swing.*;
    import java.awt.*;
    import java.applet.*;
    public class TicTac extends JApplet
    public void init()
    // declaration aand created array
         int Array[] = new int[8];
         String input1;
         String input2;
         int choice1 = 0;
         int choice2;
         for(int j=0; j < Array.length; j++) Array[j] = 0;
         while (choice1 == 0)
              input1 = JOptionPane.showInputDialog
                   ("Please select your symbol\n"+
                   "1= O \n"+
                   "2= X \n");
              if (input1.equals("1")) choice1 = 1;
              if (input1.equals("2")) choice1 = 2;
    //     converts string to integer
    //     choice1 = Integer.parseInt( input1 );
    // draws the TicTacToe Board...
    public void paint(Graphics g)
         Dimension d = getSize();
         g.setColor(Color.blue);
         int sz = 0;
         if (d.height/4 - 10 < d.width/4) sz = d.height / 4;
              else                         sz = d.width / 4;
         for (int j=0; j < 4; j++)
              g.drawLine(10,sz*j+10,sz*3+10,sz*j+10);
              g.drawLine(j*sz+10,10,j*sz+10,sz*3+10);
         g.setColor(Color.black);
         g.drawRect(9,9,sz*3+2,sz*3+2);
    } //end of paitn method
    }// end of class

  • Help with Tic Tac Toe program....

    I am writing a tic tac toe program, and I have already put the 9 boxes onto the screen so that it looks like the Tic Tac Toe board.
    My first box looks something like this:
    Rectangle2D.Double box1 = new Rectangle2D.Double(0, 0, 100, 100);
    g2.draw(box1);
    I want assign a number to the 9 boxes so it looks like this:
    123
    456
    789
    And I want to know how am I suppose to assign a number to a box, so that when the number is pressed it will put an "X" or "O"(depending on whose turn it is).
    P.S. If you already made a Tic Tac Toe progaram can you post it so I will have an idea of what you did. thx.

    I'd hate to post the whole thing, but if you don't have access to it, here it goes:
    * @(#)TicTacToe.java     1.6 01/12/03
    * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
    * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.net.*;
    import java.applet.*;
    * A TicTacToe applet. A very simple, and mostly brain-dead
    * implementation of your favorite game! <p>
    * In this game a position is represented by a white and black
    * bitmask. A bit is set if a position is ocupied. There are
    * 9 squares so there are 1<<9 possible positions for each
    * side. An array of 1<<9 booleans is created, it marks
    * all the winning positions.
    * @version      1.2, 13 Oct 1995
    * @author Arthur van Hoff
    * @modified 04/23/96 Jim Hagen : winning sounds
    * @modified 02/10/98 Mike McCloskey : added destroy()
    public
    class TicTacToe extends Applet implements MouseListener {
         * White's current position. The computer is white.
        int white;
         * Black's current position. The user is black.
        int black;
         * The squares in order of importance...
        final static int moves[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
         * The winning positions.
        static boolean won[] = new boolean[1 << 9];
        static final int DONE = (1 << 9) - 1;
        static final int OK = 0;
        static final int WIN = 1;
        static final int LOSE = 2;
        static final int STALEMATE = 3;
         * Mark all positions with these bits set as winning.
        static void isWon(int pos) {
         for (int i = 0 ; i < DONE ; i++) {
             if ((i & pos) == pos) {
              won[i] = true;
         * Initialize all winning positions.
        static {
         isWon((1 << 0) | (1 << 1) | (1 << 2));
         isWon((1 << 3) | (1 << 4) | (1 << 5));
         isWon((1 << 6) | (1 << 7) | (1 << 8));
         isWon((1 << 0) | (1 << 3) | (1 << 6));
         isWon((1 << 1) | (1 << 4) | (1 << 7));
         isWon((1 << 2) | (1 << 5) | (1 << 8));
         isWon((1 << 0) | (1 << 4) | (1 << 8));
         isWon((1 << 2) | (1 << 4) | (1 << 6));
         * Compute the best move for white.
         * @return the square to take
        int bestMove(int white, int black) {
         int bestmove = -1;
          loop:
         for (int i = 0 ; i < 9 ; i++) {
             int mw = moves;
         if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
              int pw = white | (1 << mw);
              if (won[pw]) {
              // white wins, take it!
              return mw;
              for (int mb = 0 ; mb < 9 ; mb++) {
              if (((pw & (1 << mb)) == 0) && ((black & (1 << mb)) == 0)) {
                   int pb = black | (1 << mb);
                   if (won[pb]) {
                   // black wins, take another
                   continue loop;
              // Neither white nor black can win in one move, this will do.
              if (bestmove == -1) {
              bestmove = mw;
         if (bestmove != -1) {
         return bestmove;
         // No move is totally satisfactory, try the first one that is open
         for (int i = 0 ; i < 9 ; i++) {
         int mw = moves[i];
         if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
              return mw;
         // No more moves
         return -1;
    * User move.
    * @return true if legal
    boolean yourMove(int m) {
         if ((m < 0) || (m > 8)) {
         return false;
         if (((black | white) & (1 << m)) != 0) {
         return false;
         black |= 1 << m;
         return true;
    * Computer move.
    * @return true if legal
    boolean myMove() {
         if ((black | white) == DONE) {
         return false;
         int best = bestMove(white, black);
         white |= 1 << best;
         return true;
    * Figure what the status of the game is.
    int status() {
         if (won[white]) {
         return WIN;
         if (won[black]) {
         return LOSE;
         if ((black | white) == DONE) {
         return STALEMATE;
         return OK;
    * Who goes first in the next game?
    boolean first = true;
    * The image for white.
    Image notImage;
    * The image for black.
    Image crossImage;
    * Initialize the applet. Resize and load images.
    public void init() {
         notImage = getImage(getCodeBase(), "images/not.gif");
         crossImage = getImage(getCodeBase(), "images/cross.gif");
         addMouseListener(this);
    public void destroy() {
    removeMouseListener(this);
    * Paint it.
    public void paint(Graphics g) {
         Dimension d = getSize();
         g.setColor(Color.black);
         int xoff = d.width / 3;
         int yoff = d.height / 3;
         g.drawLine(xoff, 0, xoff, d.height);
         g.drawLine(2*xoff, 0, 2*xoff, d.height);
         g.drawLine(0, yoff, d.width, yoff);
         g.drawLine(0, 2*yoff, d.width, 2*yoff);
         int i = 0;
         for (int r = 0 ; r < 3 ; r++) {
         for (int c = 0 ; c < 3 ; c++, i++) {
              if ((white & (1 << i)) != 0) {
              g.drawImage(notImage, c*xoff + 1, r*yoff + 1, this);
              } else if ((black & (1 << i)) != 0) {
              g.drawImage(crossImage, c*xoff + 1, r*yoff + 1, this);
    * The user has clicked in the applet. Figure out where
    * and see if a legal move is possible. If it is a legal
    * move, respond with a legal move (if possible).
    public void mouseReleased(MouseEvent e) {
         int x = e.getX();
         int y = e.getY();
         switch (status()) {
         case WIN:
         case LOSE:
         case STALEMATE:
         play(getCodeBase(), "audio/return.au");
         white = black = 0;
         if (first) {
              white |= 1 << (int)(Math.random() * 9);
         first = !first;
         repaint();
         return;
         // Figure out the row/column
         Dimension d = getSize();
         int c = (x * 3) / d.width;
         int r = (y * 3) / d.height;
         if (yourMove(c + r * 3)) {
         repaint();
         switch (status()) {
         case WIN:
              play(getCodeBase(), "audio/yahoo1.au");
              break;
         case LOSE:
              play(getCodeBase(), "audio/yahoo2.au");
              break;
         case STALEMATE:
              break;
         default:
              if (myMove()) {
              repaint();
              switch (status()) {
              case WIN:
                   play(getCodeBase(), "audio/yahoo1.au");
                   break;
              case LOSE:
                   play(getCodeBase(), "audio/yahoo2.au");
                   break;
              case STALEMATE:
                   break;
              default:
                   play(getCodeBase(), "audio/ding.au");
              } else {
              play(getCodeBase(), "audio/beep.au");
         } else {
         play(getCodeBase(), "audio/beep.au");
    public void mousePressed(MouseEvent e) {
    public void mouseClicked(MouseEvent e) {
    public void mouseEntered(MouseEvent e) {
    public void mouseExited(MouseEvent e) {
    public String getAppletInfo() {
         return "TicTacToe by Arthur van Hoff";

  • Help with tic tac toe

    hey all,
    i am having problems creating a tic tac toe program. the program should create a board with NxN spaces, where N is obtained through user input.
    I created a fully working program that does a 3x3 board, checks for diagonal, vertical, horizontal wins and also allows 1 vs computer or 2 players play, but i am struggling with the NxN board.
    here is the code of what i have, can anyone point me in the right direction? all help is appreciated! please keep it simple as possible as i am just learning java!!
    import java.util.Scanner;
    import java.util.Random;
    public class NoughtsCrosses
    static final String PLAYER1 = "X";
    static final String PLAYER2 = "O";
    static final String EMPTY = "�";
    static String[][] board = new String[][];
    static int turn = 0;
    static public void makeBoard(int boardSize)
    for (int x = 0; x < boardSize; x++)
    for (int y = 0; y < boardSize; y++)
    board[x][y] = new String(EMPTY);
    static public void playComputer()
    Scanner scan = new Scanner(System.in);
    Random generator = new Random();
    int move;
    printBoard();
    System.out.println();
    do {
    if(turn%2 == 0)
    System.out.println("Player 1, place your X");
    System.out.print("Make a Move: ");
    move = scan.nextInt();
    else
    System.out.print("Computer, place your O: ");
    move = generator.nextInt(10);
    System.out.println(move);
    getMove(move);
    System.out.println();
    printBoard();
    System.out.println();
    } while(winner().equals(EMPTY) && turn < 9);
    if (winner().equals(EMPTY))
    System.out.println("The Game s a DRAW!");
    else
    System.out.println("PLAYER " + ((turn - 1) % 2 + 1) + " WINS!!");
    static public void playHuman()
    Scanner scan = new Scanner(System.in);
    printBoard();
    System.out.println();
    do {
    if(turn%2 == 0)
    System.out.println("Player 1, place your X");
    else
    System.out.println("Player 2, place your O");
    System.out.print("Make a Move: ");
    int move = scan.nextInt();
    getMove(move);
    System.out.println();
    printBoard();
    System.out.println();
    } while(winner().equals(EMPTY) && turn < 9);
    if (winner().equals(EMPTY))
    System.out.println("The Game s a DRAW!");
    else
    System.out.println("PLAYER " + ((turn - 1) % 2 + 1) + " WINS!!");
    static public void getMove(int move)
    int row = move/3;
    int col = move%3;
    if (board[row][col].equals(EMPTY))
    board[row][col] = (turn % 2 == 0 ? PLAYER1 : PLAYER2);
    turn++;
    else
    System.out.println("OCCUPIED FIELD! TRY AGAIN!");
    static public void printBoard()
    for (int x = 0; x < 3; x++)
    for (int y = 0; y < 3; y++)
    if(y == 0)
    System.out.print(" ");
    System.out.print(board[x][y]);
    if(y < 2)
    System.out.print(" | ");
    System.out.println();
    if(x < 2)
    System.out.println(" ---|---|---");
    static public String winner()
    for (int i = 0; i < board.length; i++)
    /** check horizontally */
    if (board[0].equals(board[i][1]) && board[i][0].equals(board[i][2]))
    if (!board[i][0].equals(EMPTY))
    return board[i][0];
    /** check vertically */
    if (board[0][i].equals(board[1][i]) && board[0][i].equals(board[2][i]))
    if (!board[0][i].equals(EMPTY))
    return board[0][i];
    /** check diagonally */
    if (board[0][0].equals(board[1][1]) && board[0][0].equals(board[2][2]))
    if (!board[0][0].equals(EMPTY))
    return board[0][0];
    if (board[0][2].equals(board[1][1]) && board[0][2].equals(board[2][0]))
    if (!board[0][2].equals(EMPTY))
    return board[0][2];
    return EMPTY;
    static public void main(String[] args)
    Scanner scan = new Scanner(System.in);
    int boardSize;
    System.out.println();
    System.out.println("Welcome to Tic Tac Toe!");
    System.out.println("�����������������������");
    System.out.println("How big should the board be?");
    boardSize = scan.nextInt();
    makeBoard(boardSize);
    int players = 0;
    do{
    System.out.println("How many players?");
    System.out.println("1 (vs. Computer) or 2 (vs. another player)?");
    players = scan.nextInt();
    System.out.println();
    }while(players < 1 || players > 2);
    if (players == 1)
    playComputer();
    else
    playHuman();

    well, i figured out how to do it all, thanks to the TREMENDOUS amount of help here...lol...
    i just have one more (minor problem)...
    i can't get an algorithm working to see if the two diagonals are occupied by x's or o's (see if someone won diagonally)
    to check horizontally & vertically on an NxN board, i use following code:
    int count = 0;
            /** check horizontally  */
            for (int i = 0; i < myBoard.length; i++)
               for (int j = 0; j < myBoard.length-1; j++)
                   if (myBoard[0].equals(myBoard[i][j+1]) && !myBoard[i][0].equals(EMPTY))
    count++;
    if (count >= myBoard.length-1)
    return myBoard[i][0];
    count = 0;
    count = 0;
    /** check vertically */
    for (int i = 0; i < myBoard.length; i++)
    for (int j = 0; j < myBoard.length-1; j++)
    if (myBoard[j][0].equals(myBoard[j+1][i]) && !myBoard[0][i].equals(EMPTY))
    count++;
    if (count >= myBoard.length-1)
    return myBoard[0][i];
    count = 0;
    now i was messing around ALOT and couldn't figure out how to get the diagonals showing! this is what i came up with:
    count =0;
    for (int j = 1; j < myBoard.length; j++)
           if (myBoard[0][0].equals(myBoard[j][j]) && !myBoard[0][0].equals(EMPTY))
                 count++;
                 System.out.println(count);
            if (count >= myBoard.length)
                 return myBoard[0][0];
    count = 0;
    for (int j = myBoard.length-1; j >= 0; j--)
         if (myBoard[0][myBoard.length-1].equals(myBoard[j][j]) && !myBoard[0][myBoard.length-1].equals(EMPTY))
             count++;
             System.out.println(count);
          if (count >= myBoard.length)
              return myBoard[0][myBoard.length-1];
          count = 0;

  • NEED TIC TAC TOE HELP

    Why do I keep getting the following errors in a very simple, basic TIC TAC TOE program? Any help would be greatly appreciated. Thanks.
    C:\Class\Teresa\TicTacToe017.java:114: 'else' without 'if'
    else if (board[turnRow - 1][turnCol - 1] == 'X'
    ^
    C:\Class\Teresa\TicTacToe017.java:185: 'else' without 'if'
    else // Next player's turn
    ^
    C:\Class\Teresa\TicTacToe017.java:39: cannot resolve symbol
    symbol : method call ()
    location: class TicTacToe017
                        call();
    ^
    C:\Class\Teresa\TicTacToe017.java:145: cannot resolve symbol
    symbol : method writeBoard ()
    location: class TicTacToe017
    writeBoard();
    ^
    C:\Class\Teresa\TicTacToe017.java:165: cannot resolve symbol
    symbol : method writeBoard ()
    location: class TicTacToe017
    writeBoard();
    ^
    C:\Class\Teresa\TicTacToe017.java:181: cannot resolve symbol
    symbol : method writeBoard ()
    location: class TicTacToe017
    writeBoard();
    ^
    6 errors
    Tool completed with exit code 1
    Here is my code so far.
    File name: TicTacToe.java
    A class to play TicTacToe.
    Entries cannot be changed once they are entered.
    Written by: Lew Rakocy
    email address: [email protected]
    Date: 9/2/00
    Changes: 03/13/2003 Made comments like text examples.
    Added code to display board after win and draw.
    public class TicTacToe017
    // Use a 3 X 3 (two-dimensional) array for the game board.
    private static char[][] board = new char[3][3];
    private static char turn;
    private static int row; // Loop controls to
    private static int col; // display the board
    private static int turnRow; // User input to
    private static int turnCol; // select move
    private static boolean entryError;
    private static boolean anotherGame = true;
    private static char repeat; // User input: y or Y to repeat
    private static int entryCount = 0; // Game ends when board is full
    // (when entryCount = 9);
    public static void main(String[] args)
    while(anotherGame)
    newGame();
    while(!winner())
                        //WRITE THE METHOD CALL TO DISPLAY THE "BOARD" HERE
                        call();
                        System.out.println("This is the game board.");
    //WRITE THE METHOD CALL FOR THE "PLAY" OF THE GAME HERE
                        System.out.print("Welcome to Teresa's Tic Tac Toe!");
    System.out.println("Another game? Enter Y or y for yes.");
    repeat = SavitchIn.readLineNonwhiteChar();
    //WRITE THE IF/ELSE STATEMENT TO PLAY ANOTHER GAME HERE
    if ((repeat == 'Y') || (repeat == 'y'))
         System.out.println("Play another game.");
    else
         System.out.println("End of game. Thanks for playing.");
    //WRITE THE HEADER FOR THE writeBoard METHOD HERE
    System.out.println("-----------------");
    System.out.println("|R\\C| 1 | 2 | 3 |");
    System.out.println("-----------------");
    for(row = 0; row < 3; ++row)
    System.out.println("| " + (row + 1)
    + " | " + board[row][0]
    + " | " + board[row][1]
    + " | " + board[row][2]
    + " |");
    System.out.println("-----------------");
    private static void getMove()
    entryError = true; // Will change to false if valid row
    // and column numbers are entered.
    while(entryError)
    System.out.println();
    System.out.println(turn + "'s turn.");
    System.out.println("Where do what your " + turn + " placed?");
    System.out.println(
    "Please enter row number and column number"
    + " separated by a space.");
    System.out.println();
    turnRow = SavitchIn.readInt();
    turnCol = SavitchIn.readInt();
    System.out.println("You have entered row #" + turnRow);
    System.out.println(" and column #" + turnCol);
    // Check for proper range (1, 2, or 3)
                   //WRITE THE IF STATEMENT HERE FOR AN INVALID ENTRY
                   if (board[turnRow - 1][turnCol - 1] > 3)
              System.out.println("Invalid entry: try again.");
    System.out.println(
    "Row & column numbers must be either 1, 2, or 3.");
    // Check to see if it is already occupied
    // Adjust turnRow and turnCol for 0-numbering in array
    else if (board[turnRow - 1][turnCol - 1] == 'X'
    || board[turnRow - 1][turnCol - 1] == 'O')
    System.out.println("That cell is already taken.");
    System.out.println("Please make another selection.");
    else // Valid entry
    entryError = false;
    System.out.println("Thank you for your selection.");
    board[turnRow - 1][turnCol - 1] = turn;
    ++entryCount;
    private static boolean winner()
    // Row checks
    for(row = 0; row < 3; ++row)
    if(board[row][0] == turn)
    if(board[row][1] == turn)
    if(board[row][2] == turn)
    System.out.println();
    System.out.println (turn + " IS THE WINNER!!!");
    writeBoard();
    return true;
    // WRITE A FOR LOOP FOR THE COLUMN CHECKS HERE
    // WRITE A FOR LOOP FOR THE DIAGONAL CHECKS HERE
    if(board[0][2] == turn)
    if(board[1][1] == turn)
    if(board[2][0] == turn)
    System.out.println();
    System.out.println (turn + " IS THE WINNER!!!");
    writeBoard();
    return true;
    // These lines execute only if there is no winner.
    // End game if board is full
    //WRITE THE IF STATEMENT TO CHECK IF THE BOARD IS FULL
              if (entryCount == 9)
    System.out.println();
    System.out.println("Draw: no winner and board is full.");
    writeBoard();
    return true;
    else // Next player's turn
    //WRTITE THE IF/ELSE STATEMENT FOR THE NEXT PLAYER'S TURN
    return false;
    private static void newGame()
    System.out.println();
    System.out.println("New Game: X goes first.");
    turn = 'O'; // Turn will change to X when winner() is called
    // Clear the board
    for(row = 0; row < 3; ++row)
    for(col = 0; col < 3; ++col)
    board[row][col] = ' ';
    entryCount = 0;
    System.out.println();

    the "else without if" means that you have an else statement that wasn't attached to an if statement. In your case, it seems to be because you had multiple statements following an if statement, and you didn't enclose them in a single block.
    The "cannot resolve symbol" means that you referred to something that wasn't defined. Either it's your code, and you forgot to define it, or you were referring to someone else's code, in which case you probably forgot an import statement, or you're using their code incorrectly.

  • Basic Tic Tac Toe programming help please

    I'm trying to make a seperate java class(there is another main that calls this using SWING interface) that makes mark on the board.
    It's supposed to do the following
    Method makeMark returns:
    a null if the cell indicated by row and column has already been marked
    an X if it is X's turn (X gets to go first)
    a Y if it is Y's turn
    Thus makeMark will have to keep of marks made previously and return the appropriate string
    for the requested cell.
    and here is what I got so far, but only getting empty clicks as a respond. Any help will be appreciated. thanks.
    import javax.swing.JButton;
    public class TicTacToeGame {
         public String makeMark(int row, int column){
    String player = "X";
    String [][] Enum = new String [3][3];
              for (row=0; row<=2; row++){
                   for (column=0; column<=2; column++)
                        if (Enum[row][column] == "")
    if (player == "X"){
    Enum[row][column] = "X";
    player = "Y";
    return "X";
    if (player == "Y"){
    Enum[row][column] = "O";
    player = "X";
    return "Y";
    else
    return null;
              return player;
    }

    ok is there a simpler codes that will just flip-flop between X and O? I had it working before but somehow it's not working anymore. Before I had
    public String makeMark(int row, int column){
    player = "X";
    if (player = "X")
    player = "O";
    else if (player = "O")
    player = "X";
    or soemthing like this but it used to work, but I had to revise the code to do more things and it stopped even flip-flopping between X and O.
    Here's main code:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    * This class is the GUI for TicTacToe. It only handles user clicks on
    * buttons, which represent X's and O's
    * @author Hal Mendoza
    * CSE 21 - Jan 18, 2011, 8:18:22 PM
    * TicTacToe.java
    public class TicTacToe extends JPanel implements ActionListener {
    public final static int NUM_ROWS_COLUMNS = 3;
    private JButton arrayofButtons[][] = new JButton[NUM_ROWS_COLUMNS][NUM_ROWS_COLUMNS];
    TicTacToeGame board = new TicTacToeGame();
    public TicTacToe() {
         BoxLayout ourLayout = new BoxLayout(this, BoxLayout.Y_AXIS);
         setLayout(ourLayout);
         add(buildMainPanel());
    * Builds the panel with buttons
    * @return the panel with buttons
    private JPanel buildMainPanel() {
         JPanel panel = new JPanel();
         GridLayout gridLayout = new GridLayout(0, NUM_ROWS_COLUMNS);
         panel.setLayout(gridLayout);
         for (int row = 0; row < arrayofButtons.length; ++row)
              for (int column = 0; column < arrayofButtons[0].length; ++column) {
                   arrayofButtons[row][column] = new JButton();
                   arrayofButtons[row][column].setPreferredSize(new Dimension(50, 50));
                   arrayofButtons[row][column].addActionListener(this);
                   // Use actionCommand to store x,y location of button
                   arrayofButtons[row][column].setActionCommand(Integer.toString(row) + " " +
                             Integer.toString(column));
                   panel.add(arrayofButtons[row][column]);
         return panel;
    * Called when user clicks buttons with ActionListeners.
    public void actionPerformed(ActionEvent e) {
         JButton button = (JButton) e.getSource();
         String xORo;
         String rowColumn[] = button.getActionCommand().split(" ");
         int row = Integer.parseInt(rowColumn[0]);
         int column = Integer.parseInt(rowColumn[1]);
         xORo = board.makeMark(row, column);
         if (xORo != null)
              button.setText(xORo);
    * Create the GUI and show it. For thread safety,
    * this method should be invoked from the
    * event dispatch thread.
    private static void createAndShowGUI() {
         // Create and set up the window.
         JFrame frame = new JFrame("Tic Tac Toe");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         // Add contents to the window.
         frame.add(new TicTacToe());
         // Display the window.
         frame.pack();
         frame.setVisible(true);
    public static void main(String[] args) {
         // Schedule a job for the event-dispatching thread:
         // creating and showing this application's GUI.
         javax.swing.SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                   createAndShowGUI();
    }

  • Tic - Tac - Toe Game - Please Help!

    Hi everyone, I am attempting to create a tic - tac - toe game (O's & X's).
    I would like there to be two playing modes to the game, the first mode will be one player where the user plays against the computer. The second mode is a two - player game, where two users play, one being X's and the other being O's.
    Can anyone help me get started with this game, I know there is source code on the internet but I would rather not use this as I would like to learn as I create the game.
    Thanks Everyone

    its amazing how much code a simple game like tic-tac-toe can require.. well, only if you program the AI of the computer.. i wrote one in c++ last year, for my computer science class, and the whole class had trouble with it, mainly the AI.. a suggestion to you: write it in an object-oriented manner. i ended up writing it procedurally and in the end, it looked very bad, but it worked!
    i would prob. setup some objects like: Board (the 3x3 grid), Mark (a user mark, such as an "x" or an "o")..
    i dunno.. hope that helps some, if you need help with the AI at all.. i do have the tic-tac-toe program i wrote on my website (http://www.angelfire.com/blues/smb/ ) in the C++ section.. i used a graphics package, but the logic is all there and the code is well commented.
    anyway, ill talk to ya later, good luck,
    Steven Berardi

  • Tic-Tac-Toe [ What would you do different? ]

    I was bored so I made a simple 2-player tic-tac-toe game. I was just wondering if there was any room for improvement [other than the lack of comments]
    package tictactoe;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class TicTacToe {
         private char[] board = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9'};
         private int count = 0;
         private int location;
         private int[][] winCombinations = new int[][] {
                   {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, //horizontal wins
                   {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, //virticle wins
                   {0, 4, 8}, {2, 4, 6}                //diagonal wins
         private InputStreamReader isr = new InputStreamReader(System.in);
         private BufferedReader br = new BufferedReader(isr);
         private boolean win = false;
         public TicTacToe(){
              while(checkWin() != true && count < 9){
                   displayBoard();
                   getInput();
                   setLocation();
                   count++;
              endGame();     
         public void displayBoard(){
              System.out.println( board[0] + " | " + board[1] + " | " + board[2]);
              System.out.println("---------");
              System.out.println( board[3] + " | " + board[4] + " | " + board[5]);
              System.out.println("---------");
              System.out.println( board[6] + " | " + board[7] + " | " + board[8]);
              System.out.println("\n");
         public void getInput(){
              System.out.print("Enter the location on the board: ");
              try {
                   //Convert the string to an integer
                   location = Integer.parseInt(br.readLine());
              } catch(Exception Error) {
                   System.out.print("You have entered an invalid number. You must enter a number between 1 and 9 inclusive. Try again.\n\n");
                   getInput();
              if(location < 1 || location > 9){
                   System.out.println("You must enter a number between 1 and 9 inclusive. Try again.\n\n");
                   getInput();
         public void setLocation(){
              if(count % 2 == 0)
                   board[location-1] = 'X';
              else
                   board[location-1] = 'O';
         public boolean checkWin(){
              for(int i=0; i<=7; i++){
                   if( board[winCombinations[0]] == board[winCombinations[i][1]] &&
                        board[winCombinations[i][1]] == board[winCombinations[i][2]]){
                        win = true;
              return win;
         public void endGame(){
              if(checkWin() != true && count == 9){
                   displayBoard();
                   System.out.println("The game is tie!");
              } else {
                   displayBoard();
                   System.out.println("\n\n" + board[location-1] + " WINS!");
              System.exit(0);
         public static void main(String args[]){
              new TicTacToe();
    Thanks.

    1. disassociate any program logic from UI so that it
    can easily be ported to a GUI such as swing>
    As for 1, are you talking about the getInput method?
    Thats the only method that associates logic with UI
    as far as I'm concerned and when it is ported into a
    GUI, the user wont have the ability to select a
    square out of range so that logic wont even exist. Is
    there any other?What I mean is can you take the core logic portion of your code and easily plug it directly to your GUI code or non-GUI code or even changed different GUI code. This can occur if the logic portion is so well encapsulated that it doesn't depend at all on the user interface. another way to put it is the core functionality of the program should not reside in the GUI class (or classes).
    Admittedly w/ 2-D tictactoe, this may not be quite so relevant.
    addendum: check out Model-view-controller on wikipedia.
    Message was edited by:
    petes1234

  • Array of Characters(Tic Tac Toe)

    My problem is this:
    I am continuing the Tic Tac Toe code downloaded from the java.sun site.
    I want to know if any one could point me in the direction of a simpler solution as to how to deal with the character array. Right now, I'm just writting the method that checks the board for a tie game, and I don't want to write 23 'else if' statements.
    If any one could help I would be your best friend forever.
    thanks.

    use an int array
    then u can do math to check

  • Help in swing app. tic tac toe

    Trying to make this tic tac toe game. Need a little help. I want the newGameBUT to start the game over, and I would like turnTF to display if a tie occurs. (I tried using *if button.enabled(false) {* but it didn't work. If anyone could help me out, that'd be great. Oh, also, the new game button currently add's 1 to whoever won so far, which is really weird =x. Thanks beforehand.
    import java.awt.*; //import
    import javax.swing.*; //import
    import java.awt.event.*; //import
    import java.awt.Rectangle; //import
    import java.awt.Font; //import
    import javax.swing.BorderFactory; //import
    import javax.swing.border.TitledBorder; //import
    import java.awt.Color; //import
    public class TicTacToeFrame extends JFrame implements ActionListener {
        public TicTacToeFrame() {
            try { //try the following
                jbInit();
            } catch (Exception ex) { // exit on [X]
                ex.printStackTrace(); //exit and print errors
        int xWon = 0; //counting how many times O has won
        int oWon = 0; //counting how many times X has one
        double i = 0; // loop variable to determine turn
        public void actionPerformed(ActionEvent e) {
            String turn = "null"; //current turn
            String notTurn = "null"; //not current turn
            newGameBUT.setEnabled(false); //disable new game button
            if (i % 2 == 0) { // for determining who's turn it is
                turn = "X"; // X's turn when counter is even
                notTurn = "O"; //notTurn used to show who's turn it is in turnTF
            if (i % 2 != 0) { // for determining who's turn it is
                turn = "O"; // O's turn when counter is odd
                notTurn = "X"; //notTurn used to show who's turn it is in turnTF
            turnTF.setText("Currently " + notTurn + "'s turn"); // displays turn
            if (e.getSource() == sqOneBUT) { //disable and print X or O to button
                sqOneBUT.setText(turn); //printing players symbol
                sqOneBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqTwoBUT) { //disable and print X or O to button
                sqTwoBUT.setText(turn); //printing players symbol
                sqTwoBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqThreeBUT) { //disable and print X or O to button
                sqThreeBUT.setText(turn); //printing players symbol
                sqThreeBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqFourBUT) { //disable and print X or O to button
                sqFourBUT.setText(turn); //printing players symbol
                sqFourBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqFiveBUT) { //disable and print X or O to button
                sqFiveBUT.setText(turn); //printing players symbol
                sqFiveBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqSixBUT) { //disable and print X or O to button
                sqSixBUT.setText(turn); //printing players symbol
                sqSixBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqSevenBUT) { //disable and print X or O to button
                sqSevenBUT.setText(turn); //printing players symbol
                sqSevenBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqEightBUT) { //disable and print X or O to button
                sqEightBUT.setText(turn); //printing players symbol
                sqEightBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqNineBUT) { //disable and print X or O to button
                sqNineBUT.setText(turn); //printing players symbol
                sqNineBUT.setEnabled(false); //disabling button
            String sqOne = sqOneBUT.getText(); // Strings to read to find winner
            String sqTwo = sqTwoBUT.getText(); // Strings to read to find winner
            String sqThree = sqThreeBUT.getText(); // Strings to read to find winner
            String sqFour = sqFourBUT.getText(); // Strings to read to find winner
            String sqFive = sqFiveBUT.getText(); // Strings to read to find winner
            String sqSix = sqSixBUT.getText(); // Strings to read to find winner
            String sqSeven = sqSevenBUT.getText(); // Strings to read to find winner
            String sqEight = sqEightBUT.getText(); // Strings to read to find winner
            String sqNine = sqNineBUT.getText(); // Strings to read to find winner
             OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O WINS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
             OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    //horizontal, top, o wins
            if (sqOne == "O") { //checking too see if player O has won
                if (sqFour == "O") {
                    if (sqSeven == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    //vertical, left, o wins
            if (sqOne == "O") { //checking too see if player O has won
                if (sqTwo == "O") {
                    if (sqThree == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // diagonal, top left to bottom right, o wins
            if (sqOne == "O") {
                if (sqFive == "O") { //checking too see if player O has won
                    if (sqNine == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // horizontal, mid, o wins
            if (sqTwo == "O") { //checking too see if player O has won
                if (sqFive == "O") {
                    if (sqEight == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // horizontal, bottom, o wins
            if (sqThree == "O") { //checking too see if player O has won
                if (sqSix == "O") {
                    if (sqNine == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // diagonal, top right to bottom left, o wins
            if (sqThree == "O") { //checking too see if player O has won
                if (sqFive == "O") {
                    if (sqSeven == "O") {
                        turnTF.setText("O wins!"); //O wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
             $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~X WINS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    //horizontal, top, x wins
            if (sqOne == "X") { //checking too see if player X has won
                if (sqFour == "X") {
                    if (sqSeven == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    //vertical, left, x wins
            if (sqOne == "X") { //checking too see if player X has won
                if (sqTwo == "X") {
                    if (sqThree == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // diagonal, top left to bottom right, x wins
            if (sqOne == "X") { //checking too see if player X has won
                if (sqFive == "X") {
                    if (sqNine == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // horizontal, mid, x wins
            if (sqTwo == "X") { //checking too see if player X has won
                if (sqFive == "X") {
                    if (sqEight == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
    // horizontal, bottom, x wins
            if (sqThree == "X") { //checking too see if player X has won
                if (sqSix == "X") {
                    if (sqNine == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
            // diagonal, top right to bottom left, x wins
            if (sqThree == "X") { //checking too see if player X has won
                if (sqFive == "X") {
                    if (sqSeven == "X") {
                        turnTF.setText("X wins!"); //X wins text
                        sqOneBUT.setEnabled(false); //disable all buttons
                        sqTwoBUT.setEnabled(false); //disable all buttons
                        sqThreeBUT.setEnabled(false); //disable all buttons
                        sqFourBUT.setEnabled(false); //disable all buttons
                        sqFiveBUT.setEnabled(false); //disable all buttons
                        sqSixBUT.setEnabled(false); //disable all buttons
                        sqSevenBUT.setEnabled(false); //disable all buttons
                        sqEightBUT.setEnabled(false); //disable all buttons
                        sqNineBUT.setEnabled(false); //disable all buttons
            String wins = turnTF.getText(); //Reading who won to print win winTF
            if (wins.equals("X wins!")) { //if X wins
                xWon++; //adding 1 to X's amount of wins
                String xWonString = Integer.toString(xWon); //converting to String
                xWinsTF.setText(xWonString); //displaying # of wins
                newGameBUT.setEnabled(true); //enable new game button
            if (wins.equals("O wins!")) { //if O wins
                oWon++; //adding 1 to O's amount of wins
                String oWonString = Integer.toString(oWon); //converting to String
                oWinsTF.setText(oWonString); //displaying # of wins
                newGameBUT.setEnabled(true); //enable new game button
            if (e.getSource() == newGameBUT) {
            i++; // turn switch
        /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        private void jbInit() throws Exception {
            this.getContentPane().setLayout(null);
            this.getContentPane().setBackground(Color.darkGray);
            sqTwoBUT.setBounds(new Rectangle(2, 116, 115, 115));
            sqTwoBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqFourBUT.setBounds(new Rectangle(118, 1, 115, 115));
            sqFourBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqFiveBUT.setBounds(new Rectangle(118, 116, 115, 115));
            sqFiveBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqSixBUT.setBounds(new Rectangle(118, 232, 115, 115));
            sqSixBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqOneBUT.setBounds(new Rectangle(2, 1, 115, 115));
            sqOneBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqEightBUT.setBounds(new Rectangle(233, 116, 115, 115));
            sqEightBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqNineBUT.setBounds(new Rectangle(233, 232, 115, 115));
            sqNineBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqSevenBUT.setBounds(new Rectangle(233, 1, 115, 115));
            sqSevenBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            sqOneBUT.addActionListener(this);
            sqTwoBUT.addActionListener(this);
            sqThreeBUT.addActionListener(this);
            sqFourBUT.addActionListener(this);
            sqFiveBUT.addActionListener(this);
            sqSixBUT.addActionListener(this);
            sqSevenBUT.addActionListener(this);
            sqEightBUT.addActionListener(this);
            sqNineBUT.addActionListener(this);
            newGameBUT.addActionListener(this);
            sqThreeBUT.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            turnTF.setFont(new java.awt.Font(
                    "Tw Cen MT Condensed Extra Bold",
                    Font.BOLD, 20));
            turnTF.setEditable(false);
            turnTF.setText("X goes first");
            turnTF.setHorizontalAlignment(SwingConstants.CENTER);
            turnTF.setBounds(new Rectangle(2, 346, 346, 35));
            oWinsTF.setFont(new java.awt.Font("Tw Cen MT Condensed Extra Bold",
                                              Font.BOLD, 18));
            oWinsTF.setEditable(false);
            oWinsTF.setHorizontalAlignment(SwingConstants.CENTER);
            oWinsTF.setBounds(new Rectangle(256, 419, 79, 59));
            xWinsTF.setFont(new java.awt.Font("Tw Cen MT Condensed Extra Bold",
                                              Font.BOLD, 18));
            xWinsTF.setEditable(false);
            xWinsTF.setHorizontalAlignment(SwingConstants.CENTER);
            xWinsTF.setBounds(new Rectangle(12, 419, 79, 59));
            oWinsLBL.setFont(new java.awt.Font("Tw Cen MT Condensed Extra Bold",
                                               Font.PLAIN, 16));
            oWinsLBL.setForeground(Color.white);
            oWinsLBL.setHorizontalAlignment(SwingConstants.CENTER);
            oWinsLBL.setText("O wins:");
            oWinsLBL.setBounds(new Rectangle(256, 399, 78, 21));
            xWinsLBL.setFont(new java.awt.Font("Tw Cen MT Condensed Extra Bold",
                                               Font.PLAIN, 16));
            xWinsLBL.setForeground(Color.white);
            xWinsLBL.setDisplayedMnemonic('0');
            xWinsLBL.setHorizontalAlignment(SwingConstants.CENTER);
            xWinsLBL.setText("X wins:");
            xWinsLBL.setBounds(new Rectangle(12, 393, 78, 21));
            newGameBUT.setBounds(new Rectangle(101, 455, 146, 23));
            newGameBUT.setFont(new java.awt.Font("Tw Cen MT Condensed Extra Bold",
                                                 Font.BOLD, 14));
            newGameBUT.setText("New Game");
            this.getContentPane().add(sqFourBUT);
            this.getContentPane().add(sqThreeBUT);
            this.getContentPane().add(sqTwoBUT);
            this.getContentPane().add(sqOneBUT);
            this.getContentPane().add(sqFiveBUT);
            this.getContentPane().add(sqSixBUT);
            this.getContentPane().add(sqNineBUT);
            this.getContentPane().add(sqEightBUT);
            this.getContentPane().add(sqSevenBUT);
            this.getContentPane().add(turnTF);
            this.getContentPane().add(xWinsLBL);
            this.getContentPane().add(xWinsTF);
            this.getContentPane().add(oWinsLBL);
            this.getContentPane().add(oWinsTF);
            this.getContentPane().add(newGameBUT);
            sqThreeBUT.setBounds(new Rectangle(2, 232, 115, 115));
        JButton sqTwoBUT = new JButton();
        JButton sqThreeBUT = new JButton();
        JButton sqFourBUT = new JButton();
        JButton sqFiveBUT = new JButton();
        JButton sqSixBUT = new JButton();
        JButton sqOneBUT = new JButton();
        JButton sqEightBUT = new JButton();
        JButton sqNineBUT = new JButton();
        JButton sqSevenBUT = new JButton();
        JTextField turnTF = new JTextField();
        JTextField oWinsTF = new JTextField();
        JTextField xWinsTF = new JTextField();
        JLabel oWinsLBL = new JLabel();
        JLabel xWinsLBL = new JLabel();
        JButton newGameBUT = new JButton();
    }

    This code should be the poster-child for every time we tell someone that repeated code can usually be replaced with collections or method calls.
            if (e.getSource() == sqOneBUT) { //disable and print X or O to button
                sqOneBUT.setText(turn); //printing players symbol
                sqOneBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqTwoBUT) { //disable and print X or O to button
                sqTwoBUT.setText(turn); //printing players symbol
                sqTwoBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqThreeBUT) { //disable and print X or O to button
                sqThreeBUT.setText(turn); //printing players symbol
                sqThreeBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqFourBUT) { //disable and print X or O to button
                sqFourBUT.setText(turn); //printing players symbol
                sqFourBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqFiveBUT) { //disable and print X or O to button
                sqFiveBUT.setText(turn); //printing players symbol
                sqFiveBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqSixBUT) { //disable and print X or O to button
                sqSixBUT.setText(turn); //printing players symbol
                sqSixBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqSevenBUT) { //disable and print X or O to button
                sqSevenBUT.setText(turn); //printing players symbol
                sqSevenBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqEightBUT) { //disable and print X or O to button
                sqEightBUT.setText(turn); //printing players symbol
                sqEightBUT.setEnabled(false); //disabling button
            if (e.getSource() == sqNineBUT) { //disable and print X or O to button
                sqNineBUT.setText(turn); //printing players symbol
                sqNineBUT.setEnabled(false); //disabling button
            String sqOne = sqOneBUT.getText(); // Strings to read to find winner
            String sqTwo = sqTwoBUT.getText(); // Strings to read to find winner
            String sqThree = sqThreeBUT.getText(); // Strings to read to find winner
            String sqFour = sqFourBUT.getText(); // Strings to read to find winner
            String sqFive = sqFiveBUT.getText(); // Strings to read to find winner
            String sqSix = sqSixBUT.getText(); // Strings to read to find winner
            String sqSeven = sqSevenBUT.getText(); // Strings to read to find winner
            String sqEight = sqEightBUT.getText(); // Strings to read to find winner
            String sqNine = sqNineBUT.getText(); // Strings to read to find winner

  • Tic Tac Toe Problem

    I need help on a Tic Tac Toe game I am making for a class. I had finished a "2 Player" version and my instructor wants me to simulate a computer "AI" now. I cannot figure out what I'm doing wrong. The order of precedence is this:
    1. X moves first (the player)
    2. Computer moves to win.
    3. If it can't win, it moves to block a win
    4. If it can't block a win, it moves to the best possible spot to set up a win.
    I think my problems are with several methods, but I cannot figure out what I'm doing wrong. Every time I look at my code, it just makes "sense". I think my problems could probably be found in 4 methods, setButtonText(), findOpen(), findBestOpen() and tempCheck(). I would like hints or maybe if I could get a second look at it for me.
    public class VangTicTacToe extends javax.swing.JFrame {
        private boolean isX;
        private int turnCount;
        private boolean gameWon;
        private boolean isTemp;
        /** Creates new form VangTicTacToe */
        public VangTicTacToe() {
            initComponents();
            resetGame();
            isX = true;
            turnCount = 0;
        private void checkWinner(String pressedButton){
            //an multi-dimensional array of winning combinations
            JButton[][] winningCombos = {{oneJButton, twoJButton,
            threeJButton}, {oneJButton, fourJButton,
            sevenJButton}, {oneJButton, fiveJButton, nineJButton},
            {twoJButton, fiveJButton, eightJButton}, {threeJButton, sixJButton,
            nineJButton}, {fourJButton, fiveJButton, sixJButton}, {sevenJButton,
            eightJButton, nineJButton}, {sevenJButton, fiveJButton, threeJButton}};
            String buttonPressed = pressedButton;
            //loops and determines if any of the possible winning combinations have been
            //met for X and displays output accordingly
            for(JButton[] row : winningCombos){
                for(JButton button : row){
                    if(button.getText().equals(buttonPressed)){
                        gameWon = true;
                    else{
                        gameWon = false;
                        break;
                }//end inner for
                if(gameWon == true && isTemp == false){
                    for(JButton button : row){
                        button.setBackground(Color.green);
                    }//end inner for
                    if(pressedButton.equals("X"))
                        outputJLabel.setText("Congratulations! Player 1 (\"X\") Wins!");
                    else
                        outputJLabel.setText("Sorry, computer wins.");
                    disableButtons();
                    break;
                }//end if
                else{
                    continue;//go to next outer loop and keep searching
            }//end outer for
        }//end method checkWinner
        private void setButtonText(JButton buttonPressed){
            if(isX == true){
                buttonPressed.setText("X");
                isX = false;
                checkWinner("X");
                outputJLabel.setText("Computer's turn");
                isTemp = true; //sets isTemp to true so that the test is temporary
                findOpen();//calls findOpen to start computer move
            //disable the button so it cannot be pressed again
            buttonPressed.setEnabled(false);
            //increment the turn count number
            turnCount++;
            if(turnCount == 9)
                outputJLabel.setText("Cats Game! You both are losers!");
        }//end method setText
        //the following 3 methods are for a computer move
         //find next open space
        private void findOpen(){
            //array of buttons
            JButton[] buttons = {oneJButton, twoJButton, threeJButton, fourJButton,
            fiveJButton, sixJButton, sevenJButton, eightJButton, nineJButton};
            //moves through array of buttons and looks for empty.  If empty,
            //it calls temporary select method.
            for (int count = 0; count < buttons.length; count++){
                if(buttons[count].getText().isEmpty())
                    tempCheck(buttons[count]);
            }//end for loop
            //if gameWon is false, call findBestButton to find the best open spot
            if(gameWon == false){
                findBestButton();
        }//end method findOpen
        private void findBestButton(){
            //an multi-dimensional array of winning combinations
            JButton[][] winningCombos = {{oneJButton, twoJButton,
            threeJButton}, {oneJButton, fourJButton,
            sevenJButton}, {oneJButton, fiveJButton, nineJButton},
            {twoJButton, fiveJButton, eightJButton}, {threeJButton, sixJButton,
            nineJButton}, {fourJButton, fiveJButton, sixJButton}, {sevenJButton,
            eightJButton, nineJButton}, {sevenJButton, fiveJButton, threeJButton}};
            boolean placeO = false;
            int buttonCount = 0;
            for(JButton[] row : winningCombos){
                for(JButton button : row){
                    if(button.getText().equals("O") || button.getText().equals("")){
                        placeO = true;
                    else{
                        placeO = false;
                        buttonCount = 0;
                    if(placeO == true){
                        ++buttonCount;
                    else{
                        break;
                    if(buttonCount == 3 && placeO == true){
                        button.setText("O");
                }//end inner for
                if(placeO == true){
                    isX = true;
                    break;
                else{
                    continue;
            }//end outer for
        }//end method findBestButton
        //checks if temp move would win
        private void tempCheck(JButton tempButton){
            //temporarily assigns "O" to a square and checks if it wins
            tempButton.setText("O");
            checkWinner("O");
            if(gameWon == true){//if it wins then set temp to false and call
                isTemp = false;//checkWinner();
                checkWinner("0");
            else{
                tempButton.setText("");//else, set buttonText to empty
            }//end if
            if(gameWon == false){//if gameWon is false, check if "X" would win
                tempButton.setText("X");
                isTemp = true;
                checkWinner("X");
                if(gameWon == true){//if x is going to win,
                    tempButton.setText("O");//block the player from winning
                else{
                    tempButton.setText("X");
        }//end method tempCheck()
    }

    touandcim wrote:
    I click to make "X"'s (the player's move). X appears but O never does, although a button is highlighted. If I keep pressing the buttons, all X's appear until the last move, when an "O" appears.I don't know if it's the problem, but
    checkWinner("0");looks suspicious. (2nd invocation in your tempCheck() method).
    Your program seems awfully brittle. How would you do it if you had a 4 x 4 board? Or 5 x 5?
    Also, your 'winningCombos' array is repeated everywhere it's used. There's no need for that; just make it an instance variable/constant.
    Winston

  • Help Tic Tac Toe beginner

    A Tic Tac Toe board is represented as an array of 9 chars. Write a program that will allow two users to play tic tac toe. The player should ask for moves alternately from players X and O. The program is too dumb to check whether anyone has won or lost and just stops after 9 turns. The program should display the game position as follows after each move.
    The output should be somewhat as follows:
    Choose a spot (1 to 9) for X: 1
    X || ||
    || ||
    || ||
    Basically i have to do this. I was wondering if anyone could lead me in the right direction please?

    class TicTacToe {
        // instance variables
        // constructor(s)
        // method(s)
        public static void main(String[] args) {
            new TicTacToe();
    }There you go. I got you started. Now all you need to do is finish.

  • Tic Tac Toe Help!

    I have this code so far and it won't compile, and I don't know how to fix it, can anyone help me?
    import java.awt.*;
    import javax.swing.*;
    public class TicTacToe extends JFrame{
         public void main (String [] args){
         TicTacToe t3 = new TicTacToe();
    t3.setSize(400, 400);
    t3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t3.setLayout(new GridLayout(3,3));
              JButton NW = new JButton("");
              JButton N = new JButton("");
              JButton NE = new JButton("");
              JButton W = new JButton("");
              JButton C = new JButton("");
              JButton E = new JButton("");
              JButton SW = new JButton("");
              JButton S = new JButton("");
              JButton SE = new JButton("");
    t3.add(NW);
              NW.addActionListener(new PressedButton());
              t3.add(N);
              N.addActionListener(new PressedButton());
              t3.add(NE);
              NE.addActionListener(new PressedButton());
              t3.add(W);
              W.addActionListener(new PressedButton());
              t3.add(C);
              C.addActionListener(new PressedButton());
              t3.add(E);
              E.addActionListener(new PressedButton());
              t3.add(SW);
              SW.addActionListener(new PressedButton());
              t3.add(S);
              SW.addActionListener(new PressedButton());
              t3.add(SE);
              SE.addActionListener(new PressedButton());
    t3.setVisible(true);
              public class PressedButton implements ActionListener{
                   public void actionPerformed(ActionEvent e){
                   JButton button = (JButton)e.getSource();
                        if (O turn){
                        button.setText("O");
                        }else{
                             button.setText("X");
         private class checkEndgame{
              private void checkEndgame(){
                   for (final int[] winChance : TicTacToe.winChances) {
                        if (this.checkVictory(winChance)) {
                        final String winner = this.turn.equals("X") ? "O" : "X";
                        JOptionPane.showMessageDialog(this.frame, winner + " won the game!",
                        "Game Over", JOptionPane.INFORMATION_MESSAGE);
                        this.reset();
                        return;
    Does anyone notice any errors that i might have over looked?
    thanks

    Ok scratch out that entire code, i started over and it still won't compile.
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event;
    public class TicTacToe implements ActionListener{
         private int[][] winCombinations = new int[][]{
                   {1, 2, 3}, {4, 5, 6}, {7, 8, 9},
                   {1, 4, 7}, {2, 5, 8}, {3, 6, 9},
                   {1, 5, 9}, {3, 5, 7}
              private JFrame window = new JFrame("Tic-Tac-Toe");
         private JButton buttons[] = new JButton[10];
         private int count = 0;
         private String letter = "";
         private boolean win = false;
              public class PressedButton{
                   public void actionPerformed(ActionEvent a) {
                   count++;
                        if(count % 2 == 0){
                        letter = "O";
                        } else {
                        letter = "X";
                        for(int t=1; t<=9; t++){
                             if(a.getSource() == buttons[t]){
                             buttons[t].setText(letter);
                        buttons[t].setEnabled(false);
              for(int i=0; i<=7; i++){
                   if( buttons[winCombinations[t][0]].getText() == buttons[winCombinations[t][1]].getText() &&
                        buttons[winCombinations[t][1]].getText() == buttons[winCombinations[t][2]].getText() &&
                        buttons[winCombinations[t][0]].getText() != ""){
                        win = true;
              if(win == true){
                   JOptionPane.showMessageDialog(null, letter + " wins the game!");
                   System.exit(0);
              } else if(count == 9 && win == false){
                   JOptionPane.showMessageDialog(null, "The game was a tie!");
                   System.exit(0);
    the error message says that I still need a "}" on line 49 which is the line after the last bracket that I have, I put one there and it still shows up an error message, what do I do?

Maybe you are looking for

  • How to import songs from iPod to iTunes library

    Is there anyway to take the songs off my iPod that I synced onto it from one computer and put them on another computer that I have also authorized? I have tried a couple different ways, and can't get it, so if there is a way to do this, I would be ha

  • Apple-unlocked iPhone became locked suddenly!!

    I have an Apple-unlocked iPhone 3GS which I bought in Australia 2 years ago. It's always worked fine with various SIMs and varuious carriers - I travel a lot so unlocked was my chocie as I use SIMs in each country I visit. Recently in UK, I bought an

  • How do I download an Audible book to my iPod?  I keep getting a message that iTunes is not loaded correctly?

    I am trying to download a book from Audible.com.  I have it downloaded to my computer but when I try to send it to my iPod it says iTunes is not loaded correctly and I need to reinstall.  I did reinstall but didn't solve the problem.  Thanks!

  • Help fix my iTunes Library PUH-LEEZE!!

    Hello all. I'm not sure where to post this, so I did so here. A while back I was messin' with what I think was the itunes library. I was trying to have my entire library accessible through all accounts on this computer, and through the other macs in

  • Address Tab in Mail

    Hi, when I want foward an email - I like to use the address tab in email and it ussually brings up an abbreviated address book window which I can then double click on my contact then hit send - great. Now when I click the address tab nothing happens.