Состояние отслеживания игры ничем не отличается от состояния отслеживания в любой другой программе 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.
Кроме того, вам нужна библиотека графики и ввода-вывода. Там могут быть коммерческие дистрибутивы Пролог, которые включают их. Я наиболее знаком с SWI Prolog , поэтому в качестве отправной точки я предложу plOpenGL . Он не только дает вам доступ к возможностям рендеринга OpenGL, но также включает привязки для событий мыши и клавиатуры. Например, чтобы обрабатывать нажатие клавиши Escape, вы определяете правило клавиатуры следующим образом:
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
Взгляните на пример движущегося источника света plOpenGL, чтобы узнать больше подробностей и пример обработки движения мыши.
Если вы используете графическую библиотеку, она, скорее всего, будет обрабатывать игровой цикл для вас. По сути, вы инвертируете управление библиотекой и предоставляете правила, которые должны выполняться при необходимости: настройка, перерисовка, события ввода-вывода и т. Д. Если вы хотите ограничить FPS или выполнить код условно на основе времени, вы можете отслеживать истекшее время, используя время / дату предикаты и принимать решения соответственно.
Существует множество разновидностей Prolog, так что это, конечно, не единственный способ создать игру. Различные дистрибутивы и связанные языки будут использовать разные библиотеки / привязки, которые могут поощрять разные подходы. Кроме того, программисты полиглотов могут рекомендовать вам использовать более «дружественный к графике» основной язык / среду выполнения для управления рендерингом и вводом-выводом при использовании Prolog для моделирования поведения игровых объектов и принятия решений.