Как проверить в 2-мерном массиве, если один элемент сопровождается одним и тем же элементом n раз - PullRequest
0 голосов
/ 22 сентября 2019

Я создаю этот проект для моего класса CS, который имитирует Tic Tac Toe Board.Он отлично работал для оригинального квадрата 3х3, но теперь мне нужно, чтобы программа спросила пользователя, какой размер доски он хочет получить.Это может быть только квадрат от 3х3 до 14х14.Я также спрашиваю, сколько соединений или сколько Х или О подряд они хотят выиграть в игре.Соединение может быть только равным или меньшим размера, но не менее 3.

Для условия, при котором проверка горизонтальных x или o в строке изначально выглядела так:

for(int r = 0; r < 3; r++) {
  for(int c = 0; c < 1; c++) {
    if(board[r][c] == Cell.X && board[r][c + 1] == Cell.X && board[r][c + 2] == Cell.X) {
        return GameStatus.X_WON;
    }
    else if(board[r][c] == Cell.O && board[r][c + 1] == Cell.O && board[r][c + 2] == Cell.O) {
        return GameStatus.O_WON;
    }
  }
}

Я получил программу для ввода входных данных для соединений и размера платы, которая называется

int connections;
SuperTicTacToe.getSize();

Я написал это,

private GameStatus isWinner() {
  int count = 0;
  for(int r = 0; r < SuperTicTacToe.getSize(); r++) {
    for(int c = 0; c < 1; c++) {
      for(int i = 0; i < connections; i++){
        if(board[r][c + i] == Cell.X ){
           count++;
        }
        if(count == connections){
           return GameStatus.X_WON;
        }
      }
    }
  }
}

, но единственное, что я не могу сделатьэто заставить программу как-то проверить В строке есть номер соединения х или о.Кажется, только для проверки, есть ли соединение количество х на доске и не считать ничего в последнем столбце.

Есть ли способ проверить в строке, если элемент равенк тому же элементу перед ним n количество раз?

1 Ответ

0 голосов
/ 22 сентября 2019

Всегда хорошо выделить метод, который вы бы использовали, чтобы решить эту проблему как личность, прежде чем записывать код.Если вам когда-либо преподавали код в классе, вы знаете, насколько важны доски.

// This program pretends board is a boolean[][] array
boolean horizontalFlag = true; // Assume that it is a 3 in a row
boolean verticalFlag = true; // If it is proven not to be, then change to false
for(int i=0; i<3; i++){
    for(int j=0; j<3; j++){
        if(!(board[i][j])) verticalFlag = false; // These methods draw horizontal and vertical lines
        if(!(board[j][i])) horizontalFlag = false; //i.e.
    }
}
/* What the code does, visualized.
Horizontal check = h vertical check = v both = b none = 0
This is based on each iteration of i.
 i=0   i=1   i=2
b h h|0 v 0|0 0 v
v 0 0|h b h|0 0 v
v 0 0|0 v 0|h h b
*/
if(board[1][1]) { // Diagonals
    if(board[0][0] && board[2][2]) return true; 
    if(board[2][0] && board[0][2]) return true; 
}
if(horizontalFlag||verticalFlag) return true; // If the flags "say" that there are straight lines

Обратите внимание, что этот код не совместим напрямую с вашей программой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...