Created
October 27, 2021 21:19
-
-
Save Pinacolada64/8b08ef0813932e3f378f8eea5b2f8033 to your computer and use it in GitHub Desktop.
Testing map functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from prompt_toolkit import prompt | |
# Test walking around on a map | |
""" | |
# * Room number (rm) | |
# * Location name (lo$) | |
# * items: monster, item, weapon, food | |
# * exits: north, east, south, west | |
# RC (room command: 1=move up, | |
# 2=move down), | |
# RT (Room exit transports you to: | |
# room #, or 0=Shoppe) | |
""" | |
game_map = dict(number=1, room_name="MERCHANT LOBBY", alignment="neutral", items=[0, 62, 0, 0], | |
exits=dict(north=0, east=0, south=0, west=0, up=0, down='Shoppe'), | |
desc="You are at the entrance to the store. There is a passage leading downward to the market area.") | |
item_dict = dict(number=62, name="ADVENTURER'S GUIDE") | |
""" | |
'number': '1', | |
'room_name': "MERCHANT LOBBY", | |
'alignment': 'neutral', | |
'items': [monster=0, item=62, weapon=0, food=0], | |
'exits': [north='0', east='0', south='13', west='0', up='0', down='Shoppe'], | |
'desc': "You are at the entrance to the store. There is a passage leading downward to the market area."), | |
tanabi: | |
game_map = { | |
"number": 1, | |
"room_name": "MERCHANT LOBBY", | |
etc etc | |
} | |
""" | |
def grammatical_list(item_list): | |
result_list = [] | |
for item in item_list: | |
if item.endswith("s"): | |
result_list.append(f"some {item}") | |
elif item.startswith(('a', 'e', 'i', 'o', 'u')): | |
result_list.append(f"an {item}") | |
else: | |
result_list.append(f"a {item}") | |
# Add 'and' if we need it - tanabi | |
if len(result_list) > 1: | |
result_list[-1] = f"and {result_list[-1]}" | |
# Join it together | |
return ", ".join(result_list) | |
def room_info(room_num): | |
if debug: | |
print("Room #: ", game_map['number']) # should print '1' | |
print("Alignment: ", game_map['alignment']) | |
items_in_room = [] | |
item = game_map['items'[2]] # FIXME: i want the 2nd item from the 'items' list, not 2nd char | |
if item: | |
items_in_room.append(item) | |
if len(items_in_room): | |
print("You see: ", items_in_room, sep=', ') | |
class Exit(object): | |
def __init__(self, target_id, desc, message): | |
self.target_id = target_id | |
self.desc = desc | |
self.message = message | |
def show_message(self): | |
print(self.message) | |
class Room(object): | |
room_sequence = 0 | |
def __init__(self, number, name, alignment, items, desc): | |
self.number = number | |
self.name = name | |
self.alignment = alignment | |
self.items = items | |
self.exits = [] | |
self.desc = desc | |
@staticmethod | |
def create_room(name, alignment, items, desc): | |
Room.room_sequence += 1 | |
return Room(Room.room_sequence, name, alignment, items, desc) | |
class Map(object): | |
def __init__(self): | |
self.db = {} | |
def add_room(self, name, alignment, items, desc): | |
new_room = Room.create_room(name, alignment, items, desc) | |
self.db[new_room.number] = new_room | |
return new_room.number | |
def link_room(self, source_room, dest_room, desc, message): | |
new_exit = Exit(dest_room, desc, message) | |
if source_room not in self.db: | |
raise RuntimeError(f"{source_room} does not exist") | |
if dest_room not in self.db: | |
raise RuntimeError(f"{dest_room} does not exist") | |
self.db[source_room].exits.append(new_exit) | |
def show_room(room_number): | |
"""Show room name, alignment, players/NPCs here, exits""" | |
print(f'{map.db[room_number].name}', end='') | |
if debug: | |
print(f' (#{room_number}) ', end='') | |
print(f'{map.db[room_number].alignment}') | |
if descriptions: | |
print() # blank line | |
print(f'{map.db[room_number].desc}') | |
def move(room, direction): | |
"""FIXME""" | |
pass | |
if __name__ == '__main__': | |
debug = True | |
descriptions = True | |
# room_info(1) # FIXME | |
# should print "You see some bells, an apple, and a candle": | |
stuff_here = grammatical_list(['accordion']) | |
print(f'You see: {stuff_here}') | |
stuff_here = grammatical_list(['large chest', 'dry bones']) | |
print(f'You see: {stuff_here}') | |
stuff_here = grammatical_list(["bells", 'apple', 'candle']) | |
print(f'You see: {stuff_here}.') | |
# Create your world | |
map = Map() | |
# name, alignment, items[list], description | |
first_room_id = map.add_room("MERCHANT'S LOBBY +", "neutral", ["Adventurer's Guide"], | |
"""You are at the entrance to the store. | |
There is a passage leading downward to the market area.""") | |
second_room_id = map.add_room("Second Room", "foxy", [], "This is the second room.") | |
third_room_id = map.add_room("CAVERN HEAD +", "neutral", ["M.SAND CRAB"], | |
"You have reached the entrance to a large cavern.") | |
""" | |
items: 3,0,0,0 | |
exits: 1,14,0,24,0,0 | |
""" | |
map.link_room(first_room_id, second_room_id, "To Second Room", "You go to the second room.") | |
map.link_room(second_room_id, first_room_id, "To First room", "You go to the first room.") | |
# map.db has your rooms in it. | |
print(f'Second room name: {map.db[second_room_id].name}') | |
# Where does your exit link to? | |
print(f'First room links to: {map.db[map.db[first_room_id].exits[0].target_id].name}') | |
# FIXME: Show room exits - ryan | |
# print(f'Room exits: {map.db[map.db[first_room_id].exits[0]]}') | |
# Normally, exits are listed thusly: | |
# Ye may travel: North, West and Up. | |
# TODO: "Goggles of Cartography" item could expand exits by listing room names thusly: | |
# Ye may travel: North (to DRAGON DROP), West (to WATERSDEEP), and Up (to SNOWY PEAK). | |
# answer = prompt('Give me some input: ') # this no worky on Win10 | |
# print(f'You said: {answer}.') | |
player_room = 1 | |
show_room(player_room) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
All I know is some block of code is in the wrong place. :(