-
Notifications
You must be signed in to change notification settings - Fork 0
/
battleEngine.py
362 lines (293 loc) · 9.01 KB
/
battleEngine.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
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
import time
import random
global beastHealth
global attackOption
global runOption
global playerHealth
global monsterName
global monsterHealth
global monsterHealthxp
global xp
global playerHealthgain
global random_money
global money
global Sword
global BowAndArrow
global using_sword
global using_bow_and_arrow
global level
global bow_and_arrow_damage
global sword_damage
global xp_level
sword_damage = 0
bow_and_arrow_damage = 0
monsterName = "Beast"
monsterHealth = "8"
monsterHealthxp = 0
xp = 0
playerHealth = 20
playerHealthgain = 0
random_money = 0
money = 100
Sword = False
BowAndArrow = False
using_bow_and_arrow = False
using_sword = False
level = 1
xp_level = 1
# I defined monsterName as unknown so it could transfer to other functions,
# but monsterRandomize changes it before the battle.
# I did the same thing for monsterHealth and monsterHealthxp.
def xp_to_level():
global xp_level
global level
global xp
xp_add()
xp_level = xp_level + level * level
xp_level = xp_level * 100
while xp >= 100:
level = level + 1
xp = xp - 100
return level
def level_xp():
global level
return level
def monsterRandomize():
global monsterName
global monsterNameChoice
global monsterDamage
global monsterDamageChoice
global monsterHealth
global monsterHealthChoice
global monsterHealthxp
global playerHealthgain
global level
level = xp_to_level()
monsterHealthChoice = random.randint(7, 16)
monsterHealth = monsterHealthChoice + level
monsterNameChoice = random.randint(1, 4)
if monsterNameChoice == 1:
monsterName = "Beast"
elif monsterNameChoice == 2:
monsterName = "Spider"
elif monsterNameChoice == 3:
monsterName = "Wolf"
elif monsterNameChoice == 4:
monsterName = "Slime"
monsterHealthxp = monsterHealth
monsterHealthxp = monsterHealthxp * 10
playerHealthgain = monsterHealth
def monsterRandomizeDev(): # This is for returning the variables.
global monsterName
global monsterNameChoice
global monsterHealth
global monsterHealthChoice
global level
level = xp_to_level()
monsterHealthChoice = random.randint(7, 16)
monsterHealth = monsterHealthChoice + level
monsterNameChoice = random.randint(1, 4)
if monsterNameChoice == 1:
monsterName = "Beast"
elif monsterNameChoice == 2:
monsterName = "Spider"
elif monsterNameChoice == 3:
monsterName = "Wolf"
elif monsterNameChoice == 4:
monsterName = "Slime"
return monsterName, monsterNameChoice, monsterHealth, monsterHealthChoice
def monsterDamageDecide():
global monsterDamage
global monsterDamageChoice
global level
level = xp_to_level()
monsterDamageChoice = random.randint(1, 10)
if monsterDamageChoice < 10:
monsterDamage = random.randint(2, 5)
elif monsterDamageChoice == 10: # Monster critical hit, basically.
monsterDamage = random.randint(3, 7)
monsterDamage = monsterDamage + level
def monsterDamageDecideDev(): # This is for returning the variables.
global monsterDamage
global monsterDamageChoice
global level
level = xp_to_level()
monsterDamageChoice = random.randint(1, 10)
if monsterDamageChoice < 10:
monsterDamage = random.randint(2, 5)
elif monsterDamageChoice == 10: # Monster critical hit, basically.
monsterDamage = random.randint(3, 7)
monsterDamage = monsterDamage + level
def use_weapons():
global Sword
global BowAndArrow
global using_sword
global using_bow_and_arrow
if Sword == True and BowAndArrow == True:
weapons_choice = raw_input(
"Do you want to use bow and arrow or your sword?('sword' or 'bow and arrow')").lower()
if weapons_choice == "sword":
print"Using sword for this battle."
using_sword = True
elif weapons_choice == "bow and arrow":
print"Using bow and arrow for this battle."
using_bow_and_arrow = True
def battleInput():
global monsterHealth
global attackOption
global playerHealth
global runOption
global battleChoice # Renamed 'input1' to 'battleChoice' just to prevent confusion.
global monsterName
global monsterHealthxp
global xp
global playerHealthgain
global random_money
global using_sword
global using_bow_and_arrow
global bow_and_arrow_damage
global sword_damage
print(" ")
print("Your HP:")
print(playerHealth)
print(monsterName + " HP:")
print(monsterHealth)
print""
if playerHealth <= 3:
print"WARNING: You are running low on health."
print""
time.sleep(2)
print("Choices: attack, run")
print("What do you want to do? ")
battleChoice = raw_input("> ").lower()
if battleChoice == "run":
runChance = random.randint(0, 5)
if runChance >= 3:
print("You got away!")
time.sleep(1)
else:
print("Oh no! The " + monsterName + " caught you!")
time.sleep(1)
if monsterHealth >= 1:
monsterDamageDecide()
print(" ")
print("You took")
print(monsterDamage)
print("damage.")
if playerHealth < 1:
print""
print"GAME OVER -- You ran out of lives."
playerHealth = playerHealth - monsterDamage
time.sleep(1)
battleInput()
elif battleChoice == "attack":
critHitChance = random.randint(0, 10)
doubleDamage = random.randint(0, 10) # This is just something silly I added. Move along...
missHitChance = random.randint(0, 10)
attackDamage = random.randint(1, 4)
if Sword == True and BowAndArrow == True:
if using_sword == True:
attackDamage = attackDamage + 2 + sword_damage
elif using_bow_and_arrow == True:
attackDamage = attackDamage + 3 + bow_and_arrow_damage
elif Sword == True:
attackDamage = attackDamage + 2 + sword_damage
elif BowAndArrow == True:
attackDamage = attackDamage + 3 + bow_and_arrow_damage
else:
attackDamage = attackDamage + 1
if doubleDamage == 10:
attackDamage = attackDamage * 2
if missHitChance == 10:
print(monsterName + " dodged the attack.")
attackDamage = 0
monsterHealth = monsterHealth - attackDamage
if missHitChance < 10:
print(" ")
print(monsterName + " took")
print(attackDamage)
print("damage.")
if critHitChance == 10 and missHitChance < 10:
time.sleep(1)
attackDamage = attackDamage + 1
print("CRITICAL HIT! +1 Damage.")
if doubleDamage == 10:
time.sleep(1)
print("DOUBLE DAMAGE! x2 Damage.")
time.sleep(1)
if monsterHealth >= 1:
monsterDamageDecide()
print(" ")
print("You took")
print(monsterDamage)
print("damage.")
playerHealth = playerHealth - monsterDamage
if playerHealth < 1:
print""
print"GAME OVER -- You ran out of lives."
quit()
time.sleep(1)
battleInput()
else:
print("You defeated the " + monsterName + "!")
random_money = random.randint(50, 151)
print"You got " + str(monsterHealthxp) + " xp."
print"You got $" + str(random_money) + "."
xp = xp + monsterHealthxp
playerHealth = playerHealth + playerHealthgain
playerHealthgain = playerHealthgain - playerHealthgain
monster_money()
else:
print("Invalid command.")
time.sleep(1)
print(" ")
battleInput()
def playerHealthDev():
global playerHealth
return playerHealth
def xp_add():
global xp
return xp
def monster_money():
global random_money
global money
money = money + random_money
random_money = 0
return money
def sword_money():
global money
money = money - 100
def bow_and_arrow_money():
global money
money = money - 150
def Sword_change():
global Sword
Sword = True
def BowAndArrow_change():
global BowAndArrow
BowAndArrow = True
def weapons_return():
global Sword
global BowAndArrow
return Sword, BowAndArrow
def money_return():
global money
return money
def treasure():
global money
money_choice = random.randint(20, 40)
print"You found $" + str(money_choice) + " in a treasure chest!"
money = money + money_choice
def bow_and_arrow_upgrade():
global bow_and_arrow_damage
global money
money = money - 100
bow_and_arrow_damage = bow_and_arrow_damage + 1
def sword_upgrade():
global sword_damage
global money
money = money - 100
sword_damage = sword_damage + 1
def map_money():
global money
money = money - 200