在prolog中代表连接4的游戏板

时间:2010-11-18 02:58:03

标签: prolog

我正在尝试在SWI Prolog中制作一个基于文本的交互式connect4游戏,我对如何开始有点困惑。我不明白的是如何表示游戏板,因为我认为我不能拥有所有规则都可以看到和修改的数组或变量。

非常感谢任何关于如何开始的见解!

2 个答案:

答案 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)。

游戏很简单,所以选择符合您直观表现的游戏。