Java 循环重复一个抽搐战术的游戏

Java 循环重复一个抽搐战术的游戏,java,loops,tic-tac-toe,Java,Loops,Tic Tac Toe,我写了一段代码,从头到尾都在玩tic-tac-toe。游戏结束后,我需要询问用户是否想重复游戏(是/否),并重复,直到用户输入否。我不确定在哪里实现循环或如何实现循环,因此希望得到帮助。代码如下: import java.util.Scanner; public class bb2 { static char place1 = ' '; static char place2 = ' '; static char place3 = ' '; static char place4

我写了一段代码,从头到尾都在玩tic-tac-toe。游戏结束后,我需要询问用户是否想重复游戏(是/否),并重复,直到用户输入否。我不确定在哪里实现循环或如何实现循环,因此希望得到帮助。代码如下:

import java.util.Scanner;

public class bb2 {

  static char place1 = ' ';
  static char place2 = ' ';
  static char place3 = ' ';
  static char place4 = ' ';
  static char place5 = ' ';
  static char place6 = ' ';
  static char place7 = ' ';
  static char place8 = ' ';
  static char place9 = ' ';
  static Scanner input;

  public static void main(String[] args) {

    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(place1 + " | " + place2 + " | " + place3 + "\n---------");
    System.out.println(place4 + " | " + place5 + " | " + place6 + "\n---------");
    System.out.println(place7 + " | " + place8 + " | " + place9 + "\n");
  }

  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 ((place1 == piece) && (place2 == piece) && (place3 == piece))
      return true;
    if ((place4 == piece) && (place5 == piece) && (place6 == piece))
      return true;
    if ((place7 == piece) && (place8 == piece) && (place9 == piece))
      return true;
    if ((place1 == piece) && (place4 == piece) && (place7 == piece))
      return true;
    if ((place2 == piece) && (place5 == piece) && (place8 == piece))
      return true;
    if ((place3 == piece) && (place6 == piece) && (place9 == piece))
      return true;
    if ((place1 == piece) && (place5 == piece) && (place9 == piece))
      return true;
    if ((place3 == piece) && (place5 == piece) && (place7 == piece))
      return true;
    return false;
  }

  static boolean checkForStale() {
    if ((place1 != ' ') && (place2 != ' ') && (place3 != ' ') 
        && (place4 != ' ') && (place5 != ' ') && (place6 != ' ')
        && (place7 != ' ') && (place8 != ' ') && (place9 != ' '))
      return true;
    return false;
  }

  static void placeOnBoard(int place, char piece) {
    if (place == 1)
      place1 = piece;
    else if (place == 2)
      place2 = piece;
    else if (place == 3)
      place3 = piece;
    else if (place == 4)
      place4 = piece;
    else if (place == 5)
      place5 = piece;
    else if (place == 6)
      place6 = piece;
    else if (place == 7)
      place7 = piece;
    else if (place == 8)
      place8 = piece;
    else if (place == 9)
      place9 = piece;
  }

  static boolean checkForSanity(int place) {
    boolean sane = false;
    if ((place == 1) && (place1 == ' '))
      sane = true;
    else if ((place == 2) && (place2 == ' '))
      sane = true;
    else if ((place == 3) && (place3 == ' '))
      sane = true;
    else if ((place == 4) && (place4 == ' '))
      sane = true;
    else if ((place == 5) && (place5 == ' '))
      sane = true;
    else if ((place == 6) && (place6 == ' '))
      sane = true;
    else if ((place == 7) && (place7 == ' '))
      sane = true;
    else if ((place == 8) && (place8 == ' '))
      sane = true;
    else if ((place == 9) && (place9 == ' '))
      sane = true;
    return sane;
  }

  static boolean checkForSanity(int row, int col) {
    return true;
  }
}

尝试将现有的
main
方法的全部内容移动到一个新方法中,或者将其称为
playOnce
,然后使用循环编写一个新的main方法,并提示用户重试。

很多事情都错了x)

首先,如果你在游戏板上使用char[]会更好。(代替“地点1,地点2,…) 因此,您可以使用“布尔检查安全性(introw,intcol)”,所有代码都会非常漂亮

然后,你用一个“while(true)”,但不要在董事会满员或某人获胜时重置董事会…所以我相信你会得到一个无限的“向未来的霸主致敬!”!"

无论如何,我认为你的TTT有效,这是最主要的:) 现在你必须把你的“while(true){//playing}”放在另一个while中,就像这样:

bool replay = true;
bool gameOver = false;

while(replay) {
  while(!gameOver) { //TTT 4 Ever

    //Here your code
    if(...) {
      gameOver=true;
      //Dont forget to clear the Board here
    }

  }

  if(input.nextString().equals("Nono i dont wanna play anymore plz let me go")) {
    replay = false;
  }
  gameOver = false;
}

首先,我建议您为所有位置选择一个字符数组,而不是单个变量。这样,您就可以使用循环,而不是在if语句中编写一百万个条件语句。还有
while(true)
循环将在不清除网格的情况下永远运行。我建议创建一个方法,在没有任何地方将
'
作为其值或有人获胜时检查并返回true,并在while循环中实现该方法


要回答您最初的问题,只需制定一个方法,清除网格,并在主函数开始时实现它,然后将整个过程固定在一个while循环中。

Ben,您需要更具体一些。不能将您的作业扔到这里,指望其他人帮您完成它