Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

java Please fix this tic tac toe coding error following is the error I\'ve found

ID: 3814128 • Letter: J

Question

java

Please fix this tic tac toe coding error

following is the error I've found difficult for me to fix.

1. Before I click the board, the grid doesn’t show up at all

2. It is not an automatic system.(if I click, it doesn’t move to next move)

3. if you click a button twice it shows o, x both

4. it is hard to close (you have to close the instruction)

5. instruction keep pops up (start->if you lose you lose button etc…)

I want help for fixing this code, not a new one.

import java.awt.*;

import java.awt.event.*;

import java.applet.Applet;

public class TicTacToe extends Applet implements MouseListener

{

Frame board;

int whoseTurn = 0;

int n, m, i=0;

char ch[] = new char[9];

public TicTacToe()

{

board = new Frame("Tic Tac Toe");

board.setLayout(null);

board.setVisible(true);

board.setSize(600, 600);

board.addMouseListener(this);

for(i=0;i<9;i++)

ch[i]='B';

}

  

  

  

public void mouseClicked(MouseEvent e)

{

Graphics g = board.getGraphics();

g.drawLine(200,0,200,600);

g.drawLine(400,0,400,600);

g.drawLine(0,200,600,200);

g.drawLine(0,400,600,400);

  

whoseTurn++;

  

int x= e.getX();

int y= e.getY();

  

if(whoseTurn==2)

{

if(x<200&&y<200){m=0;n=0;ch[0]='X';}

if((x>200&&x<400)&&(y<200)){m=200;n=0;ch[1]='X';}

if((x>400&&x<600)&&(y<200)){m=400;n=0;ch[2]='X';}

if(x<200&&(y>200&&y<400)){m=0;n=200;ch[3]='X';}

if((x>200&&x<400)&&(y>200&&y<400)){m=200;n=200;ch[4]='X';}

if((x>400&&x<600)&&(y>200&&y<400)){m=400;n=200;ch[5]='X';}

if(x<200&&(y>400&&y<600)){m=0;n=400;ch[6]='X';}

if((x>200&&x<400)&&(y>400&&y<600)){m=200;n=400;ch[7]='X';}

if((x>400&&x<600)&&(y>400&&y<600)){m=400;n=400;ch[8]='X';}

g.setColor(Color.red);

g.drawLine(m,n,m+199,n+199);

g.drawLine(m+199,n,m,n+199);

}

if(whoseTurn==3)

{

if(x<200&&y<200){m=0;n=20;ch[0]='O';}

if((x>200&&x<400)&&(y<200)){m=200;n=20;ch[1]='O';}

if((x>400&&x<600)&&(y<200)){m=400;n=20;ch[2]='O';}

if(x<200&&(y>200&&y<400)){m=0;n=200;ch[3]='O';}

if((x>200&&x<400)&&(y>200&&y<400)){m=200;n=200;ch[4]='O';}

if((x>400&&x<600)&&(y>200&&y<400)){m=400;n=200;ch[5]='O';}

if(x<200&&(y>400&&y<600)){m=0;n=400;ch[6]='O';}

if((x>200&&x<400)&&(y>400&&y<600)){m=200;n=400;ch[7]='O';}

if((x>400&&x<600)&&(y>400&&y<600)){m=400;n=400;ch[8]='O';}

g.setColor(Color.green);

g.drawOval(m+10,n+10,169,169);

// g.drawLine(m,n,m+189,n+189);

// g.drawLine(m+199,n,m,n+199);

whoseTurn=whoseTurn-2;

}

for(i=0;i<9;i++) // for draw

{

if(ch[i]!='B')

{

if(i==8)

draw();

}

else

break;

}

for(i=0;i<3;i++) //for vertical

{

// System.out.print(ch[i]);

if(ch[i]!='B')

{

if((ch[i+3]==ch[i])&&(ch[i+6]==ch[i]))

win();

}

}

for(i=0;i<7;i++) //for horizontal

{

if(ch[i]!='B')

{

if((ch[i]==ch[i+1])&&(ch[i]==ch[i+2]))

win();

i=i+2;

}

else

i=i+2;

}

if(ch[4]!='B') //for diagonals

{

if(((ch[0]==ch[4])&&(ch[4]==ch[8]))||((ch[2]==ch[4])&&(ch[4]==ch[6])))

win();

}

}

public Frame win()

{

Frame m=new Frame("Result");

Label l=new Label("Game Over. You Win");

m.setLayout(null);

m.add(l);

l.setBounds(20,20,300,60);

m.setVisible(true);

m.setSize(150,100);

return m;

}

public Frame draw()

{

Frame m=new Frame("Result");

Label l1=new Label("Tie");

m.setLayout(null);

m.add(l1);

l1.setBounds(20,20,60,60);

m.setVisible(true);

m.setSize(100,100);

return m;

}

public void mouseReleased(MouseEvent e)

{

System.out.print("");

}

public void mouseEntered(MouseEvent e)

{

System.out.print("");

}

public void mouseExited(MouseEvent e)

{

System.out.print("");

}

public void mousePressed(MouseEvent e)

{

System.out.print("");

}

public static void main(String args [])

{

new TicTacToe();

}

}

Explanation / Answer

package com.javadb.tictactoe;

/**

*

* @author www.javadb.com

*/

public class Main {

    public void play() {

        TicTacToe game = new TicTacToe();

        System.out.println("Welcome! Tic Tac Toe is a two player game.");

        System.out.print("Enter player one's name: ");

        game.setPlayer1(game.getPrompt());

        System.out.print("Enter player two's name: ");

        game.setPlayer2(game.getPrompt());

        boolean markerOk = false;

        while (!markerOk) {

            System.out.print("Select any letter as " + game.getPlayer1() + "'s marker: ");

            String marker = game.getPrompt();

            if (marker.length() == 1 &&

                    Character.isLetter(marker.toCharArray()[0])) {

                markerOk = true;

                game.setMarker1(marker.toCharArray()[0]);

            } else {

                System.out.println("Invalid marker, try again");

            }

        }

        markerOk = false;

        while (!markerOk) {

            System.out.print("Select any letter as " + game.getPlayer2() + "'s marker: ");

            String marker = game.getPrompt();

            if (marker.length() == 1 &&

                    Character.isLetter(marker.toCharArray()[0])) {

                markerOk = true;

                game.setMarker2(marker.toCharArray()[0]);

            } else {

                System.out.println("Invalid marker, try again");

            }

        }

        boolean continuePlaying = true;

        while (continuePlaying) {

            game.init();

            System.out.println();

            System.out.println(game.getRules());

            System.out.println();

            System.out.println(game.drawBoard());

            System.out.println();

            String player = null;

            while (!game.winner() && game.getPlays() < 9) {

                player = game.getCurrentPlayer() == 1 ? game.getPlayer1() : game.getPlayer2();

                boolean validPick = false;

                while (!validPick) {

                    System.out.print("It is " + player + "'s turn. Pick a square: ");

                    String square = game.getPrompt();

                    if (square.length() == 1 && Character.isDigit(square.toCharArray()[0])) {

                        int pick = 0;

                        try {

                            pick = Integer.parseInt(square);

                        } catch (NumberFormatException e) {

                            //Do nothing here, it'll evaluate as an invalid pick on the next row.

                        }

                        validPick = game.placeMarker(pick);

                    }

                    if (!validPick) {

                        System.out.println("Square can not be selected. Retry");

                    }

                }

                game.switchPlayers();

                System.out.println();

                System.out.println(game.drawBoard());

                System.out.println();

            }

            if (game.winner()) {

                System.out.println("Game Over - " + player + " WINS!!!");

            } else {

                System.out.println("Game Over - Draw");

            }

            System.out.println();

            System.out.print("Play again? (Y/N): ");

            String choice = game.getPrompt();

            if (!choice.equalsIgnoreCase("Y")) {

                continuePlaying = false;

            }

        }

    }

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        Main main = new Main();

        main.play();

    }

}

package com.javadb.tictactoe;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

/**

*

* @author www.javadb.com

*/

public class TicTacToe {

    private char[][] board = new char[3][3];

    private String player1;

    private String player2;

    private int currentPlayer;

    private char marker1;

    private char marker2;

    private int plays;

    private BufferedReader reader =

            new BufferedReader(new InputStreamReader(System.in));

    protected void init() {

        int counter = 0;

        for (int i = 0; i < 3; i++) {

            for (int i1 = 0; i1 < 3; i1++) {

                board[i][i1] = Character.forDigit(++counter, 10);

            }

        }

        currentPlayer = 1;

        plays = 0;

    }

    protected void switchPlayers() {

        if (getCurrentPlayer() == 1) {

            setCurrentPlayer(2);

        } else {

            setCurrentPlayer(1);

        }

        setPlays(getPlays() + 1);

    }

    protected boolean placeMarker(int play) {

        for (int i = 0; i < 3; i++) {

            for (int i1 = 0; i1 < 3; i1++) {

                if (board[i][i1] == Character.forDigit(play, 10)) {

                    board[i][i1] = (getCurrentPlayer() == 1) ? getMarker1() : getMarker2();

                    return true;

                }

            }

        }

        return false;

    }

    protected boolean winner() {

        //Checking rows

        char current = ' ';

        for (int i = 0; i < 3; i++) {

            int i1 = 0;

            for (i1 = 0; i1 < 3; i1++) {

                if (!Character.isLetter(board[i][i1])) {

                    break;

                }

                if (i1 == 0) {

                    current = board[i][i1];

                } else if (current != board[i][i1]) {

                    break;

                }

                if (i1 == 2) {

                    //Found winner

                    return true;

                }

            }

        }

        //Checking columns

        for (int i = 0; i < 3; i++) {

            current = ' ';

            int i1 = 0;

            for (i1 = 0; i1 < 3; i1++) {

                if (!Character.isLetter(board[i1][i])) {

                    break;

                }

                if (i1 == 0) {

                    current = board[i1][i];

                } else if (current != board[i1][i]) {

                    break;

                }

                if (i1 == 2) {

                    //Found winner

                    return true;

                }

            }

        }

        //Checking diagonals

        current = board[0][0];

        if (Character.isLetter(current) && board[1][1] == current && board[2][2] == current) {

            return true;

        }

        current = board[2][0];

        if (Character.isLetter(current) && board[1][1] == current && board[0][2] == current) {

            return true;

        }

        return false;

    }

    protected String getRules() {

        StringBuilder builder = new StringBuilder();

        builder.append("Players take turns marking a square. Only squares ");

        builder.append("not already marked can be picked. Once a player has ");

        builder.append("marked three squares in a row, the player wins! If all squares ");

        builder.append("are marked and no three squares are the same, a tie game is declared. ");

        builder.append("Have Fun! ");

        return builder.toString();

    }

    protected String getPrompt() {

        String prompt = "";

        try {

            prompt = reader.readLine();

        } catch (IOException ex) {

            ex.printStackTrace();

        }

        return prompt;

    }

    protected String drawBoard() {

        StringBuilder builder = new StringBuilder("Game board: ");

        for (int i = 0; i < 3; i++) {

            for (int i1 = 0; i1 < 3; i1++) {

                builder.append("[" + board[i][i1] + "]");

            }

            builder.append(" ");

        }

        return builder.toString();

    }

    public int getCurrentPlayer() {

        return currentPlayer;

    }

    public void setCurrentPlayer(int currentPlayer) {

        this.currentPlayer = currentPlayer;

    }

    public char getMarker1() {

        return marker1;

    }

    public void setMarker1(char marker1) {

        this.marker1 = marker1;

    }

    public char getMarker2() {

        return marker2;

    }

    public void setMarker2(char marker2) {

        this.marker2 = marker2;

    }

    public int getPlays() {

        return plays;

    }

    public void setPlays(int plays) {

        this.plays = plays;

    }

    public String getPlayer1() {

        return player1;

    }

    public void setPlayer1(String player1) {

        this.player1 = player1;

    }

    public String getPlayer2() {

        return player2;

    }

    public void setPlayer2(String player2) {

        this.player2 = player2;

    }

}