![]() |
|
tic tac toe - Printable Version +- Sinisterly (https://sinister.ly) +-- Forum: Coding (https://sinister.ly/Forum-Coding) +--- Forum: Java, JVM, & JRE (https://sinister.ly/Forum-Java-JVM-JRE) +--- Thread: tic tac toe (/Thread-tic-tac-toe) |
tic tac toe - blackeagle - 11-12-2013 few days ago i saw @Ex094 working on making a tic tac toe game in c i found it interesting and it will be a good challenge for me so i started working on that project !! as every1 helped me on my first project rock scissors paper game and gave me feedbacks to make it better i wish you could do the same here !! first i'll share with you my code i'm stuck somewhere couldn't figure out a way to do it so you guys could start by helping me solving this problem then giving me advices on how to make my code better!! Spoiler:Code: package tictactoe;
import java.util.Random;
import java.util.Scanner;
public class TicTacToe {
public static void viewBoard(char board[]){
System.out.println("|"+board[0]+"|"+board[1]+"|"+board[2]+"|");
System.out.println("|"+board[3]+"|"+board[4]+"|"+board[5]+"|");
System.out.println("|"+board[6]+"|"+board[7]+"|"+board[8]+"|");
}
public static int whoStart(){
int turn;
int rand=new Random().nextInt(2);
if(rand==1){return turn=1;}
return turn=2;
}
public static int makeMove(char board[],int turn,int box){
if(turn%2==0){board[box]='o';}
else{board[box]='x';
}
return box;
}
public static boolean isValidMove(char board[],int box){
if ((board[box]=='x')||(board[box]=='o')){return true;
}
return false;
}
public static boolean checkWin(char board[]){
//first horizontal line
if(((board[0]==board[1])&&(board[1]==board[2])&&(board[2]=='o'))||
((board[0]==board[1])&&(board[1]==board[2])&&(board[2]=='x'))||
//seconde horizontal line
((board[3]==board[4])&&(board[4]==board[5])&&(board[5]=='o'))||
((board[3]==board[4])&&(board[4]==board[5])&&(board[5]=='x'))||
//third horizontal line
((board[6]==board[7])&&(board[7]==board[8])&&(board[8]=='o'))||
((board[6]==board[7])&&(board[7]==board[8])&&(board[8]=='x'))||
//first vertical line
((board[0]==board[3])&&(board[3]==board[6])&&(board[6]=='o'))||
((board[0]==board[3])&&(board[3]==board[6])&&(board[6]=='x'))||
//seconde vertical line
((board[1]==board[4])&&(board[4]==board[7])&&(board[7]=='o'))||
((board[1]==board[4])&&(board[4]==board[7])&&(board[7]=='x'))||
//third vertical line
((board[2]==board[5])&&(board[5]==board[8])&&(board[8]=='o'))||
((board[2]==board[5])&&(board[5]==board[8])&&(board[8]=='x'))||
//first diagonal line
((board[0]==board[4])&&(board[4]==board[8])&&(board[8]=='o'))||
((board[0]==board[4])&&(board[4]==board[8])&&(board[8]=='x'))||
//seconde diagonal line
((board[6]==board[4])&&(board[4]==board[2])&&(board[2]=='o')))
{return true;}
return false;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
char board[]={'0','1','2','3','4','5','6','7','8'};
System.out.println("enter player 1 name");
String player1Name=in.nextLine();
System.out.println("enter player 2 name");
String player2Name=in.nextLine();
viewBoard(board);
System.out.println(whoStart());
int turn=whoStart();int counter=0;
do{ System.out.println("choose box number");
int box=in.nextInt();
while(isValidMove(board,box)){
System.out.println("choose another box");
box=in.nextInt();}
makeMove(board,turn,box);
viewBoard(board);
turn++;
counter++;
}
while ((counter<9)&&(checkWin(board)==false));
}ok so as you can see in my main it keeps asking to choose a box until the counter is equal or bigger then 9 or we have a winner!! what i want to do is after the do while is over if we have a winner i wanted to say the winner is player 1 if player 1 won or the winner is player 2 if player 2 won and finally it's a tie if no1 won !! can u give me ideas on how to do it ? thx in advance for the help
RE: tic tac toe - Ex094 - 11-12-2013 I think the CheckWin part can be done in a more clear way using Java, Do some searches on Google and I'm sure you'll find it. RE: tic tac toe - blackeagle - 11-12-2013 i'll work on this later but first i need a little help to be able to finish my code !! RE: tic tac toe - Deque - 11-13-2013 Quote:what i want to do is after the do while is over if we have a winner i wanted to say the winner is player 1 if player 1 won or the winner is player 2 if player 2 won and finally it's a tie if no1 won !! Instead of returning a boolean let the checkWin return who won. Look into Enums: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html Then create an enum type that has the values: PLAYER1, PLAYER2, NO_WINNER Then you will say something like: Code: while ((counter < 9) && (checkWin(board) == NO_WINNER));
if (counter >= 9) {
//tie
} else if (checkWin(board) == PLAYER1) {
//player 1 is winner
} else {
//player 2 is winner
} |