-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathZork.py
158 lines (132 loc) · 4.59 KB
/
Zork.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
from random import randint
import json
state = {
"hp": 5,
"position": "Menue",
"dragonAlive": True,
"swordAvail": True,
"treasureAvail": True,
}
def ask_user(obj):
auswahlString = ""
auswahlNummer = 1
for key, value in obj.items():
print("%s) %s" % (auswahlNummer,value))
auswahlNummer = auswahlNummer + 1
auswahlString = input("-- ")
auswahlNummer = 1
for key, value in obj.items():
if auswahlString == "%d" % auswahlNummer:
return key
auswahlNummer += 1
return ask_user(obj)
def show_invetory():
print("Du hast %d Lebenspunkte." % state["hp"],
"Du hast ein Schwert." if not state["swordAvail"] else "",
"Du hast den Schatz." if not state["treasureAvail"] else "")
def save_game(choice, state):
if choice == "speichernBeenden":
with open('save.json', 'w') as fp:
fp.write(json.dumps(state))
return {**state, "hp": 0}
else:
return state
def spiel_menue(state):
class SpeichernFehler(Exception):
pass
choice = ask_user({"neuesSpiel": "Neues Spiel", "spielLaden": "Spiel laden"})
if choice == "neuesSpiel":
print("Spiel wird gestartet...") #Zusatzidee
return {**state, "position" : "Eingang"}
elif choice == "spielLaden":
try:
with open("save.json","r") as fp:
return json.loads("%s" %fp.read())
except json.decoder.JSONDecodeError:
raise SpeichernFehler("Der Speicherstand hat keinen Inhalt.")
return state
def room_eingang(state):
print("Du befindest dich im EINGANG.",
"Du kannst in die Schatzkammer oder zum Händler gehen.")
show_invetory()
choices = {
"schatzkammer": "Schatzkammer",
"handler": "Händler",
"speichernBeenden": "Speichern und Beenden"
}
if not state["treasureAvail"]:
choices["beenden"] = "Beenden"
choice = ask_user(choices)
if choice == "schatzkammer":
return {**state, "position": "Schatzkammer"}
elif choice == "handler":
return {**state, "position": "Handler"}
elif choice == "beenden":
return {**state, "hp": 0}
else:
return save_game(choice, state)
return state
def room_schatzk(state):
print("Du befindest dich in der SCHATZKAMMER."
" Du musst nun gegen den Drachen kämpfen,"
" indem du würfelst oder du gehst zurück.")
show_invetory()
choices = {
"schatzAufheben": "Schatz aufheben",
"drachenBekampfen": "Drachen bekämpfen",
"zurück": "Zurück",
"speichernBeenden": "Speichern und Beenden"
}
if state["dragonAlive"]:
del choices["schatzAufheben"]
elif not state["dragonAlive"] and state["treasureAvail"]:
del choices["drachenBekampfen"]
elif not state["dragonAlive"] and not state["treasureAvail"]:
del choices["drachenBekampfen"]
del choices["schatzAufheben"]
choice = ask_user(choices)
if choice == "drachenBekampfen":
randomint = randint(1, 6)
if ((randomint < 4 and not state["swordAvail"])
or (randomint == 6 and state["swordAvail"])):
print("Du hast den Drachen besiegt!")
return {**state, "dragonAlive": False}
else:
return {**state, "hp": state["hp"] - 1}
elif choice == "schatzAufheben":
print("Schatz aufgehoben!")
return {**state, "treasureAvail": False}
elif choice == "zurück":
return {**state, "position": "Eingang"}
elif choice == "speichernBeenden":
return save_game(choice, state)
return state
def room_handler(state):
print("Du befindest dich beim HÄNDLER.",
"Du kannst ein Schwert für einen Lebenspunkt kaufen oder zurück"
" gehen.")
show_invetory()
choices = {
"schwertKaufen" : "Schwert kaufen",
"zurück" : "Zurück",
"speichernBeenden" : "Speichern und Beenden"
}
if not state["swordAvail"]:
del choices["schwertKaufen"]
choice = ask_user(choices)
if choice == "schwertKaufen":
return {**state, "swordAvail": False}
elif choice == "zurück":
return {**state, "position" : "Eingang"}
elif choice == "speichernBeenden":
return save_game(choice, state)
return state
while state["hp"] > 0:
if state["position"] == "Menue":
state = spiel_menue(state)
elif state["position"] == "Eingang":
state = room_eingang(state)
elif state["position"] == "Schatzkammer":
state = room_schatzk(state)
elif state["position"] == "Handler":
state = room_handler(state)