From 8a39db2b292aa2e99daa7e7ce56a6c893824f0e0 Mon Sep 17 00:00:00 2001 From: Alek Ratzloff Date: Thu, 18 Nov 2021 12:15:35 -0800 Subject: [PATCH] Add package loading so not everything is defined in __main__ anymore Signed-off-by: Alek Ratzloff --- agame/__main__.py | 115 ++++++---------------------------------- examplegame/__init__.py | 95 +++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 98 deletions(-) create mode 100644 examplegame/__init__.py diff --git a/agame/__main__.py b/agame/__main__.py index d428468..0b4b612 100644 --- a/agame/__main__.py +++ b/agame/__main__.py @@ -1,107 +1,26 @@ -from agame.action import * -from agame.game import * -from agame.item import * -from agame.room import * -from agame.trigger import * +import argparse +import importlib.util +from pathlib import Path +import sys -# TODO - take a custom module name that has: -# .database -# .game -# so that you can just RUN it -# Something similar to wsgi using "app" in the passed module - - -# This is the *game* here -database = Database() -database.add_items( - Item( - id="glowing_rock", - name="glowing rock", - desc="This rock is glowing.", - synonyms=("rock",), - room_desc="You see a ((glowing rock)). You have **got** to have it.", - triggers={ - GET: [ - PrintAction( - "You try to pick up the rock, but it slips out of your greasy hands.", - "Maybe you should wash your hands, you disgusting little man.", - ) - ], - LOOK: [PrintAction("Man, that rock looks awesome.")], - }, - ), - Item( - id="cell_door", - name="door", - room_desc="A ((door)) sits on the far wall.", - triggers={ - GET: [PrintAction("The door is pretty attached to its wall.")], - OPEN: [ - CheckVarAction( - "cell_door_open", - Compare.EQUALS, - True, - yes=[ - PrintAction( - "It's already open. You push on the door even //more//, just in case." - ), - SleepAction(1.0), - PrintAction("..."), - SleepAction(1.0), - PrintAction("Yup, still open."), - ], - no=[ - SetVarAction("cell_door_open", True), - PrintAction("The door swings open, thanks to you."), - ], - ) - ], - CLOSE: [ - CheckVarAction( - "cell_door_open", - Compare.EQUALS, - True, - yes=[ - PrintAction("You close that door. Nice job."), - SetVarAction("cell_door_open", False), - ], - no=[PrintAction("The door is already closed.")], - ) - ], - LOOK: [ - CheckVarAction( - "cell_door_open", - Compare.EQUALS, - True, - yes=[PrintAction("It's a door, wide open, because you opened it.")], - no=[PrintAction("A closed door. You can change this.")], - ) - ], - }, - ), +# Parse args +parser = argparse.ArgumentParser( + description="Run a game", ) -database.add_rooms( - Room( - id="start", - name="Test room", - desc="You're in ((Todd's Test Cell)).", - items=[ - database.items["glowing_rock"].create_inst(), - database.items["cell_door"].create_inst(), - ], - ), +parser.add_argument( + "PACKAGE", type=str, help="The Python package that contains the game to run." ) +args = parser.parse_args() -# Build the game state -game = Game( - database=database, - room=database.rooms["start"], - vars={ - "cell_door_open": False, - }, -) +# Get package to run +package = args.PACKAGE +# Load game module +game_module = importlib.import_module(package) +game = game_module.game # type: ignore + +# Run game.print_room() while True: try: diff --git a/examplegame/__init__.py b/examplegame/__init__.py new file mode 100644 index 0000000..417a0e4 --- /dev/null +++ b/examplegame/__init__.py @@ -0,0 +1,95 @@ +from agame.game import Game, Database +from agame.item import Item +from agame.room import Room +from agame.action import * +from agame.trigger import * + +# This is the *game* here +database = Database() +database.add_items( + Item( + id="glowing_rock", + name="glowing rock", + desc="This rock is glowing.", + synonyms=("rock",), + room_desc="You see a ((glowing rock)). You have **got** to have it.", + triggers={ + GET: [ + PrintAction( + "You try to pick up the rock, but it slips out of your greasy hands.", + "Maybe you should wash your hands, you disgusting little man.", + ) + ], + LOOK: [PrintAction("Man, that rock looks awesome.")], + }, + ), + Item( + id="cell_door", + name="door", + room_desc="A ((door)) sits on the far wall.", + triggers={ + GET: [PrintAction("The door is pretty attached to its wall.")], + OPEN: [ + CheckVarAction( + "cell_door_open", + Compare.EQUALS, + True, + yes=[ + PrintAction( + "It's already open. You push on the door even //more//, just in case." + ), + SleepAction(1.0), + PrintAction("..."), + SleepAction(1.0), + PrintAction("Yup, still open."), + ], + no=[ + SetVarAction("cell_door_open", True), + PrintAction("The door swings open, thanks to you."), + ], + ) + ], + CLOSE: [ + CheckVarAction( + "cell_door_open", + Compare.EQUALS, + True, + yes=[ + PrintAction("You close that door. Nice job."), + SetVarAction("cell_door_open", False), + ], + no=[PrintAction("The door is already closed.")], + ) + ], + LOOK: [ + CheckVarAction( + "cell_door_open", + Compare.EQUALS, + True, + yes=[PrintAction("It's a door, wide open, because you opened it.")], + no=[PrintAction("A closed door. You can change this.")], + ) + ], + }, + ), +) +database.add_rooms( + Room( + id="start", + name="Test room", + desc="You're in ((Todd's Test Cell)).", + items=[ + database.items["glowing_rock"].create_inst(), + database.items["cell_door"].create_inst(), + ], + ), +) + +# Build the game state +game = Game( + database=database, + room=database.rooms["start"], + vars={ + "cell_door_open": False, + }, +)