-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmonster.py
129 lines (101 loc) · 4.1 KB
/
monster.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
from colorama import init, Fore, Back, Style
from randommonstername import RandomMonsterName
from items import Items
import random, time,sys
from random import uniform
from stringhandler import Stringhandler
class Monster(object):
def __init__(self):
name = RandomMonsterName()
self.fullName = name.getFullName()
self.shortName = name.getShortName()
self.hp = 10
self.strength = 1
self.killed = False
self.hasLoot = False
self.level = 1
self.item = Items()
self.Loot = self.item.randomWeapon(self.level)
self.handler = Stringhandler()
def getFullName(self):
return self.fullName
def getShortName(self):
return self.shortName
def is_alive(self):
if self.hp > 0:
return True
else:
self.killed = True
return self.killed
def takeDamage(self, damage,player):
self.hp -= damage
string = '"'+self.handler.strMonster("hit",self,player)+'"\n'
for char in string:
time.sleep(uniform(0.05, 0.08))
sys.stdout.write('\033[32m'+'\033[1m'+char)
sys.stdout.flush()
print Fore.WHITE
time.sleep(0.5)
def getHP(self):
return self.hp
def getLoot(self):
return self.Loot
def setLoot(self,value):
self.Loot = self.item.randomWeapon(value)
def kill(self):
self.killed = True
def calcDamage(self):
damage = self.strength + random.randint(0,3)
return damage
def setup(self,difficulty,player_level):
self.killed = False
if difficulty is 1:
self.hp = player_level + random.randint(10,25)
self.strength = player_level + random.randint(1,9)
rnd = random.randint(0,10)
if rnd > 3:
self.hasLoot = True
self.level = random.randint(1,10)
self.setLoot(self.level)
else:
self.hp = player_level + random.randint(15,35)
self.strength = player_level + random.randint(5,15)
rnd = random.randint(0,10)
if rnd > 7:
self.hasLoot = True
self.level = random.randint(1,6)
self.setLoot(self.level)
def attackPlayer(self,room,player,damage):
return player.takeDamage(damage,room.monster)
def attack(self,room,player):
damage = player.getStrength()+random.randint(0,3)
damageplayer = self.calcDamage()
if (self.hp - damage <= 0):
room.killMonster()
player.facesMonster = False
if self.hasLoot:
return self.handler.strMonster("killedLoot",self,player)+"\n"+player.addItem(self.getLoot())
else:
return self.handler.strMonster("killed",self,player)
elif player.hp - damageplayer <=0:
return "\n"+self.attackPlayer(room,player,damageplayer)
else:
self.takeDamage(damage,player)
return self.handler.strMonsterDamage("getAttacked",self,damage,player) +"\n"+\
self.handler.strMonsterDamage("returnHP",self,damage,player) +"\n"+self.attackPlayer(room,player,damageplayer)
def flee(self, room, player):
player.facesMonster = False
damage = self.calcDamage()
if damage < 5:
return self.handler.strMonster("flee",room.monster,player) +" "+ self.handler.strMonster("fleeSuccess",room.monster,player)
else:
return self.handler.strMonster("flee",room.monster,player) +" "+ self.handler.strMonster("fleeFail",room.monster,player) +"\n" + player.takeDamage(damage,room.monster)
def spawn(self,room,player):
if room.hasMonster:
if not self.killed and player.facesMonster:
response="something went wrong"
return response
elif room.hasMonster and not self.killed :
player.facesMonster = True
damage = self.calcDamage()
return self.handler.strMonsterDamage("spawn",self,damage,player)+"\n"+player.takeDamage(damage,room.monster)