2015-11-30 2 views
0

Я пишу игру Tic Tac Toe и должен спросить, хочет ли пользователь снова играть (y/n). У меня есть игра, я просто не уверен, как ее зацикливать, если пользователь нажимает y и/или завершает ее, если пользователь нажимает n. Я пробовал несколько разных вещей, но, похоже, не могу понять ни одного из них, так что это всего лишь мой рабочий код. Любая помощь будет принята с благодарностью!Replay Tic Tac Toe

import java.util.Scanner; 
public class Assignment7 { 

    public static int row, col; 
    public static Scanner scan = new Scanner(System.in); 
    public static char[][] board = new char[3][3]; 
    public static char turn = 'X'; 
    static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 
     /*create for-loop 
    * 9 empty spots, 3x3 
     */ 

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

    public static void Play() { 
     //find if game over 
     boolean playing = true; 
     PrintBoard(); 

     while (playing) { 
      System.out.println("Please enter a row, then a column: "); 
      //make row next thing player types 
      row = scan.nextInt() - 1; 
      //same with column 
      col = scan.nextInt() - 1; 
      board[row][col] = turn; 
      if (GameOver(row, col)) { 
       playing = false; 
       System.out.println("Game over! Player " + turn + " wins!"); 

      } 
      PrintBoard(); 
      //switch players after entries 
      if (turn == 'X') { 
       turn = 'O'; 
      } else { 
       turn = 'X'; 
      } 
     } 

    } 

    public static void PrintBoard() { 

     for (int i = 0; i < 3; i++) { 
      System.out.println(); 
      for (int j = 0; j < 3; j++) { 
       //get dividers on left 
       if (j == 0) { 
        System.out.print("| "); 
       } 
       // get dividers in all 
       System.out.print(board[i][j] + " | "); 
      } 
     } 
     //enter space after board 
     System.out.println(); 
    } 

    public static boolean GameOver(int rMove, int cMove) { 
     // Check perpendicular victory 
     if (board[0][cMove] == board[1][cMove] 
       && board[0][cMove] == board[2][cMove]) { 
      return true; 
     } 
     if (board[rMove][0] == board[rMove][1] 
       && board[rMove][0] == board[rMove][2]) { 
      return true; 
     } 
     // Check diagonal victory 
     if (board[0][0] == board[1][1] && board[0][0] == board[2][2] 
       && board[1][1] != '_') { 
      return true; 
     } 
     return false; 

    } 
} 
+2

'do {...} while (" y ".equalsIgnoreCase (input));'? – MadProgrammer

+0

Что вы пробовали? Что случилось? Вы только показываете нам код игры, который, как вы сказали, уже работает, так какой смысл его показывать? Покажите нам, как вы пытались спросить пользователя, хочет ли он снова играть. – Robert

ответ

1

Просто используйте do-while петлю и оберните его вокруг «игры» код ...

Когда Play метод возвращает, подскажет пользователю, если они хотят играть в другую игру, петли, пока они не отвечать что-нибудь другое, кроме «Y», например

String input = null; 
do { 
    for (int i = 0; i < 3; i++) { 
     for (int j = 0; j < 3; j++) { 
      board[i][j] = '_'; 
     } 
    } 
    Play(); 
    if (scan.hasNextLine()) { 
     scan.nextLine(); 
    } 
    System.out.print("Do you want to play a game [Y/N]? "); 
    input = scan.nextLine(); 
} while ("y".equalsIgnoreCase(input)); 
+0

Программа по-прежнему заканчивается после победы игрока. Это не позволит мне вводить «y» или «n». – Lazarov24

+0

Спасибо, что у меня все получилось! Очень ценим! – Lazarov24