分析井字游戏场/ Java

时间:2020-03-11 13:35:46

标签: java tic-tac-toe

我正在尝试分析井字游戏的领域: 找到当前游戏的状态。可能的状态:

  1. “游戏未完成”-当没有一方连续三局但该字段有空单元时
  2. “绘制”-当没有一方连续三列且该字段没有空单元格时
  3. “ X胜”-当该字段连续有三个X时
  4. “ O赢”-当该字段连续三个O时
  5. “不可能”-当字段连续有三个X和连续三个O时。或者该字段具有比O多得多的X(反之亦然)(如果差异为2或更大,则应为1或0)

我已经编写了代码,但是每次都未完成输出游戏。

package tictactoe;

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        System.out.println("---------");
        System.out.println("| " + s1.charAt(0) + " " + s1.charAt(1) + " " + s1.charAt(2) + " " + "|");
        System.out.println("| " + s1.charAt(3) + " " + s1.charAt(4) + " " + s1.charAt(5) + " " + "|");
        System.out.println("| " + s1.charAt(6) + " " + s1.charAt(7) + " " + s1.charAt(8) + " " + "|");
        System.out.println("---------");
        int index = 0;
        String[][] arr = new String[3][3];
        int numX = 0;
        int numO = 0;
        int count = 1;
        //entering value of char from string to array 
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                arr[i][j] = Character.toString(s1.charAt(index));
                //calculating number of X and O
                if (arr[i][j] == "X") {
                    numX++;
                    count++;
                } else if (arr[i][j] == "O") {
                    numO++;
                    count++;
                }
                index++;
            }
        }
        /*for (String[] i : arr) {
            System.out.println(Arrays.toString(i));
        }*/
        boolean won = false;
        for (int i = 0; i < 3; i++) {
            //checking rows for XXX
            if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != "O") {
                System.out.println("X wins");
                won = true;
            } 
            //checking rows for OOO
            else if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != "X") {
                System.out.println("O wins");
                won = true;
            } 
            //checking columns for XXX
            else if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != "O") {
                System.out.println("X wins");
                won = true;
            } 
            //checking columns for OOO
            else if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != "X") {
                System.out.println("O wins");
                won = true;
            }
        }
        if (won != true) {            
            //checking major diagonal for XXX
            if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != "O") {
                System.out.println("X wins");
            }
            //checking major diagonal for OOO
            else if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != "O") {
                System.out.println("O wins");
            }
            //checking minor diagonal for XXX
            else if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[0][2] != "O") {
                System.out.println("X wins");
            }
            //checking minor diagonal for OOO
            else if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[0][2] != "X") {
                System.out.println("O wins");
            } 
            //more O or X than possible
            else if (numO - numX > 1 || numX - numO > 1) {
                System.out.println("Impossible");
            }
            //Unfinished
            else if (count < 8) {
                System.out.println("Game not finished");
            } else {
                System.out.println("Draw");
            }
        }
    }
}

0 个答案:

没有答案
相关问题