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;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.