J'ai entendu dire que la programmation logique peut servir d'alternative polyvalente à d'autres paradigmes de programmation tels que l'OO ou la programmation fonctionnelle. (Puisque Prolog est Turing-complet, il doit en être ainsi!)
Cependant, j'ai du mal à voir comment on implémenterait un programme interactif, comme un jeu de console graphique simple dans Prolog ou un langage similaire. Vous avez des faits, des règles qui peuvent dériver plus de faits et des requêtes qui récupèrent des faits. Il est facile de voir comment vous pouvez utiliser ces éléments de base pour créer quelque chose comme un solveur sudoku. Mais qu'en est-il de Pac-man, ou plus simplement, de Pong?
VEUILLEZ NOTER: Je ne recherche pas de détails de bas niveau, mais un aperçu conceptuel. (Par exemple: en termes de haut niveau, comment géreriez-vous les E / S? Comment stockeriez-vous l'état du jeu? Comment implémenteriez-vous quelque chose comme une "boucle principale"? Comment mesureriez-vous et réagiriez-vous au temps qui passe? )
la source
Réponses:
L'état du jeu de suivi n'est pas différent de l'état de suivi dans tout autre programme Prolog. Vous définissez des faits et les utilisez ensuite pour prendre des décisions. C'est assez vieux, mais l'article Exploring Prolog: Adventures, Objects, Animals, and Taxes explique bien comment cela pourrait fonctionner dans un jeu. Résumé de l'article:
Au-delà de cela, vous avez besoin d'une bibliothèque graphique et IO. Il peut y avoir des distributions commerciales Prolog qui les incluent. Je connais bien SWI Prolog , donc je proposerai plOpenGL comme point de départ. Non seulement il vous donne accès aux capacités de rendu d'OpenGL, mais il comprend également des liaisons pour les événements de souris et de clavier. Par exemple, pour gérer une pression sur la touche Échap, vous définissez une règle de clavier comme suit:
Jetez un œil à l' exemple de la lumière mobile de plOpenGL pour quelques détails supplémentaires et un exemple de gestion des mouvements de la souris.
Si vous utilisez une bibliothèque graphique, elle gérera probablement la boucle du jeu pour vous. Fondamentalement, vous inversez le contrôle de la bibliothèque et fournissez des règles à exécuter le cas échéant: configuration, repeinture, événements d'E / S, etc. Si vous souhaitez limiter FPS ou exécuter le code de manière conditionnelle en fonction du temps, vous pouvez suivre le temps écoulé en utilisant l' heure / la date prédicats et prendre des décisions en conséquence.
Il existe de nombreuses versions de Prolog, ce n'est donc certainement pas le seul moyen de créer un jeu. Différentes distributions et langages associés utiliseront différentes bibliothèques / liaisons qui peuvent encourager différentes approches. De plus, les programmeurs polyglottes peuvent vous encourager à utiliser un langage / runtime hôte plus "graphique" pour gérer le rendu et les E / S tout en utilisant Prolog pour modéliser les comportements des entités de jeu et la prise de décision.
la source
write
) dans un "prédicat logique" semble plier le concept assez loin.En plus de la réponse de Corbin : En général, l'état peut être stocké / récupéré dans Prolog en utilisant les prédicats assert / retract. Mais il existe de nombreuses options non standard telles que l'enregistrement dans RDF, XML, les bases de données relationnelles, etc. Si vous voulez une interface graphique, XPCE est proposé par SWI-Prolog.
Notez que bien que l'implémentation d'un jeu complet dans Logic Programming soit un bon exercice, dans la pratique, ses performances seraient insuffisantes et c'est pourquoi des fournisseurs comme SWI-Prolog proposent des liaisons vers des langages de niveau inférieur (par exemple Java, C ++, etc.). Même la mise en œuvre d'un simple solveur Sudoku nécessite l'utilisation de bibliothèques CLP .
la source