我正在尝试在SWI Prolog中制作一个基于文本的交互式connect4游戏,我对如何开始有点困惑。我不明白的是如何表示游戏板,因为我认为我不能拥有所有规则都可以看到和修改的数组或变量。
非常感谢任何关于如何开始的见解!
答案 0 :(得分:2)
适合您情况的数据结构的适当表示通常是PROLOG的一半问题。
有许多方法可以在网格中表示事物,比如PROLOG中的2-dim数组,但我认为最简单的方法可能是基于列表的,因为列表结构有很多固有的支持:
<强> 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
的{{1}}单元格,通过创建新的L
字词并将其附加到cell/3
来操纵它并再次创建完整列表。
我建议不要在编写代码时使用Rem
/ assert
机制来处理这个问题;它是混乱的,不必要的,并且不利于编写易于理解和“可调试”的PROLOG代码。
答案 1 :(得分:1)
(我希望你在谈论this游戏)。
你有几个选择。
您可以拥有整个字段的列表列表,例如 [[空,空,黄色,红色,空],[红色,红色,红色,黄色,黄色],[红色,红色,红色,红色,红色]。
或者你可以断言/收回像
这样的事实 红色(2,4)。 红色(1,3)。 黄色(2,2)。 红色(3,2)。游戏很简单,所以选择符合您直观表现的游戏。