Я работаю над командной игрой Tictactoe, написанной на Ruby. (Для тех, кто не помнит правил, пожалуйста, see here)Tictactoe оценка чека через хэш
Почти все примеры реализации, которые я видел, используют многомерный массив для представления структуры Board
. Это как [[1,2,3], [4,5,6], [7,8,9]]
. (Here is an example)
Однако, прежде чем увидеть какие-либо другие решения, я начал с реализации хэша. Я представляю столбцы с буквами (A, B, C) и строки с числами (1,2,3), и я устанавливаю «X» или «O» в качестве значения. Пример реализация во время игры:
{:a1=>"X", :b2=>"X", :c3=>"X", :b1=>"O", :c1=>"X", :c2=>"O", :b3=>"X", :a2=>"O", :a3=>"X"}
(... В каждом движении, добавить новую позицию в этот хэш Это своего рода сетку клетки Легко визуализировать внутри таблицы ASCII)
Все было здорово пока я не стал искать способ определения выигрышных позиций. Но теперь я застрял в поиске хорошего способа использовать свой хеш, чтобы определить, является ли это позицией победителя.
Не могли бы вы показать мне, как решить проблему с помощью хэшей? И/или вы можете объяснить, почему это плохая идея использовать хеш вместо многомерного массива в этом конкретном сценарии?
Вот плохо выглядящий способ проверки, если это позиция победителя или нет (для одного сценария ..):
def check_status
if(@@cells[:a1] == "X" && @@cells[:a2] == "X" && @@cells[:a3] == "X")
false # game will end
else
true # game will continue
end
end