Java 提克塔克线圈固定器

Java 提克塔克线圈固定器,java,tic-tac-toe,Java,Tic Tac Toe,我正在创建一个tic-tac-toe游戏,它将(最终)让用户与计算机进行游戏。现在,我需要弄清楚如何让它循环。我该怎么做 到目前为止,它将打印电路板和用户想要放置1‘x’的位置,然后结束程序 public static void main(String[] args) { String input; Scanner keyboard; String[] temp; String xTemp, yTemp; int x,y; char [][] bo

我正在创建一个tic-tac-toe游戏,它将(最终)让用户与计算机进行游戏。现在,我需要弄清楚如何让它循环。我该怎么做

到目前为止,它将打印电路板和用户想要放置1‘x’的位置,然后结束程序

public static void main(String[] args) {
    String input;
    Scanner keyboard;
    String[] temp;
    String xTemp, yTemp;
    int x,y;
    char [][] board = new char [3][3];

    for(int i = 0; i < 3;i++){
        for(int k = 0; k < 3;k++){
            board [i][k] = ' ';
        }
    }

    do{
        //Asking for new move.
        printBoard(board);
        System.out.println("Input coordinates to begin the game. ex: (1,2): ");
        System.out.println("Please include parenthesis and comma.");
        keyboard = new Scanner(System.in);
        input = keyboard.nextLine();
        //Splitting input into coordinates
        temp = input.split(",");
        //Setting coordinates
        xTemp = temp[0].replace("(", "");
        yTemp = temp[1].replace(")", "");
        //Convert xy(temp) Strings to Ints
        x = Integer.parseInt(xTemp);
        y = Integer.parseInt(yTemp);
      }
    while (!checkMove(x,y));

    board[x][y] = 'X';

    printBoard(board);

    } 

    //Checking for parameters
    public static boolean checkMove(int x, int y){
      if (x > 2 || x < 0){
            System.out.println("Input an X move between 0 & 2");
        }
      if (y > 2 || y < 0){
            System.out.println("Input a Y move between 0 & 2");  
        }
      if (x > 2 || x < 0 || y > 2 || y < 0){
          return false;
      }
      else {
          return true;
      }

      }

      public static void printBoard(char[][] board){
        System.out.println("  0 1 2");
        System.out.println("0|" + board[0][0] + "|" + board[1][0] + "|" + board[2][0] + "|");
        System.out.println(" -------");
        System.out.println("1|" + board[0][1] + "|" + board[1][1] + "|" + board[2][1] + "|");
        System.out.println(" -------");
        System.out.println("2|" + board[0][2] + "|" + board[1][2] + "|" + board[2][2] + "|");
      }
}
publicstaticvoidmain(字符串[]args){
字符串输入;
扫描仪键盘;
字符串[]温度;
字符串xTemp,yTemp;
int x,y;
字符[][]板=新字符[3][3];
对于(int i=0;i<3;i++){
对于(int k=0;k<3;k++){
董事会[i][k]='';
}
}
做{
//要求搬家。
印刷板;
System.out.println(“输入开始游戏的坐标。例如:(1,2):”;
System.out.println(“请包括括号和逗号”);
键盘=新扫描仪(System.in);
输入=键盘.nextLine();
//将输入拆分为坐标
温度=输入。拆分(“,”);
//设置坐标
xTemp=temp[0]。替换(“(”,”);
yTemp=temp[1]。替换(“),”);
//将xy(临时)字符串转换为整数
x=整数.parseInt(xTemp);
y=整数.parseInt(yTemp);
}
而(!checkMove(x,y));
板[x][y]=“x”;
印刷板;
} 
//检查参数
公共静态布尔checkMove(整数x,整数y){
如果(x>2 | | x<0){
System.out.println(“输入一个在0和2之间移动的X”);
}
如果(y>2 | | y<0){
System.out.println(“输入Y在0和2之间移动”);
}
如果(x>2 | | x<0 | | y>2 | | y<0){
返回false;
}
否则{
返回true;
}
}
公共静态无效打印板(字符[][]板){
系统输出打印项次(“0 1 2”);
System.out.println(“0 |”+板[0][0]+“|”+板[1][0]+“|”+板[2][0]+“|”);
System.out.println(“----”);
System.out.println(“1 |”+board[0][1]+“|”+board[1][1]+“|”+board[2][1]+“|”);
System.out.println(“----”);
System.out.println(“2 |”+板[0][2]+“|”+板[1][2]+“|”+板[2][2]+“|”);
}
}

没有告诉你应该完全重新使用工具,或者通过提供完整的tic-tac-toe解决方案来破坏乐趣

我想你会发现下面的代码片段只给了你足够的时间来进行你的小编程实验

do {

    do {


        // Print board and get move input...

    } while (!checkMove(board, x, y)); // gotta pass the board to this function for the reasons Marc B mentioned

    board[x][y] = 'X';

} while (!gameOver(board));

我建议您简化董事会代表和进入方式,如下所示:

import java.util.Scanner;
public class TicTacToe {
    public static void main(String[] args) {
        String board = "123\n456\n789\n";
        Scanner input = new Scanner(System.in);
        String move;
        while (true) {
            System.out.println(board + "Enter a move (ie x3):");
            move = input.nextLine();
            if (move.equals(""))
                break;
            board = board.replace(move.substring(1,2), move.substring(0,1).toUpperCase());
        }
    }
}
如果您希望它自动为X和O交替旋转,您可以添加更多逻辑。

如果X的值=1,则返回“true”,循环终止时也会返回“true”。如果条件为:-
if value of x=1 then you are returning 'true' and so do while loop terminates. You need to change if condition as:-

public static boolean checkMove(int x, int y){
  if (x > 0 || x < 2){
        System.out.println("Input an X move between 0 & 2");
    }
  if (y > 0 || y < 2){
        System.out.println("Input a Y move between 0 & 2");  
    }
  if (x > 0 || x < 2 || y > 0 || y < 2){
      return false;
  }
  else {
      return true;
  }

  }
公共静态布尔checkMove(整数x,整数y){ 如果(x>0 | | x<2){ System.out.println(“输入一个在0和2之间移动的X”); } 如果(y>0 | | y<2){ System.out.println(“输入Y在0和2之间移动”); } 如果(x>0 | | x<2 | | y>0 | | y<2){ 返回false; } 否则{ 返回true; } }
这是一个游戏。。。比赛往往有终点,这意味着有赢/输的条件。你的代码根本不检查这个。你只是不断地要求移动(没有检查移动是否有效)<代码>[1][1]='x'后接
[1][1]='o'
会导致玩家之间的争斗。。。