[HN Gopher] Prolog Adventure Game
       ___________________________________________________________________
        
       Prolog Adventure Game
        
       Author : shakna
       Score  : 153 points
       Date   : 2025-04-22 00:25 UTC (22 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | agiacalone wrote:
       | Very nice. I gave a lab assignment like this once! It's a great
       | way to learn Prolog.
       | 
       | https://github.com/agiacalone/cecs-342-lab-prolog
        
         | pacaro wrote:
         | There's even a book "Adventure in Prolog" by Dennis Merritt
         | (ISBN 1520918917)
         | 
         | It's a lot of fun to work through, other prolog resources can
         | be a little dry
        
           | shakna wrote:
           | This one? [0]
           | 
           | [0] https://amzi.com/AdventureInProlog/
        
             | pacaro wrote:
             | Yes! that one!. I have a paper copy, so it didn't occur to
             | me that there would be an online version
        
             | Sn0wCoder wrote:
             | Going to tell the Preface story tomorrow at work, I guess
             | if your reading this you now know my HN handle ;) Not sure
             | I will do the 'game' but that into was worth clicking the
             | link.
        
               | rickydroll wrote:
               | > I guess if your reading this you now know my HN handle
               | 
               | No worries. A great philosopher once wrote:
               | 
               | "There is a theory which states that if ever anyone
               | discovers exactly what your HN handle is for and why it
               | is here, it will instantly disappear and be replaced by
               | an HN handle even more bizarre and inexplicable."
        
               | agiacalone wrote:
               | I also heard:
               | 
               | "There is another theory which states that _this has
               | already happened_... "
        
         | nottorp wrote:
         | Yep. That's how I passed my Prolog course as well :)
        
       | ForOldHack wrote:
       | If you wrote an adventure game in Prolog, you could write a
       | client that would also solve the adventure.
        
         | mcv wrote:
         | I can imagine it's easier to write that client in Prolog than
         | the adventure.
        
           | johnisgood wrote:
           | Or write a program that generates the adventure game!
        
         | ooopdddddd wrote:
         | That's only if you are using pure predicates. From a quick
         | glance, the code makes liberal use of assert, retract, and the
         | cut operator, so you can't write a query that solves the
         | problem automatically.
        
       | asciii wrote:
       | Cool! I got stuck trying to figure out how to turn on the
       | flashlight and then got stuck in the woods and died.
        
       | twothamendment wrote:
       | When I was in school I had to do some stuff with prolog. I got my
       | wife interested enough that she added some rooms and items to a
       | game like this. Good times!
        
       | wfurney wrote:
       | I have never heard of Prolog before so this was cool. I did think
       | the "make sure the flashlight is turned on" point was kind of
       | confusing. I have the battery and flashlight, but there's no way
       | to turn it on. I couldn't run it with gprolog but swipl works
       | fine.
        
         | klibertp wrote:
         | The flashlight should be automatically on in this case:
         | flashlight_on :- at(flashlight,holding), at(battery,holding).
         | 
         | This condition is checked when you try to reach "woods" and
         | "woods_1". (And that's the only place you can test if the
         | flashlight is on, because it's otherwise not checked and
         | doesn't change any of the descriptions.) The flashlight doesn't
         | save you from dying in the "deepforest_X".
        
       | 2mlWQbCK wrote:
       | Reminds me of Dialog, a domain-specific language for writing
       | adventure games, heavily inspired by Prolog:
       | 
       | https://github.com/Dialog-IF/dialog/
       | 
       | https://linusakesson.net/dialog/
        
       | codesnik wrote:
       | is it generated by LLM using prompt at
       | https://github.com/stefanrodrigues2/Prolog-Adventure-game/bl...?
        
         | Kaethar wrote:
         | Given [1], probably :)))
         | 
         | [1] https://github.com/stefanrodrigues2/Prolog-Adventure-
         | game/bl...
        
           | johnisgood wrote:
           | Good catch! Although I do have some README.md templates where
           | I use "yourusername" or whatever. I bet it would be said it
           | was generated by an LLM. :/ Oh well, it still would take
           | someone skilled to have it made by an LLM anyways. :D
        
       | hazymemory wrote:
       | Just for curiosity I just asked chat deepseek to load and solve
       | the game and it solved it in half a second.
       | 
       | It suggested adding some riddle, for example:
       | path(castle, up, tower) :-              at(blueprint, holding),
       | (solved_riddle -> true ;               write('Answer the riddle
       | first: What walks on four legs in the morning...?'), nl,
       | read(Answer),               (Answer = 'human' ->
       | assert(solved_riddle) ;                write('Wrong! Try
       | again.'), nl, fail)).
        
       | klibertp wrote:
       | I only learned Prolog as a hobby, so I may be mistaken, but the
       | quality of the code seems really bad? Starting from keeping game
       | state in a bunch of magic globals (assert/retract everywhere), to
       | a lack of input parsing (even though DCGs would be a perfect
       | match), to comments that disagree with the code[1], to the game
       | logic coupled with game mechanics as side effects (the winning
       | condition is checked inside `take`)... I may be too used to
       | Prolog code from books and tutorials, but the number of cuts also
       | seems much larger than expected.
       | 
       | ...now that I look at this, it's 3 years old. I wonder how much
       | better today's LLMs would fare?
       | 
       | [1] https://github.com/stefanrodrigues2/Prolog-Adventure-
       | game/bl... - no, the routine does not "wait" on Windows, you'd
       | need to put `get_char(_)` or something before `halt`.
        
       | johnisgood wrote:
       | I love text-based adventure games in Prolog.
        
       | mparnisari wrote:
       | I can't get this game to start, am I stupid?
       | 
       | $ swipl -s treasure_hunt.pl
       | 
       | and then what?
        
         | klibertp wrote:
         | -> swipl -s treasure_hunt.pl         Welcome to SWI-Prolog
         | (threaded, 64 bits, version 9.2.9)         SWI-Prolog comes
         | with ABSOLUTELY NO WARRANTY. This is free software.
         | Please run ?- license. for legal details.              For
         | online help and background, visit https://www.swi-prolog.org
         | For built-in help, use ?- help(Topic). or ?- apropos(Word).
         | ?- start.  % <- this              Enter commands using standard
         | Prolog syntax.         Available commands are:         start.
         | -- to start the game.         up. down. right. left.  -- to go
         | in that direction.         ...etc...
        
       ___________________________________________________________________
       (page generated 2025-04-22 23:02 UTC)