Il monitoraggio dello stato del gioco non è diverso dal monitoraggio dello stato in qualsiasi altro programma Prolog. Definisci i fatti e poi li usi per prendere decisioni. È piuttosto vecchio, ma l'articolo Exploring Prolog: Adventures, Objects, Animals e Taxes fa un buon lavoro nel spiegare come ciò potrebbe funzionare in un gioco. Riassumendo dall'articolo:
% 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.
Oltre a ciò, hai bisogno di una libreria grafica e IO. Potrebbero esserci distribuzioni commerciali di Prolog che li includono. Conosco molto bene SWI Prolog , quindi suggerirò come punto di partenza plOpenGL . Non solo ti dà accesso alle funzionalità di rendering di OpenGL, ma include anche associazioni per eventi del mouse e della tastiera. Ad esempio, per gestire una pressione del tasto Esc, si definisce una regola della tastiera in questo modo:
% 27 is ASCII Code for Escape
keyboard(27,_,_) :-
write('Escape key was pressed...'),nl.
Dai un'occhiata all'esempio di luce mobile di plOpenGL per qualche dettaglio in più e un esempio di come maneggiare i movimenti del mouse.
Se usi una libreria grafica, probabilmente gestirà il loop di gioco per te. Fondamentalmente, si inverte il controllo nella libreria e si forniscono le regole da eseguire quando appropriato: impostazione, riverniciatura, eventi IO, ecc. Se si desidera limitare FPS o eseguire il codice in modo condizionale in base al tempo, è possibile tenere traccia del tempo trascorso utilizzando ora / data predicati e prendere decisioni di conseguenza.
Ci sono molti gusti Prolog, quindi questo non è certamente l'unico modo per costruire un gioco. Distribuzioni diverse e linguaggi correlati useranno librerie / associazioni diverse che potrebbero incoraggiare approcci diversi. Inoltre, i programmatori poliglotta potrebbero incoraggiarti a utilizzare un linguaggio / runtime host "più intuitivo per la grafica" per gestire il rendering e l'IO durante l'utilizzo di Prolog per modellare i comportamenti e il processo decisionale delle entità di gioco.