diff --git a/TestBasedGame.py b/TestBasedGame.py new file mode 100644 index 0000000..353bc51 --- /dev/null +++ b/TestBasedGame.py @@ -0,0 +1,241 @@ +# Cody Cook +# Southern New Hampshire University +# IT-140 Introduction to Scripting +# Project 2 - Text Based Game +# Professor Lisa Shannon +# 2022-10-08 + +import random + +separator = "##################################" +creepy_undertones = [ + "[???] You hear a strange noise coming from an adjacent room...", + "[???] You thought you heard something, but as you look around, you can't see anything.", + "[???] You hear thunder rumbling in the distance.", + "[???] You saw something move in the corner of the room, but looking again, there's nothing there." +] + +system = { + "name": 'Noises in the Dark', + "version": '1.0', + "author": 'Cody Cook', + "game": { + # Store the current game's state + "current_room": "foyer", + "items": [], + "completed": False, + "villain": False + } +} + +rooms = { + "foyer": { + "name": "Foyer", + "item": -1, + "item_name": None, + "item_location": None, + "locked": False, + "paths": { + "north": "basement_stairwell", + "west": "dining_hall", + "east": "closet"} + }, + "closet": { + "name": "Closet", + "item": 0, + "item_name": "Greenhouse key", + "item_location": "in the pocket of a puffy coat", + "locked": False, + "paths": { + "west": "foyer"} + }, + "basement_stairwell": { + "name": "Basement Stairwell", + "item": -1, + "item_name": None, + "item_location": None, + "locked": False, + "paths": { + "south": "foyer", + "east": "wine_cellar", + "north": "master_bedroom"} + }, + "wine_cellar": { + "name": "Wine Cellar", + "item": 0, + "item_name": "damp paper bag", + "item_location": "at the foot of the stairs", + "locked": False, + "paths": { + "west": "basement_stairwell"} + }, + "master_bedroom": { + "name": "Master Bedroom", + "item": 0, + "item_name": "laser pointer", + "item_location": "on a nightstand", + "locked": False, + "paths": { + "south": "basement_stairwell", + "west": "library"} + }, + "library": { + "name": "Library", + "item": 0, + "item_name": "bird feather", + "item_location": "in front of a bookcase", + "locked": False, + "paths": { + "east": "master_bedroom", + "south": "dining_hall", + "west": "children_bedroom"} + }, + "children_bedroom": { + "name": "Children's Bedroom", + "item": -1, + "item_name": None, + "item_location": None, + "locked": True, + "paths": { + "east": "library"} + }, + "dining_hall": { + "name": "Dining Hall", + "item": 0, + "item_name": "mouse toy", + "item_location": "below the table", + "locked": False, + "paths": { + "north": "library", + "east": "foyer", + "west": "kitchen"}, + }, + "kitchen": { + "name": "Kitchen", + "item": 0, + "item_name": "mangled water-bottle", + "item_location": "near the garbage can", + "locked": False, + "paths": { + "east": "dining_hall", + "north": "delivery_area"} + }, + "delivery_area": { + "name": "Delivery Area", + "item": -1, + "item_name": None, + "item_location": None, + "locked": False, + "paths": { + "south": "kitchen", + "north": "greenhouse"} + }, + "greenhouse": { + "name": "Greenhouse", + "item": 0, + "item_name": "black hairball", + "item_location": "near an open window", + "locked": True, + "paths": { + "south": "delivery_area"} + } +} + + +def show_instructions(): + print(separator, "\n# Welcome to " + system['name'] + "! #\n# Version: " + system["version"] + " by " + system[ + 'author'] + " #\n" + separator + separator, + "\nYou are investigating strange noises in a house and must locate the source.", + "\nExplore the house to uncover clues and items that will help you solve the mystery.", + "\nMove using 'north', 'south', 'east', or 'west', where possible.", + "\nYou can 'search' for items, and ask for 'help' to see this message again.", + "\nCheck your inventory using 'items' to see what you have found.", + "\nGood luck!\n" + separator + separator) + + +def get_item(room): + if rooms[room]["item"] == -1: # -1 = No Item in Room + return False + elif rooms[room]["item"] == 1: # 1 = Item Taken + return None + elif rooms[room]["item"] == 0: # 0 = Item Available + rooms[room]["item"] = 1 # Set item to taken + return True + + +def list_items(): + if len(system["game"]["items"]) >= 1: + print("[Items] " + ', '.join(system["game"]["items"])) + else: + print("[Items] You have no items.") + + +def print_strings(string): + if string == "greenhouse_locked": + print("[Move] The greenhouse door is locked... if only you could find a key.") + elif string == "children_bedroom_locked": + print("[Move] The children's bedroom door is unlocked but there's something heavy behind the door...") + elif string == "middle_of_the_house": + print("[!!!] You hear a loud noise coming from the children's bedroom... better investigate!") + + +def get_new_state(input_from_user, current_room=system["game"]["current_room"]): + if input_from_user in rooms[current_room]["paths"]: + if rooms[rooms[current_room]["paths"][input_from_user]]["locked"]: + print_strings(rooms[system["game"]["current_room"]]["paths"][input_from_user] + "_locked") + else: + system["game"]["current_room"] = rooms[current_room]["paths"][input_from_user] + elif input_from_user == "search": + if get_item(system["game"]["current_room"]): + print("[Search] You found a", rooms[current_room]["item_name"], rooms[current_room]["item_location"] + "!") + system["game"]["items"].append(rooms[system["game"]["current_room"]]["item_name"]) + else: + print("[Search] You found nothing.") + elif input_from_user == "items": + list_items() + elif input_from_user == "help": + show_instructions() + elif input_from_user == "quit" or input_from_user == "exit": + system["game"]["completed"] = True + else: + print("[Error] Invalid action; please try again.") + + +def show_status(): + print("[Current Room] " + rooms[system["game"]["current_room"]]["name"]) + list_items() + if rooms[system["game"]["current_room"]]["item"] == 0: + print("[???] There's a", rooms[system["game"]["current_room"]]["item_name"] + " here somewhere.") + directions = "" + for direction in rooms[system["game"]["current_room"]]["paths"]: + directions += direction + " " + print("[Actions]", "quit", "help", "search", "items", directions) + if random.randint(1, 5) == 1: + print(random.choice(creepy_undertones)) + + +def main(): + show_instructions() + while system["game"]["completed"] is False: + show_status() + print("What would you like to do?") + get_new_state(input('> ').lower(), system["game"]["current_room"]) + if "Greenhouse key" in system["game"]["items"] and rooms["greenhouse"]["locked"]: + rooms["greenhouse"]["locked"] = False + if len(system["game"]["items"]) == 7 and rooms["children_bedroom"]["locked"]: + rooms["children_bedroom"]["locked"] = False + print_strings("middle_of_the_house") + if system["game"]["current_room"] == "children_bedroom" and len(system["game"]["items"]) == 7: + system["game"]["villain"] = True + system["game"]["completed"] = True + if system["game"]["villain"]: + print(separator + separator, + "\n[!!!] You enter the children's room." + + "\n[!!!] This room is an absolute mess..." + + "\n[!!!] Inside, you discover a black cat." + + "\n[!!!] Could this have been the troublemaker all along?") + print("\n[Game Over] The game is exiting. Thank you for playing!") + + +if __name__ == "__main__": + main()