Відстеження стану гри не відрізняється від стану відстеження в будь-якій іншій програмі 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 для ще декількох деталей та приклад керування рухом миші.
Якщо ви користуєтеся графічною бібліотекою, вона, ймовірно, обробляє ігровий цикл для вас. В основному ви інвертуєте управління в бібліотеку і надаєте правила, які потрібно виконувати, коли це доречно: налаштування, перефарбовування, події вводу-виводу тощо. Якщо ви хочете обмежити FPS або запустити код умовно залежно від часу, ви можете відстежувати минулий час, використовуючи час / дату предикати і відповідно приймати рішення.
Існує багато ароматів Prolog, тому це, звичайно, не єдиний спосіб побудувати гру. Різні дистрибутиви та суміжні мови використовуватимуть різні бібліотеки / прив’язки, що може заохочувати різні підходи. Крім того, програмісти поліглотів можуть заохочувати вас використовувати більш "графічний" мову хоста / час виконання для управління візуалізацією та IO, використовуючи Prolog для моделювання поведінки суб'єктів ігор та прийняття рішень.