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
|
||||
*.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
|
||||
- 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
|
||||
|
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