java - 井字游戏使用方法java

标签 java tic-tac-toe

该代码应该玩 tictactoe,但打印游戏板方法中存在异常,越界异常,我无法弄清楚为什么。如果有人知道如何避免该异常,我将不胜感激。这是我到目前为止所拥有的:

 static char arrayList[][] = {{0,1,2},{0,1,2}};
 static Scanner input;
 public static void main(String[] args) {
 // Only one scanner!!!
 input = new Scanner(System.in);
 while (true) { // TTT 4 forever!
 printGameBoard();
 userInput();
 if (checkForWin('X')) {
 System.out.println("Congrats, you won!");
 break;
 }
 if (checkForStale()) {
 printGameBoard();
 System.out.println("Tie!");
 break;
 }
 computerTurn();
 if (checkForWin('O')) {
 System.out.println("All hail the future overlords!");
 break;
 }
 if (checkForStale()) {
 System.out.println("Tie!");
 break;
 }
 }
 }
 static void printGameBoard() {
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[0][0] + " | " + arrayList[0][1] + " | " + arrayList[0][2]
 + " |");
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[1][0] + " | " + arrayList[1][1] + " | " + arrayList[1][2]
 + " |");
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[2][0] + " | " + arrayList[2][1] + " | " + arrayList[2][2]
 + " |");
 System.out.println("+---+---+---+");
 }
 static void userInput() {
 System.out.print("Please enter the board number:");
 int place = input.nextInt();
// Note to self: check user input for sanity here!
 if (checkForSanity(place)) {
 placeOnBoard(place, 'X');
 System.out.println("Ok...");
 printGameBoard();
 } else {
 System.out.println("Wrong move!");
 }
 }
 static void computerTurn() {
 boolean placed = false;
 while (!placed) {
 // Randomly choose a place
 int place = (int) (1 + (Math.random() * 8));
 // Check if sane
 if (checkForSanity(place)) {
 placeOnBoard(place, 'O');
 placed = true;
 }
 }
 printGameBoard();
 }
 static boolean checkForWin(char piece) {
 if ((arrayList[0][0] == piece) && (arrayList[0][1] == piece) && (arrayList[0][2] == piece))
 return true;
 if ((arrayList[1][0] == piece) && (arrayList[1][1] == piece) && (arrayList[1][2] == piece))
 return true;
 if ((arrayList[2][0] == piece) && (arrayList[2][1] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][0] == piece) && (arrayList[1][0] == piece) && (arrayList[2][0] == piece))
 return true;
 if ((arrayList[0][1] == piece) && (arrayList[1][1] == piece) && (arrayList[2][1] == piece))
 return true;
 if ((arrayList[0][2] == piece) && (arrayList[1][2] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][0] == piece) && (arrayList[1][1] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][2] == piece) && (arrayList[1][1] == piece) && (arrayList[2][0] == piece))
 return true;
 return false;
 }
 static boolean checkForStale() {
 if ((arrayList[0][0] != ' ') && (arrayList[0][1] != ' ') && (arrayList[0][2] != ' ')
 && (arrayList[1][0] != ' ') && (arrayList[1][1] != ' ') && (arrayList[1][2] != ' ')
 && (arrayList[2][0] != ' ') && (arrayList[2][1] != ' ') && (arrayList[2][2] != ' '))
 return true;
 return false;
 }
 static void placeOnBoard(int place, char piece) {
 if (place == 1)
 arrayList[0][0] = piece;
 else if (place == 2)
 arrayList[0][1] = piece;
 else if (place == 3)
 arrayList[0][2] = piece;
 else if (place == 4)
 arrayList[1][0] = piece;
 else if (place == 5)
 arrayList[1][1] = piece;
 else if (place == 6)
 arrayList[1][2] = piece;
 else if (place == 7)
 arrayList[2][0] = piece;
 else if (place == 8)
 arrayList[2][1] = piece;
 else if (place == 9)
 arrayList[2][2] = piece;
 }
 static boolean checkForSanity(int place) {
 boolean sane = false;
 if ((place == 1) && (arrayList[0][0] == ' '))
 sane = true;
 else if ((place == 2) && (arrayList[0][1] == ' '))
 sane = true;
 else if ((place == 3) && (arrayList[0][2] == ' '))
 sane = true;
 else if ((place == 4) && (arrayList[1][0] == ' '))
 sane = true;
 else if ((place == 5) && (arrayList[1][1] == ' '))
 sane = true;
 else if ((place == 6) && (arrayList[1][2] == ' '))
 sane = true;
 else if ((place == 7) && (arrayList[2][0] == ' '))
 sane = true;
 else if ((place == 8) && (arrayList[2][1] == ' '))
 sane = true;
 else if ((place == 9) && (arrayList[2][2] == ' '))
 sane = true;
 return sane;
 }
 static boolean checkForSanity(int row, int col) {
 return true;
 }
}

`

最佳答案

我认为问题出在您对 arrayList 的初始化上。您已将其定义为 2 行和 3 列。此外,您将它初始化为整数 0、1、2,而不是字符“0”、“1”、“2”,因此在打印它时,它将打印控制字符。

我建议像这样创建它:

char[][] arrayList = new char[3][3];

这将为您留下一个空板(所有单元格都将为空。

关于java - 井字游戏使用方法java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877315/

相关文章:

java - Spring MVC - 检查 session 是否存在

java.io.IOException 将 "player"纹理添加到屏幕时出现困难

c++ - 初始化数组工作正常,但是当尝试将其打印出来时,它会打印一个额外的列和一个意外的字符

c++ - 在 Tic-Tac-Toe 中检查是否获胜

c++ - 类 draw() 方法在直接调用时有效,但在被另一个对象调用时崩溃

java - 如何配置jboss 7将日志写入不同的文件夹

java - 使用并发 HashMap 的同步块(synchronized block)是否正确?

java - 用户输入边界 - Java

javascript - 在 Javascript 中使用极小极大算法解决 TicTacToe

java - 井字棋检查赢家