From b76db35b1b4aa2f0f8e12ee7c47a04ea89da2f80 Mon Sep 17 00:00:00 2001 From: Enrico Ludwig Date: Wed, 7 Aug 2024 18:20:00 +0200 Subject: [PATCH] Basic game framework --- .gitignore | 1 + README.MD | 1 + data.json | 22 +++++++++++++++++++- src/game.py | 50 +++++++++++++++++++++++++++++++++++++++++++++ src/interactable.py | 5 +++++ src/inventory.py | 9 ++++++++ src/item.py | 8 ++++++++ src/main.py | 8 ++++++++ src/room.py | 6 ++++++ 9 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/game.py create mode 100644 src/interactable.py create mode 100644 src/inventory.py create mode 100644 src/item.py create mode 100644 src/main.py create mode 100644 src/room.py diff --git a/.gitignore b/.gitignore index 8c2b884..d9d97f0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ # Built Visual Studio Code Extensions *.vsix +/src/__pycache__/ \ No newline at end of file diff --git a/README.MD b/README.MD index db49894..1db39e4 100644 --- a/README.MD +++ b/README.MD @@ -33,6 +33,7 @@ In diesem Dokument sammeln wir Ideen zu unserem Stream Mini-Projekt. - Jeder Raum hat mindestens eine Tuer zu einem weiteren Raum - Ausnahme 1: Ein abgezweigter Raum, aus dem man aber zurueck kommt - Ausnahme 2: Der erste und letzte Raum im Spiel + - Jede Tuer hat die Information darueber, in welcher Himmelsrichtung sie liegt - Raeume koennen beleuchtet sein, oder Beleuchtung erfordern - Manche Tueren koennen einen passenden Schluessel erfordern - Manche Kisten koennen einen passenden Schluessel erfordern diff --git a/data.json b/data.json index 9e26dfe..494d213 100644 --- a/data.json +++ b/data.json @@ -1 +1,21 @@ -{} \ No newline at end of file +{ + "rooms": { + "entrance": { + "name": "Haupthalle", + "is_start": true, + "enter_text": "Du betrittst die Haupthalle. Nebst Spinnenweben und Staub findet sich jede Menge kaputter Moebel.", + "interactables": [], + "doors": [ + "laundry" + ] + }, + "laundry": { + "name": "Waschkueche", + "enter_text": "Dies hier scheint die Waschkueche zu sein ... zumindest deutet die uralte, benutzte Unterwaesche darauf hin.", + "interactables": [], + "doors": [ + "entrance" + ] + } + } +} \ No newline at end of file diff --git a/src/game.py b/src/game.py new file mode 100644 index 0000000..f025e51 --- /dev/null +++ b/src/game.py @@ -0,0 +1,50 @@ +import io +import os +import json +from inventory import Inventory +from room import Room +from interactable import Interactable + +class Game: + def __init__(self): + self.inventory = Inventory() + self.rooms = [] + + def load_game(self, file): + try: + with open(file, 'r') as f: + raw_game_data = f.read() + game_data = json.loads(raw_game_data) + + if 'rooms' in game_data: + for room_data in game_data['rooms']: + g_room = Room(room_data['name']) + g_room.doors = room_data['doors'] + g_room.interactables = [] + g_room.is_start = False + + if 'is_start' in room_data: + for r in self.rooms: + if r.is_start: + print(f"Error: {g_room.name} is marked as the starting room, but {r.name} is already marked as the starting room.") + os._exit(1) + + g_room.is_start = room_data['is_start'] + else: + g_room.is_start = False + + if 'interactables' in room_data: + for interactable in room_data['interactables']: + i = Interactable(interactable['name'], interactable['text']) + g_room.interactables.append(i) + + self.rooms.append(g_room) + + + except FileNotFoundError: + print("File not found.") + + def get_rooms(self): + if not self.game_data: + return None + diff --git a/src/interactable.py b/src/interactable.py new file mode 100644 index 0000000..dc1b2a3 --- /dev/null +++ b/src/interactable.py @@ -0,0 +1,5 @@ +class Interactable: + def __init__(self, name, text): + self.name = name + self.text = text + \ No newline at end of file diff --git a/src/inventory.py b/src/inventory.py new file mode 100644 index 0000000..f663e49 --- /dev/null +++ b/src/inventory.py @@ -0,0 +1,9 @@ +class Inventory: + def __init__(self): + self.items = [] + + def add_item(self, item): + self.items.append(item) + + def get_items(self): + return self.items \ No newline at end of file diff --git a/src/item.py b/src/item.py new file mode 100644 index 0000000..7e6df88 --- /dev/null +++ b/src/item.py @@ -0,0 +1,8 @@ +class Item: + def __init__(self, name, description): + self.name = name + self.description = description + self.is_key = False + + def __str__(self): + return f"Item: {self.name}" diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..eced2bb --- /dev/null +++ b/src/main.py @@ -0,0 +1,8 @@ +from game import Game + +def main(): + game = Game() + game.load_game('data.json') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/src/room.py b/src/room.py new file mode 100644 index 0000000..71977a8 --- /dev/null +++ b/src/room.py @@ -0,0 +1,6 @@ +class Room: + def __init__(self, name): + self.name = name + self.is_start = False + self.doors = [] + self.interactables = [] \ No newline at end of file