Locations: Add location connections and discoverability
When connecting a location, a new connection is appended. Each connection holds a discovered flag. Only discovered connections are show in the options menu. When looking around, undiscovered connections are revealed
This commit is contained in:
@@ -17,9 +17,13 @@ class Game:
|
|||||||
#ToDo: move this out of the main file
|
#ToDo: move this out of the main file
|
||||||
locations = {
|
locations = {
|
||||||
"City": SafeZone(self, "Mayberry", "You find yourself in the small rural town of Mayberry. \nThe town is quaint and charming, with a population of only a few hundred people. \nIt is surrounded by a thick forest, and the only way to get here is on foot. \nThere are a few shops and businesses around."),
|
"City": SafeZone(self, "Mayberry", "You find yourself in the small rural town of Mayberry. \nThe town is quaint and charming, with a population of only a few hundred people. \nIt is surrounded by a thick forest, and the only way to get here is on foot. \nThere are a few shops and businesses around."),
|
||||||
|
"Berrys": SafeZone(self, "Berry's Brews", "The tavern is abuzz with lively chatter and laughter, creating a warm and inviting atmosphere. The patrons, a diverse mix of locals and travelers, gather around wooden tables and cozy booths, each immersed in their own tales and mugs of frothy drinks."),
|
||||||
"Forest": Location(self, "the Forest", "You find yourself in a warm and lush oak forest. \nThe dense trees provide plenty of cover from the sun, and the forest floor is carpeted with a thick layer of leaves. \nYou hear the sound of birdsong all around you, and the occasional rustle of small animals in the undergrowth."),
|
"Forest": Location(self, "the Forest", "You find yourself in a warm and lush oak forest. \nThe dense trees provide plenty of cover from the sun, and the forest floor is carpeted with a thick layer of leaves. \nYou hear the sound of birdsong all around you, and the occasional rustle of small animals in the undergrowth."),
|
||||||
}
|
}
|
||||||
|
|
||||||
locations["City"].connect_location(locations["Forest"])
|
locations["City"].connect_location(locations["Forest"])
|
||||||
|
locations["City"].connect_location(locations["Berrys"], hidden=True)
|
||||||
|
locations["Berrys"].connect_location(locations["City"])
|
||||||
locations["Forest"].connect_location(locations["City"])
|
locations["Forest"].connect_location(locations["City"])
|
||||||
|
|
||||||
self.current_location = locations["City"]
|
self.current_location = locations["City"]
|
||||||
@@ -35,7 +39,7 @@ class Game:
|
|||||||
Text.print_header("Welcome", HeaderStyle.ROUND)
|
Text.print_header("Welcome", HeaderStyle.ROUND)
|
||||||
Text.type(mt.intro_text, delay=0.01, newline_delay=1.0)
|
Text.type(mt.intro_text, delay=0.01, newline_delay=1.0)
|
||||||
while not self.quit:
|
while not self.quit:
|
||||||
Menu("What would you like to do?", self.current_location.options).show()
|
Menu("What would you like to do?", self.current_location.get_options()).show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
"""Generic Location"""
|
"""Generic Location"""
|
||||||
from utils.input import Option
|
from utils.input import Option
|
||||||
from utils.text import HeaderStyle
|
from utils.text import HeaderStyle
|
||||||
|
from typing import List, Type
|
||||||
import utils.text as Text
|
import utils.text as Text
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@@ -9,22 +10,38 @@ class Location:
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.name = name
|
self.name = name
|
||||||
self.description = description
|
self.description = description
|
||||||
self.options = [Option("Look around", self.look_around)]
|
self.options: List[Option] = [Option("Look around", self.look_around)]
|
||||||
|
self.connections: List[Connection] = []
|
||||||
self.game = game
|
self.game = game
|
||||||
|
|
||||||
def look_around(self) -> None:
|
def look_around(self) -> None:
|
||||||
Text.print_header(self.name, HeaderStyle.ROUND)
|
Text.print_header(self.name, HeaderStyle.ROUND)
|
||||||
Text.type(f"{self.description}\n", 0.01, 0.1)
|
Text.type(f"{self.description}\n", 0.01, 0.1)
|
||||||
|
|
||||||
|
for connection in self.connections:
|
||||||
|
if not connection.discovered:
|
||||||
|
connection.discover()
|
||||||
|
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
def enter(self) -> None:
|
def enter(self) -> None:
|
||||||
Text.print_header(self.name, HeaderStyle.ROUND)
|
Text.print_header(self.name, HeaderStyle.ROUND)
|
||||||
print(f"You enter {self.name}.\n")
|
print(f"> You enter {self.name}.\n")
|
||||||
self.game.current_location = self
|
self.game.current_location = self
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
def connect_location(self, location) -> None:
|
def connect_location(self, location, hidden: bool = False) -> None:
|
||||||
self.options.append(Option(f"Enter {location.name}", location.enter))
|
connection: Connection = Connection(location, not hidden)
|
||||||
|
self.connections.append(connection)
|
||||||
|
|
||||||
|
def get_options(self) -> List[Option]:
|
||||||
|
all_options = []
|
||||||
|
for connection in self.connections:
|
||||||
|
if connection.discovered:
|
||||||
|
all_options.append(Option(f'Enter {connection.target_location.name}', connection.target_location.enter))
|
||||||
|
all_options.extend(self.options)
|
||||||
|
return all_options
|
||||||
|
|
||||||
|
|
||||||
class SafeZone(Location):
|
class SafeZone(Location):
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
@@ -48,3 +65,11 @@ class Shop(Location):
|
|||||||
def look_around(self) -> None:
|
def look_around(self) -> None:
|
||||||
print(f"You find yourself in a small shop called {self.name}.\n{self.description}")
|
print(f"You find yourself in a small shop called {self.name}.\n{self.description}")
|
||||||
|
|
||||||
|
class Connection:
|
||||||
|
def __init__(self, target_location: Location, discovered: bool = True) -> None:
|
||||||
|
self.target_location = target_location
|
||||||
|
self.discovered = discovered
|
||||||
|
|
||||||
|
def discover(self) -> None:
|
||||||
|
self.discovered = True
|
||||||
|
Text.type(f"> You discovered {self.target_location.name}")
|
||||||
Reference in New Issue
Block a user