ゲームの状態の追跡は、他のPrologプログラムの状態の追跡と変わりません。事実を定義し、それを使用して決定を下します。かなり古いですが、Exploring Prolog:Adventures、Objects、Animals、Taxesの記事は、これがゲームでどのように機能するかを説明するのに適しています。記事から要約:
% 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のレンダリング機能にアクセスできるだけでなく、マウスイベントとキーボードイベントのバインドも含まれます。たとえば、エスケープキーの押下を処理するには、次のようなキーボードルールを定義します。
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
plOpenGLのムービングライトの例を参照して、さらにいくつかの詳細とマウスの動きを処理する例をご覧ください。
グラフィックライブラリを使用する場合、ゲームループを処理する可能性があります。あなたがFPSまたは条件の時間に基づいて、実行コードを制限したい場合は、使用して、経過時間を追跡することができ塗り替え、IOのイベントなど、設定:基本的に、あなたはライブラリに制御し、適切なときに実行するルールを提供反転時間/日付を述語とそれに応じた決定を行います。
多くのPrologフレーバーが存在するため、これがゲームをビルドする唯一の方法ではないことは確かです。異なるディストリビューションおよび関連言語は、異なるアプローチを促進する可能性のある異なるライブラリ/バインディングを使用します。さらに、多言語プログラマは、Prologを使用してゲームエンティティの動作と意思決定をモデル化する一方で、より「グラフィックに優しい」ホスト言語/ランタイムを使用してレンダリングとIOを管理することをお勧めします。