diff options
-rw-r--r-- | agent.prolog | 54 | ||||
-rw-r--r-- | item.prolog | 22 | ||||
-rw-r--r-- | main.prolog | 15 | ||||
-rw-r--r-- | map.prolog | 10 | ||||
-rw-r--r-- | parser.prolog (renamed from read.prolog) | 24 |
5 files changed, 74 insertions, 51 deletions
diff --git a/agent.prolog b/agent.prolog index 994b77d..0c1d445 100644 --- a/agent.prolog +++ b/agent.prolog @@ -1,7 +1,24 @@ -:- module(agent, [look/0, move/1, take/1]). +:- module(agent, [init, look/0, move/1, take/1]). +:- consult('parser.prolog'). +:- consult('map.prolog'). + + + + +% initialisation + +init :- + retractall(here(_)), + asserta(here(a)), !. + + + + +% command functions + look :- here(L), writeItemsAt(L), @@ -23,3 +40,38 @@ take(T) :- asserta(holding(T)), write('Taken.'), !. + + + +% letting the player know what's going on + +writeItemsAt(L) :- + itemAt(X,L), + description(X,D), + write(D), + fail. +writeItemsAt(_) :- true. + + +writeExits(L) :- + connects(L,_,D), + join(['You see an exit to the ',D,'.\n'],M), + write(M), + fail. +writeExits(_) :- true. + + + + +% basic facts about the maze + +itemAt(ladder,a). + + +canTake(gold). +canTake(deadWumpus). + + +description(ladder, 'There is a rope ladder hanging from the ceiling here.\n'). +description(gold, 'You see a glitter along the sandy floor of the cave.\n'). + diff --git a/item.prolog b/item.prolog deleted file mode 100644 index 11e469c..0000000 --- a/item.prolog +++ /dev/null @@ -1,22 +0,0 @@ - -:- module(item, [itemAt/2, writeItemsAt/1, canTake/1, description/2]). - - -itemAt(ladder,a). - - -writeItemsAt(L) :- - itemAt(X,L), - description(X,D), - write(D), - fail. -writeItemsAt(_) :- true. - - -canTake(gold). -canTake(deadWumpus). - - -description(ladder, 'There is a rope ladder hanging from the ceiling here.\n'). -description(gold, 'You see a glitter along the sandy floor of the cave.\n'). - diff --git a/main.prolog b/main.prolog index ddf7baa..aa25bc5 100644 --- a/main.prolog +++ b/main.prolog @@ -1,19 +1,6 @@ -:- consult('map.prolog'). +:- consult('parser.prolog'). :- consult('agent.prolog'). -:- consult('read.prolog'). -:- consult('item.prolog'). -init :- - retractall(here(_)), - asserta(here(a)), !. - - -join([X|Y],R) :- - join(Y,Rx), - atom_concat(X,Rx,R). -join([X],R) :- - R = X. - @@ -1,13 +1,5 @@ -:- module(map, [connects/3, writeExits/1]). - - -writeExits(L) :- - connects(L,_,D), - join(['You see an exit to the ',D,'.\n'],M), - write(M), - fail. -writeExits(_) :- true. +:- module(map, [connects/3]). % map has 20 rooms, labelled a through t diff --git a/read.prolog b/parser.prolog index 63d3ae7..c4e0fff 100644 --- a/read.prolog +++ b/parser.prolog @@ -1,12 +1,15 @@ -:- module(read, [prompt/1, readList/1]). +:- module(parser, [prompt/1, readList/1, readLine/1, split/2, join/2]). -% functions for obtaining a line of input text and parsing -% it into a list of words +% functions for dealing with lines of text +% eg obtaining one, parsing it into a list of words, and rejoining it -% prompt provides the user with a '>' prompt as well +% prompt provides the user with a '>' prompt % readList merely obtains and parses the input +% readLine obtains a raw line of input +% split parses a line of text into words +% join takes a list of words and joins them into one string prompt(L) :- @@ -16,7 +19,7 @@ prompt(L) :- readList(L) :- readLine(X), - wordList(L,X,[]), !. + split(X,L). readLine(L) :- @@ -30,6 +33,17 @@ readLine_tail(C,[C|X]) :- readLine_tail(C2,X). +split(X,R) :- + wordList(R,X,[]), !. + + +join([X|Y],R) :- + join(Y,Rx), + atom_concat(X,Rx,R). +join([X],R) :- + R = X. + + wordList(X) --> whitespace, wordList(X). wordList([X]) --> word(X). wordList([X]) --> word(X), whitespace. |