El estado de seguimiento del juego no es diferente al estado de seguimiento en cualquier otro programa Prolog. Usted define hechos y luego los usa para tomar decisiones. Es bastante antiguo, pero el artículo Exploring Prolog: Adventures, Objects, Animals and Taxes hace un buen trabajo al explicar cómo podría funcionar esto en un juego. Resumido del artículo:
% 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.
Más allá de eso, necesita una biblioteca de gráficos y E / S. Puede haber distribuciones comerciales de Prolog que las incluyan. Estoy más familiarizado con SWI Prolog , por lo que sugeriré plOpenGL como punto de partida. No solo le da acceso a las capacidades de renderizado de OpenGL, sino que también incluye enlaces para eventos de mouse y teclado. Por ejemplo, para manejar una pulsación de la tecla Escape, define una regla de teclado como esta:
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
Eche un vistazo al ejemplo de luz en movimiento de plOpenGL para obtener más detalles y un ejemplo del manejo del movimiento del mouse.
Si usa una biblioteca de gráficos, probablemente manejará el ciclo del juego por usted. Básicamente, invierte el control en la biblioteca y proporciona reglas para que se ejecuten cuando sea apropiado: configuración, repintado, eventos de E / S, etc. Si desea limitar FPS o ejecutar código condicionalmente en función del tiempo, puede realizar un seguimiento del tiempo transcurrido usando la hora / fecha predicados y tomar decisiones en consecuencia.
Hay muchos sabores de Prolog, por lo que esta no es la única forma de crear un juego. Las diferentes distribuciones y lenguajes relacionados utilizarán diferentes bibliotecas / enlaces que pueden fomentar diferentes enfoques. Además, los programadores políglotas pueden alentarlo a utilizar un lenguaje de host / tiempo de ejecución más "amigable con los gráficos" para administrar el renderizado y la E / S mientras usa Prolog para modelar los comportamientos de las entidades del juego y la toma de decisiones.