Search code examples
javanullpointerexceptiontic-tac-toe

TicTacToe win conditions problems


New programmer here, writing a Tictactoe game using Java on Eclipse.

I have problems with my win conditions I think. It comes up with the error: Exception in thread "main" java.lang.NullPointerException at Game.NoughtsCrosses.(NoughtsCrosses.java:106) at Game.Main.main(Main.java:5)

Here is my win conditions bit. It's not well made imo, but I'm having problems when compiling. Can anyone spot why? Ty!!

I have squares set up in a 3x3 grid, 0 -> 8. Each button has its own text which is set to X or O when clicked by each player.

winconditions code:

if (square[0].getText().equals(square[1].getText()) && square[1].getText().equals(square[2].getText()) != square[0].getText().isEmpty()) {
    win = true;
}

Full Pastebin of code

Thanks again :) Any questions, I can elaborate :D


Solution

  • Well I took the code that you provided and after significant finagling was able to make a fully functioning Tic-Tac-Toe game. You were mostly on the right track with what you were doing you just needed to first begin with a design.

    In my NoughtsCrosses class I have the following:

    • class Action implements ActionListener
      • This has a JButton attribute that I pass in through a constructor
      • In the actionPerformed
        • set the text
        • disable the button
        • increment the counter
        • check if someone wins
          • If there is a winner or draw game ends set the "Play again?" text
          • else call the changeTurn function
    • class Reset implements ActionListenter
      • This has a JButton attribute that I pass in through a constructor
      • In the actionPerformed
        • I call the resetGame function
    • function changeTurn
    • function resetGame
    • function checkForWinners

    as a hint, this is my implementation of the Action class and an example of the constructor I mentioned

    class Action implements ActionListener{ 
     private JButton button;
     public Action(JButton button){ 
      this.button = button; 
     } 
     public void actionPerformed(ActionEvent e) { 
       button.setText(letter); 
       button.setEnabled(false); 
       counter++; 
       boolean gameOver = checkForWinners(); 
       if(!gameOver) 
        changeTurn(); 
       else{ 
        newgame.setText("Play again?"); 
        newgame.addActionListener(resetButton); 
       } 
     } 
    }
    

    a call like new Action(square[i]) is what you need to make this work. Note: the resetButton is of the Reset class I mention above much like the Action class it has the same construct that I passed newgame into.