import game_data
import os
class engine(object):
def describe_room(self,location,system_data,items): #print description from room data
print ""
print location.title
#if new room, or verbose, print long description
if location.title not in system_data.rooms_visited:
system_data.rooms_visited.append(location.title)
for i in location.long_description:
print i
print ""
elif system_data.brief == False:
for i in location.long_description:
print i
else:
print location.short_description
#describe room inventory
print "item descriptions:"
for item in location.inventory:
print item['placed']
print ""
# *** BEGIN EVENT FUNCTIONS ***
def event_handler(self,location,items,player,words,nouns,verb): #triggers events from player input
#inventory router
if verb in words.inventory_commands:
if verb == "inventory":
print "Inventory:"
for item in player.inventory:
print " %s"%item['name']
elif verb == "i":
print "Inventory:"
for item in player.inventory:
print " %s"%item['name']
elif verb == "get":
return "get"
elif verb == "take":
return "get"
elif verb == "drop":
return "drop"
elif verb == "put":
return "put"
elif verb == "from":
return "get from"
def move(): #change room
pass
def inventory(self,action,location,items,player,nouns,verb): #add or remove player_inventory
if action == "get":
get_true = False
for noun in nouns:
for item in location.inventory:
if noun == item:
get_true = True
location.inventory.remove(item)
player.inventory.append(item)
print "you get %s" % item['name']
if not get_true:
print "You can't get that."
elif action == "drop":
drop_true = False
for noun in nouns:
for item in player.inventory:
if noun == item:
drop_true = True
location.inventory.append(item)
player.inventory.remove(item)
print "you drop %s" % item['name']
if not drop_true:
print "You don't have that!"
def place_item(self,action,location,items,player,nouns,verb): #placing item: "Put jewel in box"
to_put = []
put_in = []
take_from = []
thing = False
place = False
if action == "put":
for noun in nouns:
for item in player.inventory:
if noun == item:
#print "for player inventory:"
#print "to_put is set to: %s" % item['name']
to_put = item
thing = True
for noun in nouns:
for item in location.inventory:
if item['container'] == True:
if noun == item:
#print "for location inventory:"
#print "Put_in is set to: %s" % item['name']
put_in = item
place = True
for noun in nouns:
for item in location.static:
if item['container'] == True:
if noun == item:
#print "for static inventory:"
#print "Put_in is set to: %s" % item['name']
put_in = item
place = True
if thing and place:
player.inventory.remove(to_put)
put_in['inventory'].append(to_put)
print "You put the %s in the %s."% (to_put['name'],put_in['name'])
else:
print "Put what where? I'm confused."
if action == "get from":
for noun in nouns:
for item in location.inventory:
if item['container'] == True:
for object in item['inventory']:
if noun == object:
print "for static inventory:"
print "to_put is set to: %s" % object['name']
to_put = object
thing = True
if noun == item:
print "for static inventory:"
print "take_from is set to: %s" % item['name']
take_from = item
place = True
for noun in nouns:
for item in location.static:
if item['container'] == True:
for object in item['inventory']:
if noun == object:
#print "for static inventory:"
#print "to_put is set to: %s" % object['name']
to_put = object
thing = True
if noun == item:
#print "for static inventory:"
#print "take_from is set to: %s" % item['name']
take_from = item
place = True
if thing and place:
for item in take_from['inventory']:
#print item['name']
#print to_put['name']
if to_put == item:
player.inventory.append(to_put)
take_from['inventory'].remove(to_put)
print "You get the %s" % to_put['name']
else:
print "Get what from where? I'm confused."
else:
print "Get what from where? I'm confused."
def change_exit(): #add or remove an exit
pass
def change_static(): #add or remove static objects
pass
def room_inventory(): #add or remove room_inventory
pass
def change_mob(): #add or remove mob
pass
def change_room_desc(): #change room descriptions
pass
def health(): #change player health
pass
def combat(): #initiate combat
pass
def talk(): #initiate conversation
pass
class parser(object): #Various parsers for acting on user input
def break_words(self,action): #breaks 'action' input into a list of words
words = action.split(' ')
print"" #dumb, but helps formatting
return words
def get_nouns(self,action,location,items,player): #pull nouns from player input
#loc_inv = location.inventory
#loc_static = location.static
#player_inv = player.inventory
exits = location.exits.keys()
nouns = [] #holder for found nouns
for word in action:
for item in location.inventory:
if item['name'] == word:
nouns.append(item)
elif item['container'] == True:
for object in item['inventory']:
if object['name'] == word:
nouns.append(object)
for item in location.static:
if item['name'] == word:
nouns.append(item)
elif item['container'] == True:
for object in item['inventory']:
if object['name'] == word:
nouns.append(object)
for item in player.inventory:
if item['name'] == word:
nouns.append(item)
return nouns
def get_verb(self,action):
current_place_words = game_data.words.current_place_words
verb = ""
words = game_data.words()
verb_list = []
verb_list.append(words.inventory_commands)
verb_list.append(words.verbs)
verb_list.append(words.describers)
verb_list.append(words.nav_commands)
verb_list.append(words.system_commands)
for word in action:
for list in verb_list:
if word in list:
verb = word
#this ugly chunk determines if you are looking at your location
if action[0] == "l":
verb = "look here"
for desc in words.describers:
if verb == desc:
for word in current_place_words:
for action_word in action:
if action_word == word:
verb = "look here" #look_at() looks for this specific phrase
#this ugly chunk determines if you are looking at a direction
look_dir_desc = False
look_dir_dir = False
for desc in words.describers:
for action_word in action:
if action_word == desc:
look_dir_desc = True
for word in words.nav_commands:
if action_word == word:
look_dir_dir = True
if look_dir_desc and look_dir_dir:
verb = "look direction" #look_at() looks for this specific phrase
return verb
def exit(self,action,location,system_data,map_data): #checks input to see if it's a move order
#we are checking for three things here:
#we are checking for three things here:
# is the user input just trying to look at an exit?
# If not, is the input on the list of possible nav commands?
# if so, is it actually a valid exit for this location?
# detected look-direction inputs are ignored,
# parser.look_at will also detect this and issue and error message
#if all of those are satisfied and it's a good command, the location is changed
describers = game_data.words.describers
nav_commands = game_data.words.nav_commands
converter = game_data.words.convert_direction
exitcheck = 0#these three are holders for checking input against lists
navcheck = 0 #we start assuming they are not on the list
looking_present = 0
going_to = ""
#convert single letter directions.
for dir in converter:
conv = []
conv.append(converter[dir])
dirlist = []
dirlist.append(dir)
if action == conv:
action = dirlist
for action_word in action: #start processing user input
for look in describers:#are you just trying to look at an exit?
if action_word == look:
looking_present += 1
for nav in nav_commands: #does it contain a nav command?
if action_word == nav:
navcheck += 1
for exit in location.exits: #is it on the list of exits for this location?
exitkey = location.exits[exit]
if action_word == exit:
exitcheck += 1
going_to = exitkey
#having determined if input is just looking, is a nav command, and is on the exit list
#we now start acting on that info
if not looking_present:
if navcheck:
if not exitcheck:
print "You can't go that way"
else:
print ""
print "You go %s" % action_word
for room in map_data.room_list:
if room == going_to:
location = map_data.room_list[going_to]
return location
def profanity(self,action): #checks for profanity
profanity = game_data.words.profanity
cursing = 0
for action_word in action:
for i in profanity:
if action_word == i:
cursing += 1
if cursing:
print "Such language!"
def system(self,system_data,verb): #checks for system commands
system_commands = game_data.words.system_commands
for word in system_commands:
if verb == word:
if verb == "inv?":
for inv_word in game_data.words.inventory_commands:
print inv_word
elif verb == "load":
print "Command not yet implemented"
elif verb == "save":
print "Command not yet implemented"
elif verb == "verbose":
system_data.brief = False
print "Setting Verbose, Always give full room description"
elif verb == "brief":
system_data.brief = True
print "Setting brief, Only give room full description on first visit"
elif verb == "score":
print "Command not yet implemented"
elif verb == "restart":
return True
elif verb == "quit":
quit()
elif verb == "q":
quit()
elif verb == "clear":
os.system('cls')
elif verb == "?" or "help":
print "Adventure Framework ver0.5 by D10d3"
print " -= An adventure engine =-"
print ""
print "In addition to the following system commands you may type any action"
print "that comes to mind with varying degrees of success. When interacting"
print "with objects try to always place the verb before the noun."
print "Thanks for playing."
print ""
print "System commands:"
print " clear = Clear the screen"
print " g = repeat last action"
print " inv? : Lists inventory commands the player can use"
print " load : Command not yet implemented"
print " save : Command not yet implemented"
print " verbose : Always give full room description"
print " brief : Only give room full description on first visit"
print " score : Command not yet implemented"
print " restart : Restarts the game"
print " help or ? : Displays this information"
print " quit or q : Exits the game"
def look_at(self,verb,nouns,location,items,player): #checks for description query
#first we get a list of describer words, and all of the possible nouns
describers = game_data.words.describers
loc_inv = location.inventory
loc_static = location.static
player_inv = player.inventory
exits = location.exits.keys()
#current_place_words = game_data.words.current_place_words
present = False #assumes you are looking at nothing that's there.
if verb == "look here":
print "You look around."
present = True
for i in location.long_description:
print i
if verb == "look direction":
print "You will need to go there to find out what's there."
present = True
if verb == "quit":
present = True
print "Goodbye!"
for word in describers:
if verb == word:
for noun in nouns:
present = True
print noun['desc']
try:
if noun['inventory']:
print "%s contains:" % noun['name']
for item in noun['inventory']:
print item['name']
except KeyError:
fnord = "fnord"
#for list in game_data.words.wordlists:
# if verb in list:
# present +=1
if present == False:
print "What are you looking at?"
def recognized(self,action): #is known word? error message if not
game_datas = game_data.words.wordlists
known_word = 0
for list in game_datas:
for word in list:
for action_word in action:
if action_word == word:
known_word += 1
if not known_word:
print "I don't understand that."
else:
return True
Comments
0 B
|👍
/👎