-
Notifications
You must be signed in to change notification settings - Fork 0
/
war.py
90 lines (68 loc) · 1.98 KB
/
war.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
class Warrior:
attack = 150
health = 20
def real_attack(self, opp):
return opp.attack
def kick(self, war):
war.health -= self.real_attack(war)
def is_alive(self):
return not self.health <= 0
def show_status(self):
print('H:{}'.format(self.health))
class SuperWarrior(Warrior):
attack = 100
health = 100
class Mechnik(Warrior):
attack = 20
class Konnica(Warrior):
defence = 1
def real_attack(self, war):
real_attack = war.attack - self.defence
if real_attack > 0:
return real_attack
return 0
class Heler(Warrior):
attack = 1
health = 100
class Boss(Konnica):
attack = 100
class Army:
def __init__(self, cls, amount):
self.units = []
for i in range(amount):
self.units.append(cls())
class Battle:
def __init__(self, army1, army2):
self.army1 = army1
self.army2 = army2
def ww_fight(self, war1, war2):
kicker = war1
reciver = war2
while war1.is_alive() and war2.is_alive():
kicker.kick(reciver)
kicker, reciver = reciver, kicker
war1.show_status()
war2.show_status()
print('ROUND')
return war1.is_alive()
def fight(self):
army1 = self.army1
army2 = self.army2
while army1.has_units() and army2.has_units():
kicker = army1.get_first()
reciver = army2.get_first()
result = self.ww_fight(kicker, reciver)
if result:
army2.remove_unit()
else:
army1.remove_unit()
def fight(war1, war2):
kicker = war1
reciver = war2
while war1.is_alive() and war2.is_alive():
kicker.kick(reciver)
kicker, reciver = reciver, kicker
war1.show_status()
war2.show_status()
print('ROUND')
return war1.is_alive()