规则:
X先手,O后手
先三子连线者获胜
判断棋盘是否是错误的棋盘:
因为总是X先手,所有x-n == 1 或者 0
若双方同时三子,错误棋盘
若X获胜,且 x-n == 0 则棋盘错误
若O获胜,且x-n == 1,则棋盘错误
判断谁先赢:
这个都会判断,关键在于,判断棋盘棋子不是空的位置是每行的中间位置,每列的中间位置,或者是交叉的中间位置
否则可能判断失误
代码:
package test; import java.io.File; import java.util.Arrays; import java.util.Scanner; //京东三子棋 public class sanxiqi { public static void main(String[] a){ //读取用户的输入 Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { char[][] chars = new char[3][3]; int nX = 0; int nO = 0; for (int i = 0; i < chars.length; i++) { String input = scanner.next(); for (int j = 0; j < chars.length; j++) { chars[i][j] = input.charAt(j); if (chars[i][j] == 'X') { nX++; } else if (chars[i][j] == '0') { nO++; } } } //判断是否是错误的棋盘 int i = nX - nO; // boolean isIlleal = true; if (i != 1 && i != 0) { System.out.println("x"); continue; // isIlleal = false; } //判断输赢 boolean wX = false; boolean wO = false; //横行 for (int j = 0; j < chars.length; j++) { if (chars[j][1] != '.' && chars[j][0] == chars[j][1] && chars[j][1] == chars[j][2]) { if (chars[j][1] == 'X') { wX = true; } else { wO = true; } } } //纵行 for (int j = 0; j < chars.length; j++) { if (chars[1][j] != '.' && chars[0][j] == chars[1][j] && chars[1][j] == chars[2][j]) { if (chars[1][j] == 'X') { wX = true; } else { wO = true; } } } //交叉 if (chars[1][1] != '.' && chars[0][0] == chars[1][1] && chars[1][1] == chars[2][2] ||chars[0][2] == chars[1][1] && chars[1][1] == chars[2][0]) { if (chars[1][1] == 'X') { wX = true; } else { wO = true; } } //输出棋盘结果 if (wX && i == 0 || wO && i == 1 || wX && wO) { System.out.println('x'); } else if (wX) { System.out.println("1 won"); } else if (wO) { System.out.println("2 won"); } else if (nX + nO == 9) { System.out.println("draw"); } else if (i == 1) { System.out.println("2"); } else if (i == 0) { System.out.println("1"); } } } }