O rastreamento do estado do jogo não é diferente do rastreamento do estado em qualquer outro programa Prolog. Você define fatos e os usa para tomar decisões. É bem antigo, mas o artigo Explorando Prolog: Aventuras, Objetos, Animais e Impostos explica bem como isso pode funcionar em um jogo. Resumido do artigo:
% 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.
Além disso, você precisa de uma biblioteca de gráficos e E / S. Pode haver distribuições comerciais do Prolog que as incluam. Estou mais familiarizado com o SWI Prolog , por isso vou sugerir o plOpenGL como ponto de partida. Além de fornecer acesso aos recursos de renderização do OpenGL, também inclui ligações para eventos de mouse e teclado. Por exemplo, para pressionar uma tecla Escape, defina uma regra do teclado da seguinte maneira:
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
Veja o exemplo de luz móvel do plOpenGL para mais alguns detalhes e um exemplo de como lidar com o movimento do mouse.
Se você usar uma biblioteca de gráficos, ela provavelmente lidará com o ciclo do jogo para você. Basicamente, você inverte o controle na biblioteca e fornece regras a serem executadas quando apropriado: configurar, repintar, eventos de E / S, etc. Se você deseja limitar o FPS ou executar o código condicionalmente com base no tempo, pode rastrear o tempo decorrido usando hora / data predicados e tomar decisões em conformidade.
Existem muitos sabores de Prolog, portanto essa certamente não é a única maneira de criar um jogo. Distribuições diferentes e idiomas relacionados usarão bibliotecas / ligações diferentes que podem incentivar abordagens diferentes. Além disso, os programadores poliglotas podem incentivá-lo a usar um idioma / tempo de execução mais "amigável aos gráficos" para gerenciar a renderização e a IO enquanto usa o Prolog para modelar comportamentos e tomadas de decisão de entidades do jogo.