当前位置: 首页 > 知识库问答 >
问题:

Java Tic Tac Toe win-condition

贝嘉泽
2023-03-14
import java.util.Scanner;

public class tictactoe {

private static char[][] board;
private char currentPlayer = 'X';

public static void main(String[] args) {
    board = new char [3][3];
    tictactoe game = new tictactoe();

    game.welcomeAndInstruct();
    game.boardInit();
    game.playerTurn();

}

public void playerTurn() {
    do {
        Scanner input = new Scanner(System.in);
        System.out.print("Player " + currentPlayer + "'s turn: ");
        int move = input.nextInt();
        if (move == 1) {
            placeMark(0, 0);
            drawBoard();
        } else if (move == 2) {
            placeMark(0, 1);
            drawBoard();
        } else if (move == 3) {
            placeMark(0, 2);
            drawBoard();
        } else if (move == 4) {
            placeMark(1, 0);
            drawBoard();
        } else if (move == 5) {
            placeMark(1, 1);
            drawBoard();
        } else if (move == 6) {
            placeMark(1, 2);
            drawBoard();
        } else if (move == 7) {
            placeMark(2, 0);
            drawBoard();
        } else if (move == 8) {
            placeMark(2, 1);
            drawBoard();
        } else if (move == 9) {
            placeMark(2, 2);
            drawBoard();
        } else {
            System.out.println("Invalid, choose a number between 1-9"); 
            continue; 
        }

    if (checkForWin()) {
        System.out.println("Player " + currentPlayer + " has won!");
        break;
    }

    if (isBoardFull()) {
        System.out.println("It's a tie!");
        break;
    }
    changePlayer();
} while (true);

}

//Empties the board by replacing all X/O with -
public void boardInit() {
    for (int r = 0; r < 3; r++) {
        for (int c = 0; c < 3; c++) {
            board[r][c] = '-';
        }
    }
}

//Draws the board in it's current state
public void drawBoard() {
    System.out.println("+---+---+---+");
    for (int r = 0; r < 3; r++) {
        System.out.print("| ");
        for (int c = 0; c < 3; c++) {
            System.out.print(board[r][c] + " | ");              
        }
        System.out.println();
        System.out.println("+---+---+---+");
    }
    System.out.println("\n-------------------------------------\n");

}

//Place's the current players mark in the indicated position
public void placeMark(int row, int col) {
    if ((row >= 0) && (row < 3)) {
        if ((col >= 0) && (col < 3)) {
            if (board[row][col] == '-') {
                board[row][col] = currentPlayer;    
            } 
        }
    }
}



//switches players
public char changePlayer() {
        if (currentPlayer == 'X') {
            currentPlayer = 'O';
        } else
            currentPlayer = 'X';
    return currentPlayer;
}


//checks whether the board is full or not
public boolean isBoardFull() {
    for (int r = 0; r < 3; r++) {
        for (int c = 0; c < 3; c++) {
            if (board[r][c] == '-') {
            return false;
            }
        }
    }
    return true;
}

//checks whether a win-condition exists or not
public boolean checkForWin() {
    //loops through rows checking if win-condition exists
    for (int r = 0; r < 3; r++) {
        if (board[r][0] == board[r][1] && board[r][1] == board[r][2] && board[r][0] != '-')
            return true;
        }
    //loops through columns checking if win-condition exists
    for (int c = 0; c < 3; c++++) {
        if (board[0][c] == board[1][c] && board[1][c] == board[2][c] && board[0][c] != '-' ) 
            return true;
        }
    //checks diagonals for win-condition
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')
        return true;

    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][0] != '-')
        return true;

    return false;
}

// prints the instructions at the start of the game
public void welcomeAndInstruct() {
    System.out.println("Welcome to Tic Tac Toe, a 2 player game for console.");
    System.out.println("Two players take turns in marking the squares on a 3 x 3 grid.");
    System.out.println("The player who succeeds in placing three of their marks in a horizontal, vertical or diagonal row wins the game.");
    System.out.println("To select a square on the grid by entering it's corresponding number when prompted, as shown below:");
    System.out.println();

    board[0][0] = '1';
    board[0][1] = '2';
    board[0][2] = '3';
    board[1][0] = '4';
    board[1][1] = '5';
    board[1][2] = '6';
    board[2][0] = '7';
    board[2][1] = '8';
    board[2][2] = '9';

    drawBoard();

    }
}

共有1个答案

长孙鸿
2023-03-14

在:

if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[0][0][0]!=“-”)

而不是板[0][0]检查板[0][2]

 类似资料:
  • 问题内容: 我正在使用Spring Boot 1.4.3 ,根据用户指定的属性自动创建bean。用户可以指定一系列服务,其中 名称 和 版本 为必填字段: 如果用户忘记了甚至只在一项服务上都指定了必填字段,那么我想回退而不创建任何bean。我可以用吗?我想要类似的东西: 问题答案: 这是我创建的风俗。它需要一些修饰才能更通用(即,不对字符串进行硬编码),但对我来说效果很好。 要使用,我用以下注释了

  • 问题内容: 我想知道是否有一种方法可以通过评估在运行时获取其值的类的对象,在运行时使用@conditionalonexpression来启用类。 例如: propertyobject实例在运行时填充了值(在程序开始时说)是否可以实现? 问题答案: 是的,可以,但是方法应该是静态的。 喜欢:

  • 问题内容: 我对Spring注释配置有疑问。我有一个bean: 我有一个属性文件: 在属性文件中,我想要一个特殊的boolean property 这标志着是否应该创建一个bean ObservationWebSocketClient。如果属性值为false,我根本不想建立Web套接字连接。 有没有实现这一目标的技术可能性? 问题答案: 尽管我没有使用过此功能,但似乎可以使用spring 4的注解

  • 本文向大家介绍Java并发之条件阻塞Condition的应用代码示例,包括了Java并发之条件阻塞Condition的应用代码示例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Java并发之条件阻塞Condition的应用示例代码,具体如下。 Condition将Object监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Loc

  • 本文向大家介绍Spring基于@Conditional条件化装配bean,包括了Spring基于@Conditional条件化装配bean的使用技巧和注意事项,需要的朋友参考一下 一 前言 理解spring的如何根据条件装配bean有助于我们更好使用springboot进行开发,和源码理解; 二 @Conditional 装配bean 思路如下 Spring中提供了@Conditional注解实现

  • 本文向大家介绍FleaPHP框架数据库查询条件($conditions)写法总结,包括了FleaPHP框架数据库查询条件($conditions)写法总结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了FleaPHP框架数据库查询条件($conditions)写法。分享给大家供大家参考,具体如下: 在FleaPHP中,凡是用到数据库查询的函数,都需要查询条件参数$conditions,现讲

  • 本文向大家介绍Spring条件注解@Conditional示例详解,包括了Spring条件注解@Conditional示例详解的使用技巧和注意事项,需要的朋友参考一下 前言 @Conditional是Spring4新提供的注解,它的作用是根据某个条件创建特定的Bean,通过实现Condition接口,并重写matches接口来构造判断条件。总的来说,就是根据特定条件来控制Bean的创建行为,这样我

  • 本文向大家介绍Spring @Conditional注解讲解及示例详解,包括了Spring @Conditional注解讲解及示例详解的使用技巧和注意事项,需要的朋友参考一下 前言: @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @Conditional的定义: 从代码中可以看到,需要传入一个Class数组,并且需要继承Con