Игра Connect Four

В своем классе Ruby я создаю игру Connect Four, которую мой профессор будет запускать в командной строке.

Это должно быть сделано с двойным массивом и циклами while, а не с break / exit / abort, loop do, классами, экземплярами или глобальными переменными.

Мой сеточный массив состоит из 64 заполнителей '.' во вложенном массиве. Я пытаюсь начать с нижнего ряда моей сетки 8x8 и добавить кусок плеера: 'X' или '0'.

Я не уверен, как перейти вверх от строки 8 / индекса 7 к строке 7 / индексу 6, если нижняя строка столбца уже занята. Я использую инструкции if или case? Могу ли я уменьшить строку? Я пробовал вставить if / elsif, но ничего не добился.

def print_playing_grid (playing_board)
  puts "1 2 3 4 5 6 7 8"
  playing_board.each do |row|
    puts row.join(" ")
  end
end

print_playing_grid(grid_array)

# this 'win'/while is only here for testing so the board will repeat on screen
win = false
while win == false
  puts
  puts "Please select a column to make your move (Player X):"
  user_choice = gets.to_i
  row = 7
  column = user_choice - 1
  while row < grid_array.size
    grid_array[row][column] = 'X'
    row += 1
  end
  puts
  print_playing_grid(grid_array)
end
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
448
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку это только два условия (ячейка занята или нет), я бы с большей вероятностью использовал if, а не case ... Я бы использовал case для нескольких тестов, так как он может быть немного чище, чем if и elsif.

player_token = 'X'
row = grid_array.size - 1
column = user_choice - 1
while (grid_array.size - row) <= grid_array.size
  if grid_array[row][column] == '.'
    grid_array[row][column] = player_token
    row = -1 # (to exit the while loop)
  else
    row -= 1
  end
end

в качестве примера того, где я бы подумал об использовании дела ...

player_token = 'X'
row = grid_array.size - 1
column = user_choice - 1
dropping_a_token = true
while dropping_a_token
  case 
  when row < 0
    dropping_a_token = false
  when grid_array[row][column] == '.'
    grid_array[row][column] = player_token
    dropping_a_token = false
  else
    row -= 1
  end
end

Привет, Стив, спасибо за ответ! В верхнем примере вы можете объяснить причину установки row = grid_array.size? Я получаю неопределенный метод для nil: ошибка NilClass в RubyMine - доступное значение сетки пусто.

katies1987 07.12.2018 12:19

Привет, Стив. Я создал метод, который сочетает в себе немного того, что у меня было раньше, и ваш полезный код чрезвычайно, который указал мне правильное направление. Возможность многоразового использования как для моих людей, так и для компьютерных «игроков». Я пишу отлов ошибок для пустых значений массива, которые просачиваются в несуществующие строки. Спасибо за толчок в правильном направлении!

katies1987 07.12.2018 13:23

Привет, так что это должен был быть row = grid_array.size -1, идея заключалась в том, чтобы вместо жесткого кодирования «7» вы могли получить последнюю строку из размера массива. Из-за моей ошибки (извините) метод попытался бы получить доступ к grid_array [8] [column] при первом обходе, а grid_array [8] не существует, поэтому вы получите undefined method [] для nil: NilClass (потому что [column] нельзя вызвать на ноль)

SteveTurczyn 07.12.2018 14:01

Я скорректировал свой ответ, чтобы исправить это (для потомков), но рад, что вы добиваетесь прогресса!

SteveTurczyn 07.12.2018 14:02

Другие вопросы по теме