跟踪游戏状态与任何其他Prolog程序中的跟踪状态没有什么不同。您定义事实,然后使用它们做出决策。它已经很老了,但是“ 探索序言:冒险,物体,动物和税收 ”一文很好地解释了这在游戏中的工作方式。从文章总结:
% Set up - you start in a house
location(you, house).
% Move to a new location.
goto(X) :-
location(you, L), % Read your current location into L
connect(L, X), % Check if you can reach the new location X from L
retract( location(you, L) ), % Remove the old location fact
assert( location(you, X) ). % Add a new location fact. You are in X now.
write($ You are in the $), write(X), nl.
除此之外,您还需要一个图形和IO库。可能会有包含它们的商业Prolog发行版。我最熟悉SWI Prolog,所以我建议使用plOpenGL作为起点。它不仅使您能够访问OpenGL的渲染功能,还包括鼠标和键盘事件的绑定。例如,要处理按Escape键的操作,可以定义如下键盘规则:
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
看看plOpenGL的移动灯示例,了解更多详细信息以及处理鼠标移动的示例。
如果使用图形库,它可能会为您处理游戏循环。基本上,您将控制权转给该库,并提供适当的规则以执行:设置,重绘,IO事件等。如果要限制FPS或基于时间有条件地运行代码,则可以使用时间/日期来跟踪经过的时间谓词并据此做出决策。
有很多Prolog风格,因此,这当然不是制作游戏的唯一方法。不同的发行版和相关语言将使用不同的库/绑定,这可能会鼓励使用不同的方法。此外,多语种程序员可能会鼓励您使用更“图形友好”的宿主语言/运行时来管理渲染和IO,同时使用Prolog对游戏实体的行为和决策进行建模。