我正在尝试用SWI Prolog制作一个交互式的、基于文本的connect4游戏,但我在如何开始时有点卡住了。我不理解的是如何表示游戏板,因为我不认为我可以拥有所有规则都可以看到和修改的数组或变量。
任何关于如何开始的见解都将不胜感激!
发布于 2010-11-18 13:44:29
在PROLOG中,适合您的情况的数据结构的适当表示通常是问题的一半。
有很多方法可以在网格中表示事物,比如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)从单元格列表L中提取位置为1,2的单元格的Value,允许您对其进行操作,并通过创建新的cell/3术语并将其附加到Rem来再次创建完整的列表。
我建议不要在编写代码时使用assert/retract机制来处理这个问题;这是混乱的、不必要的,并且不利于编写易于理解和“可调试”的PROLOG代码。
发布于 2010-11-18 11:19:43
(我希望你说的是this游戏)。
你有几个选择。
您可以拥有整个字段的列表,如[空,空,黄,红,空,红,黄,黄,红,红]。
或者,您可以断言/收回事实,如
红色(2,4)。红色(1,3)。黄色(2,2)。红色(3,2)。
这个游戏很简单,所以选择与你的直观表示相匹配的东西。
https://stackoverflow.com/questions/4211274
复制相似问题