Ява крестики-нолики

Привет, я пишу игру в крестики-нолики. Я изложил в комментариях в своем коде то, что мне нужно. Сейчас у меня проблемы с созданием метода getMove. Я предполагаю, что мне нужно будет вызвать метод getMove в моих операторах if / else после нажатия строки и столбца?

Я не уверен, как перейти от получения номеров строк / столбцов и помещения их на мою доску для того, что ввел пользователь.

Вот мой код:

import java.util.*;

public class TicTac{
   //declare a constant variable
   public static final int SIZE = 3; //size of each row and each column

   public static void main(String[] args) {

      //initialize the board
      char[][] board = new char[3][3];

      //display the board
      displayBoard(board);

      //prompt for the first player
      //determine if X or O is pressed

      System.out.println("Who wants to go first (X or O)? ");
      Scanner xOrO = new Scanner(System.in);
      String entOp = xOrO.nextLine();
      char enterOp = entOp.charAt(0);

      if (enterOp == 'X'){
           System.out.println("Enter a row (0,1,2) for player X: ");
           Scanner enterRow = new Scanner(System.in);
           int fTurn = enterRow.nextInt();

           System.out.println("Enter a column (0,1,2) for player X: ");
           Scanner enterCol = new Scanner(System.in);
           int fCol = enterCol.nextInt();

      }  else if (enterOp == 'O') {
           System.out.println("Enter a row (0,1,2) for player O: ");
           Scanner enterRow = new Scanner(System.in);
           int fTurn = enterRow.nextInt();

           System.out.println("Enter a column (0,1,2) for player X: ");
           Scanner enterCol = new Scanner(System.in);
           int fCol = enterCol.nextInt();

      }  else {
           System.out.println("Must enter either X or O");  
         }

      //and display the board
      //displayBoard(board);

      }

   //initializeBoard method


   //displayBoard method
   public static void drawLine() {
      for (int i = 0; i <= 9 * SIZE; i++) {
         System.out.print("-");
      }
      System.out.println();
   }

   public static void displayBoard(char[][] board) {
      drawLine();
      for (int i = 0; i < SIZE; i++) {
         for (int j = 0; j < SIZE; j++) {
            System.out.print("| " + board[i][j] + " ");
         }
         System.out.println("|");
         drawLine();
      }
      System.out.println();
   }


   //getMove method: to prompt the current player for target position. And place the mark in the position if the position is available.
//    public static void getMove() {
//    
//    
//    
//    
//    
//    }
   //findWinner method: after each move, check the board see if there is a winner



   //hasEmptyCell method: check if there is still empty spot in the board
}

person jSeesFor3ver    schedule 22.10.2013    source источник
comment
Вы можете сослаться на мой ответ в теме ниже. Я использовал немного другую логику - stackoverflow.com/questions/4020757/   -  person dganesh2002    schedule 23.10.2013
comment
У вас есть координаты x / y доски. Вам нужно определить, есть ли уже что-то в ячейке или нет. Если есть, вам нужно снова запросить у пользователя допустимую строку / столбец. Если нет, вам просто нужно записать ход (board[fCol][fTurn] = enterOp) и перерисовать доску.   -  person MadProgrammer    schedule 23.10.2013
comment
Я вроде понимаю. Это возвращает нас к моему первоначальному вопросу: как мне написать метод для получения координат x / y и размещения их на доске?   -  person jSeesFor3ver    schedule 23.10.2013


Ответы (1)


Я бы попробовал что-нибудь подобное, чтобы сдвинуть с мертвой точки. Имейте в виду, что это было немного с тех пор, как я играл с java. Я предполагаю, что массив 2D char изначально имеет нулевые значения. Я рекомендую изменить это объявление на и переместить его в глобальный вариант:

 char[][] board = {{'', '', ''},{'', '', ''},{'', '', ''}};

Затем я бы вызвал getMove после того, как второе чтение будет выполнено следующим образом:

int x = Integer.parseInt(firstTurn);
int y = Integer.parseInt(firstCol);
getMove(x, y, 'X');

Вам может понадобиться перехватить исключение, поскольку вы не знаете, действительно ли пользователь вводит целое число. Для этого неплохо работает какой-то цикл (например, while).

Ваша функция getMove должна быть примерно такой:

public static bool getMove(int x, int y, char player) {
    if (board[x][y] == '') {
        board[x][y] = player;
        return true;  //Here you are returning true to show the spot was available.
    }
    return false; //And here you are returning false to show the spot was not available.
}
person Andrew Jackson    schedule 23.10.2013
comment
'' не является допустимым символом - person MadProgrammer; 23.10.2013
comment
переместить его в глобальный Ява не имеет глобальных объектов. - person nanofarad; 23.10.2013
comment
Как я уже сказал, это было давно. Я уверен, что вы поймете, что вам нужно делать. Например, просто измените "" на "N" или что-то еще, просто чтобы проверить. Под глобальным я имел в виду переместить его из основной функции, чтобы к нему могли получить доступ остальные функции в классе. Если в этом нет необходимости, не беспокойтесь об этом. - person Andrew Jackson; 23.10.2013
comment
@AndrewJackson Мне нравится, когда я стараюсь! Я понимаю, что вы говорите о том, что он глобален, но мои методы статичны, и их можно вызывать в любом месте моей программы. Я попробую то, что вы говорите. - person jSeesFor3ver; 23.10.2013