I recently made a Tic Tac Toe game in java for a school assignment and it works good for the most part....
In the Example below the first move was made by the player and the 2nd by the AI The issue as you can see is that the Ai just placed a marker on the where the player previously placed their marker. This issue is of random occurrence and I dont know where the bug in the code is.
you entered Row: 3 and Column: 3
| X | | O | | O |
| 4 | | O | | 6 |
| X | | X | | O |
| X | | O | | O |
| 4 | | O | | 6 |
| X | | X | | X |
You lost to a computer! Would you like to play again? Type 1 for yes or 2 to quit
The code is below from the 5 classes: Main Class
public static void main(String[] args) {
System.out.println("Welcome to Tick Tac Toe. You will be playing versus a Super Computer!!!");
System.out.println();
boolean playAgain = true;
Scanner s = new Scanner(System.in);
//************ Java Creates the player Objects************//
HumanPlayer human = new HumanPlayer();
Computer computer = new Computer();
while(playAgain){
//**************The Board gets setup and the player picks their marker*************//
SetUp Setup = new SetUp();
Setup.createBoard();
Setup.printBoard();
System.out.println("Please choose your marker");
System.out.println("Type 1 for 'X' or 2 for '0'");
//set markers
if(s.nextInt() == 1){
// create player objects
human.setMarker("X");
computer.setMarker("O");
System.out.println("You are now X");
System.out.println("The computer is O");
}
else
{
human.setMarker("O");
computer.setMarker("X");
System.out.println("You are now O");
System.out.println("The computer is X");
}
//*************Randomly Choose a number from 0 to 1*********************//
Random rn = new Random();
int first = rn.nextInt(2);
boolean won = false;
int turns = 0;
//*********************If you go FIRST**********************//
if(first == 0){
System.out.println("You go First!");
System.out.println();
while(!won){
human.takeTurn(Setup.getBoard());
turns++;
Setup.printBoard();
if(Setup.hasWon(Setup.getBoard())){
won = true;
System.out.println("Congrats you won!");
}
if (turns == 9){
System.out.println("Its a draw!");
break;
}
if(!won){
computer.takeTurn(Setup.getBoard(), human);
turns++;
System.out.println();
Setup.printBoard();
System.out.println();
if(Setup.hasWon(Setup.getBoard())){
won = true;
System.out.println("You lost to a computer!");
}
if(turns == 9){
System.out.println("Its a draw!");
break;
}
}
}
}
//*******************If the computer goes FIRST******************//
else {
System.out.println("Computer goes first!");
System.out.println();
while(!won){
computer.takeTurn(Setup.getBoard(), human);
turns++;
Setup.printBoard();
if(Setup.hasWon(Setup.getBoard())){
won = true;
System.out.println("You lost to a computer!");
}
if(turns == 9){
System.out.println("Its a draw!");
break;
}
if(!won){
human.takeTurn(Setup.getBoard());
turns++;
System.out.println();
Setup.printBoard
();
System.out.println();
if(Setup.hasWon(Setup.getBoard())){
won = true;
System.out.println("You are victorious!");
}
if(turns == 9){
System.out.println("Its a draw!");
break;
}
}
}
}
//********************* Asks the user if they want to play again or quit**************************//
System.out.println("Would you like to play again? Type 1 for yes or 2 to quit");
System.out.println();
if(s.nextInt() == 2){
playAgain = false;
}
}
}
}
Setup Class
public class SetUp extends Player{
// setup variables default board size and board
private int Y = 3;
public String[][] board = new String [Y][Y];
public boolean hasWon (String [] [] board){
//horizontal
for(int i = 0; i<3; i++){
if(board[i][0].equals(board[i][1]) && board[i][1].equals(board[i][2])){
return true;
}
}
//vertical
for(int i = 0; i<3; i++){
if(board [0][i].equals(board[1][i]) && board[1][i].equals(board[2][i])){
return true;
}
}
//diagonal
if(board[0][0].equals(board[1][1]) && board[1][1].equals(board[2][2]) || board[2][0].equals(board[1][1]) && board[1][1].equals(board[0][2]))
return true;
return false;
}
int x = 1;
public void createBoard(){
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board.length; j++){
board[i][j] = "" + (x) + "";
x++;
}
}
}
public void printBoard(){
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board.length; j++){
System.out.print("| " + board[i][j] + " |" + " ");
}
System.out.println();
}
}
public String[][] getBoard(){
return board;
}
}
Player Class
public class Player {
public String Player;
// set marker method
public void setMarker(String marker){
Player = marker;
}
//get marker method
public String getMarker(){
return Player;
}
}
HumanPlayer Class
class HumanPlayer extends Player {
public HumanPlayer(){
}
public void takeTurn(String[][] board) {
Scanner s = new Scanner(System.in);
boolean turn = true;
while(turn){
System.out.println("Please enter row #");
int row = s.nextInt();
System.out.println("Please enter column #");
int col = s.nextInt();
System.out.print("you entered Row: "+row+" and Column: "+col);
System.out.println();
if(board[row - 1][col - 1] != "X" && board[row - 1][col - 1] != "O"){
board[row - 1][col - 1] = Player;
turn = false;
}
else {
System.out.println("Someone already placed a marker in this location. Pick another location");
}
}
}
}
Computer Class:
class Computer extends Player {
public Computer(){
}
int boardsize = 3;
public void takeTurn(String[][] board, HumanPlayer human) {
boolean mademove = false;
for(int i = 0; i<3; i++){
if(board[0][i].equals(board[1][i]) && board[0][i].equals(Player)){
if(board[2][i] != human.getMarker() && board[2][i] != Player){
board[2][i] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[2][i].equals(board[1][i]) && board[2][i].equals(Player)){
if(board[0][i] != human.getMarker() && board[0][i] != Player){
board[0][i] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[i][0].equals(board[i][1]) && board[i][0].equals(Player)){
if(board[i][2] != human.getMarker() && board[i][2] != Player){
board[i][2] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[i][2].equals(board[i][1]) && board[i][2].equals(Player)){
if(board[i][0] != human.getMarker() && board[i][0] != Player){
board[i][0] = Player;
mademove = true;
return;
}
}
}
if(board[0][0].equals(board[1][1]) && board[0][0].equals(Player)){
if(board[2][2] != human.getMarker() && board[2][2] != Player){
board[2][2] = Player;
mademove = true;
return;
}
}
if(board[2][2].equals(board[1][1]) && board[2][2].equals(Player)){
if(board[0][0] != human.getMarker() && board[0][0] != Player){
board[0][0] = Player;
mademove = true;
return;
}
}
if(board[0][0].equals(board[1][1]) && board[0][0].equals(Player)){
if(board[2][2] != human.getMarker() && board[2][2] != Player){
board[2][2] = Player;
mademove = true;
return;
}
}
if(board[0][2].equals(board[1][1]) && board[0][2].equals(Player)){
if(board[2][0] != human.getMarker() && board[2][0] != Player){
board[2][0] = Player;
mademove = true;
return;
}
}
if(board[2][0].equals(board[1][1]) && board[2][0].equals(Player)){
if(board[0][2] != human.getMarker() && board[0][2] != Player){
board[0][2] = Player;
mademove = true;
return;
}
}
for(int i = 0; i<3; i++){
if(board[0][i].equals(board[1][i]) && board[0]
[i].equals(human.getMarker())){
if(board[2][i] != Player && board[2][i] != human.getMarker()){
board[2][i] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[2][i].equals(board[1][i]) && board[0]
[i].equals(human.getMarker())){
if(board[0][i] != Player && board[0][i] != human.getMarker()){
board[0][i] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[i][0].equals(board[i][1]) && board[i]
[0].equals(human.getMarker())){
if(board[i][2] != Player && board[i][2] != human.getMarker()){
board[i][2] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[i][2].equals(board[i][1]) && board[i]
[2].equals(human.getMarker())){
if(board[i][0] != Player && board[i][0] != human.getMarker()){
board[i][0] = Player;
mademove = true;
return;
}
}
}
for(int i = 0; i<3; i++){
if(board[2][i].equals(board[1][i]) && board[2]
[i].equals(human.getMarker())){
if(board[0][i] != Player && board[0][i] != human.getMarker()){
board[0][i] = Player;
mademove = true;
return;
}
}
}
if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker()))
{
if(board[2][2] != Player && board[2][2] != human.getMarker()){
board[2][2] = Player;
mademove = true;
return;
}
}
if(board[2][2].equals(board[1][1]) && board[2][2].equals(human.getMarker()))
{
if(board[0][0] != Player && board[0][0] != human.getMarker()){
board[0][0] = Player;
mademove = true;
return;
}
}
if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker()))
{
if(board[2][2] != Player && board[2][2] != human.getMarker()){
board[2][2] = Player;
mademove = true;
return;
}
}
if(board[0][2].equals(board[1][1]) && board[0][2].equals(human.getMarker()))
{
if(board[2][0] != Player && board[2][0] != human.getMarker()){
board[2][0] = Player;
mademove = true;
return;
}
}
if(board[2][0].equals(board[1][1]) && board[2][0].equals(human.getMarker()))
{
if(board[0][2] != Player && board[0][2] != human.getMarker()){
board[0][2] = Player;
mademove = true;
return;
}
}
// Ai Makes a random move.
int rand1 = 0;
int rand2 = 0;
while(!mademove){
rand1 = (int) (Math.random() * 3);
rand2 = (int) (Math.random() * 3);
if(board[rand1][rand2] != "x" && board[rand1][rand2] != "o"){
board[rand1][rand2] = Player;
mademove = true;
}
}
}
}
Thank you for the help guys.
Aucun commentaire:
Enregistrer un commentaire