forked from natelee3/the_covid_trail
-
Notifications
You must be signed in to change notification settings - Fork 0
/
events.py
260 lines (230 loc) · 10.2 KB
/
events.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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
from assets import game_over
from combat import combat
from numpy.random import choice, rand
from pygame import mixer
mixer.init()
mixer.music.set_volume(0.1)
# Negative Events
SICKNESS = 'sickness'
ROAD_CLOSURE = 'road_closure'
CELL_TOWER_OUTAGE = 'cell_tower_outage'
COMBAT = 'combat'
CAR_BREAKDOWN = 'car_breakdown'
ASTEROID = 'asteroid'
CHINESE_ROCKET = 'chinese_rocket'
# Positive Events
WANDERING_MERCHANT = 'wandering_merchant'
EVENT_CONSTANT = 30
def sound(file):
sound = mixer.Sound("audio/%s" % file)
return mixer.Sound.play(sound)
# COVID strikes, costs medical supplies, reduced by doctor
def sickness_event(party):
print("COVID strikes!!")
# Check to see if party's doctor is present
if party.is_alive("doctor"):
if party.used_ability("doctor"):
print("Oh no!! Your doctor has already used their special ability.")
covid_strike_helper(party)
else:
# ask if they want to use it
print("Your doctor can use their special power to save you all. Would you like to use the doctor's special power? (Y/N) ")
# validation loop
while True:
choice = input(">>> ")
if choice.upper() == "Y":
print("You have used your doctor's special power. You will not be able to use their power again.")
# set ability used to true, cannot use again
party.use_ability("doctor")
break
elif choice.upper() == "N":
covid_strike_helper(party)
break
else:
print("Please enter Y or N.")
else:
# Doctor is dead
print("Your doctor is dead and cannot save your party.")
covid_strike_helper(party)
# helper function to help reduce code in sickness event function
def covid_strike_helper(party):
if party.hand_sanitizer >= EVENT_CONSTANT:
print("Your party had to use %d of your hand sanitizer to avoid getting sick." % (EVENT_CONSTANT))
party.hand_sanitizer -= EVENT_CONSTANT
else:
print("Since your party does not have enough hand sanitizer to protect yourselves, you are all sick. Your health will decrease at a faster rate.")
# set party to sick
party.sick_party()
# Road closed/detour, costs extra fuel - reduced by engineer
def road_closure_event(party):
print("Road closure! You must take a detour. This will cost extra fuel.")
# Check to see if engineer is present
if party.is_alive("engineer"):
# Check to see if engineer has used ability or not
if party.used_ability("engineer"):
print("Oh no!! Your engineer has already used their special ability.")
road_closure_helper(party)
else:
# ask if they want to use special ability
print("Your engineer can use their special power to fuel up the car and save you all. Would you like to use your engineer's special power? (Y/N) ")
# validation loop
while True:
choice = input(">>> ")
if choice.upper() == "Y":
print("You have used your engineer's special power. You will not be able to use their power again.")
# change ability used to true, party cannot use ablility again
party.use_ability("engineer")
break
elif choice.upper() == "N":
road_closure_helper(party)
break
else:
print("Please enter Y or N.")
else:
# Doctor is dead
print("Your engineer is dead and cannot save your party.")
road_closure_helper(party)
def road_closure_helper(party):
if party.fuel >= EVENT_CONSTANT:
party.fuel -= EVENT_CONSTANT
print("%d of your fuel was used to avoid being stranded." % (EVENT_CONSTANT))
else:
print("You do not have enough fuel. Your party is stranded.")
party.fuel -= EVENT_CONSTANT
game_over()
# Reduced morale, costs extra phone charge - reduced by DJ
def cell_tower_outage(party):
print("There is a cell tower down in your area. You don't have signal. Your influencer cannot survive without cell service and dies.")
# Kill influencer
party.party_members[3].health = 0
print("The rest of your party can be saved.")
# check to see if DJ is alive
if party.is_alive("dj"):
# check if the DJ has used special power
if party.used_ability("dj"):
print("Oh no!! Your DJ has already used their special ability.")
cell_tower_outage_helper(party)
else:
# ask if they want to use special ability
print("Your DJ can use their special power to save you all from deathly low morale. Would you like to use your DJ's special power? (Y/N) ")
# validation loop
while True:
choice = input(">>> ")
if choice.upper() == "Y":
print("You have used your DJ's special power. You will not be able to use their power again.")
# change ability used to true, party cannot use ablility again
party.use_ability("dj")
break
elif choice.upper() == "N":
road_closure_helper(party)
break
else:
print("Please enter Y or N.")
else:
print("Your DJ is dead and cannot save your party.")
def cell_tower_outage_helper(party):
if party.phone_charge >= EVENT_CONSTANT:
party.phone_charge -= EVENT_CONSTANT
print("%d of your phone charge was used to avoid decreasing morale to a deathly level." % (EVENT_CONSTANT))
else:
print("You do not have enough phone charge.")
party.phone_charge -= EVENT_CONSTANT
# Random enemies that your party, loot extra supplies
def car_breakdown(party):
print("Your car has broken down... the only thing that can save you is your engineer's special ability to fix the car. Otherwise, your party will not make it.")
if party.is_alive("engineer"):
if party.used_ability("engineer"):
print("Your engineer has already used their ability. Game over.")
party.fuel = 0
else:
print("Yay!!! Your engineer has come to the rescue. Your car is now fixed and your party can continue on your journey.")
else:
print("Your engineer is dead. Game over.")
party.fuel = 0
game_over()
def asteroid(party):
sound("explosion.wav")
print("A HUGE asteroid has fallen on your party. There were no survivors. Game over.")
kill_party(party)
def chinese_rocket(party):
sound("missile.wav")
print("China's rocket fell out of the sky and landed on your party!! None of you survived. Game over.")
kill_party(party)
def wandering_merchant(party):
print("You come across a wandering merchant. This merchant is selling special items that will act like a party member's special ability. You may choose to buy one item from the merchant.")
party.print_party_status()
print("Your party has $%d available." % (party.money))
print("""
><><><><><><><><><>><><><><><><><><><><><><><><
What would you like to purchase? (1-5)
-----------------------------------------------
[ 1 ] Doctor's ability $100
[ 2 ] Engineer's ability $100
[ 3 ] Hunter's ability $100
[ 4 ] DJ's ability $100
[ 5 ] Receive $100
------------------------------------------------
><><><><><><><><><><><><><><><><><><><><><><><><
""")
while True:
choice = input(">>> ")
if choice == "1":
if party.used_ability("doctor"):
party.refresh_ability("doctor")
print("Doctor's ability has been restored.")
break
else:
print("The doctor still has their ability. Please choose another character or choose to receive $100.")
elif choice == "2":
if party.used_ability("engineer"):
party.refresh_ability("engineer")
print("Engineer's ability has been restored.")
break
else:
print("The engineer still has their ability. Please choose another character or choose to receive $100.")
elif choice == "3":
if party.used_ability("hunter"):
party.refresh_ability("hunter")
print("Hunter's ability has been restored.")
break
else:
print("The hunter still has their ability. Please choose another character or choose to receive $100.")
elif choice == "4":
if party.used_ability("dj"):
party.refresh_ability("dj")
print("DJ's ability has been restored.")
break
else:
print("The DJ still has their ability. Please choose another character or choose to receive $100.")
elif choice == "5":
party.money += 100
sound("cash.wav")
print("You party is now $100 richer!")
break
else:
print("Please enter a number between 1 and 5.")
# function to set all party members health to 0 aka killing them
def kill_party(party):
party_members = party.party_members
for member in party_members:
member.health = 0
game_over()
# Event function reference dictionary
events = {
SICKNESS: sickness_event,
ROAD_CLOSURE: road_closure_event,
CELL_TOWER_OUTAGE: cell_tower_outage,
COMBAT: combat,
CAR_BREAKDOWN: car_breakdown,
ASTEROID: asteroid,
CHINESE_ROCKET: chinese_rocket,
WANDERING_MERCHANT: wandering_merchant
}
def generate_random_event(party):
# List of Events
list_of_events = [SICKNESS, ROAD_CLOSURE, CELL_TOWER_OUTAGE, COMBAT, CAR_BREAKDOWN, ASTEROID, CHINESE_ROCKET, WANDERING_MERCHANT]
# Probability of each event happening
distribution_of_events = [0.175, 0.175, 0.175, 0.2, 0.05, 0.025, 0.025, 0.175]
random_event = choice(list_of_events, 1, p=distribution_of_events)
random_event = random_event[0]
events[random_event](party)