Вот некоторые вещи, которые могут помочь, основываясь на том, что я вижу в примере кода.
Это простой способ создать массив, если вы хотите, чтобы быть определенным размером заполнен nil
значений:
foo = [nil] * 5
=> [nil, nil, nil, nil, nil]
Если вы хотите, чтобы переплести два массива, такие как массив Nils и другой один со значениями:
TOTAL_ELEMENTS = 5
([nil] * TOTAL_ELEMENTS).zip((1..TOTAL_ELEMENTS).to_a).flatten
=> [nil, 1, nil, 2, nil, 3, nil, 4, nil, 5]
на основе ФОС комментарий ниже, что это за крестики-нолики игры, вот несколько способов создания x
:
Array.new(9)
[nil] * 9
Оба возвращающие:
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil]
Это полезно, если вы получаете ячейку координат как смещение от 0
Для крестики-нолики сетки может быть более полезно иметь три ряда из трех столбцов, если вы получите ваши координаты ячейки как пары строк/столбцов:
Array.new(3) { Array.new(3) }
[[nil] * 3] * 3
Возвращение:
=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
И некоторые вещи, чтобы медитировать на:
ROWS = COLUMNS = 3
x = Array.new(ROWS * COLUMNS) # for offsets
x = Array.new(ROWS) { Array.new(COLUMNS) } # for rows and columns
Если вы получаете свою позицию, как смещение, но хотите, чтобы преобразовать его в строке/столбце, использование divmod
. Ваше смещение будет 0..8, преобразуется в сетку 3x3, , т. Е. [0..2][0..2]
. Преобразование обратно слишком легко:
def row_col_to_offset(x,y)
x * ROW + y
end
>> row_col_to_offset(0,0) # => 0
>> row_col_to_offset(0,1) # => 1
>> row_col_to_offset(1,1) # => 4
>> row_col_to_offset(2,2) # => 8
def offset_to_row_col(o)
o.divmod(ROW)
end
>> offset_to_row_col(0) # => [0, 0]
>> offset_to_row_col(1) # => [0, 1]
>> offset_to_row_col(4) # => [1, 1]
>> offset_to_row_col(8) # => [2, 2]
Теперь вы должны узнать о @
переменных экземпляра Руби, и правильное использование метода initialize
.
Ваш код не заполнен. Пожалуйста, покажите, как вы вызываете метод «ben», и каков ожидаемый результат. Как есть, это выглядит очень надуманный пример, который ничего не делает. –
Вы очень правы. Я забыл назвать метод, потому что он неполный.Извините, что не закончил код. Его следует назвать «Big.new.ben» - это то, что я называл. – Pete