Представляющая игровая доска для Connect 4 в прологе - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь сделать интерактивную текстовую игру connect4 в SWI Prolog, и я немного застрял в том, как начать. Чего я не понимаю, так это как представлять игровое поле, поскольку я не думаю, что у меня могут быть массивы или переменные, которые можно просматривать и изменять по всем правилам.

Любая идея о том, как начать, будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Соответствующее представление структуры данных, подходящей для вашей ситуации, часто составляет половину проблемы в PROLOG.

Существует много способов представления вещей в сетке, таких как 2-мерный массив в PROLOG, но я бы сказал, что самые простые из них, вероятно, основаны на списках, поскольку существует много встроенной поддержки структур списков.:

1.Список списков. Например, для 3x3, [[a,b,c],[d,e,f],[g,h,i]].Ваша интерпретация этой структуры будет присуща вашему коду для прохождения и манипулирования ею (т. Е. [a,b,c] может быть строкой или столбцом, вам решать, просто быть последовательным).Чтобы получить доступ к отдельной ячейке, вам нужно пройти через структуру с помощью предиката, который подсчитывает (или соответствует) определенную позицию.

2.Список терминов. Например, [cell(0,0,a), cell(0,1,b), ..., cell(2,2,i)].Это позволит вам извлекать отдельные ячейки напрямую, например, через select(cell(1,2,Value), L, Rem), чтобы извлечь Value ячейки в позиции 1,2 из списка ячеек L, что позволит вам манипулировать ею и создать полный списокснова, создав новый термин cell/3 и добавив его к Rem.

, я бы не советовал использовать механизм assert / retract при написании кода для решения этой проблемы;это грязно, ненужно и не способствует написанию легко понятного и «отлаживаемого» кода PROLOG.

1 голос
/ 18 ноября 2010

(надеюсь, вы говорите об этой игре).

У вас есть несколько вариантов.

Вы можете иметь список списков для всего поля, например [[Пусто, пусто, желтый, красный, пусто], [красный, красный, красный, желтый, желтый], [красный, красный, красный, красный, красный]].

Или вы можете утверждать / убирать факты, такие как

красный (2, 4). красный (1, 3). желтый (2, 2). красный (3, 2).

Игра проста, поэтому выбирайте то, что соответствует вашему интуитивному представлению.

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