Basic game framework
This commit is contained in:
parent
19f91e8110
commit
b76db35b1b
1
.gitignore
vendored
1
.gitignore
vendored
@ -12,3 +12,4 @@
|
|||||||
# Built Visual Studio Code Extensions
|
# Built Visual Studio Code Extensions
|
||||||
*.vsix
|
*.vsix
|
||||||
|
|
||||||
|
/src/__pycache__/
|
@ -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
|
||||||
|
22
data.json
22
data.json
@ -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
50
src/game.py
Normal 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
5
src/interactable.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class Interactable:
|
||||||
|
def __init__(self, name, text):
|
||||||
|
self.name = name
|
||||||
|
self.text = text
|
||||||
|
|
9
src/inventory.py
Normal file
9
src/inventory.py
Normal 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
8
src/item.py
Normal 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
8
src/main.py
Normal 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
6
src/room.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class Room:
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name
|
||||||
|
self.is_start = False
|
||||||
|
self.doors = []
|
||||||
|
self.interactables = []
|
Loading…
Reference in New Issue
Block a user