Basic game framework

This commit is contained in:
Enrico Ludwig 2024-08-07 18:20:00 +02:00
parent 19f91e8110
commit b76db35b1b
9 changed files with 109 additions and 1 deletions

1
.gitignore vendored
View File

@ -12,3 +12,4 @@
# Built Visual Studio Code Extensions # Built Visual Studio Code Extensions
*.vsix *.vsix
/src/__pycache__/

View File

@ -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 - Jeder Raum hat mindestens eine Tuer zu einem weiteren Raum
- Ausnahme 1: Ein abgezweigter Raum, aus dem man aber zurueck kommt - Ausnahme 1: Ein abgezweigter Raum, aus dem man aber zurueck kommt
- Ausnahme 2: Der erste und letzte Raum im Spiel - 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 - Raeume koennen beleuchtet sein, oder Beleuchtung erfordern
- Manche Tueren koennen einen passenden Schluessel erfordern - Manche Tueren koennen einen passenden Schluessel erfordern
- Manche Kisten koennen einen passenden Schluessel erfordern - Manche Kisten koennen einen passenden Schluessel erfordern

View File

@ -1 +1,21 @@
{} {
"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"
]
}
}
}

50
src/game.py Normal file
View File

@ -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

5
src/interactable.py Normal file
View File

@ -0,0 +1,5 @@
class Interactable:
def __init__(self, name, text):
self.name = name
self.text = text

9
src/inventory.py Normal file
View File

@ -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

8
src/item.py Normal file
View File

@ -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}"

8
src/main.py Normal file
View File

@ -0,0 +1,8 @@
from game import Game
def main():
game = Game()
game.load_game('data.json')
if __name__ == '__main__':
main()

6
src/room.py Normal file
View File

@ -0,0 +1,6 @@
class Room:
def __init__(self, name):
self.name = name
self.is_start = False
self.doors = []
self.interactables = []