File size: 2,157 Bytes
a3e5f70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from game_data import MONSTER_DATA, ATTACK_DATA
from random import randint

class Monster:
	def __init__(self, name, level):
		self.name, self.level = name, level
		self.paused = False

		# stats 
		self.element = MONSTER_DATA[name]['stats']['element']
		self.base_stats = MONSTER_DATA[name]['stats']
		self.health = self.base_stats['max_health'] * self.level
		self.energy = self.base_stats['max_energy'] * self.level
		self.initiative = 0
		self.abilities = MONSTER_DATA[name]['abilities']
		self.defending = False

		# experience
		self.xp = 0
		self.level_up = self.level * 150
		self.evolution = MONSTER_DATA[self.name]['evolve']

	def __repr__(self):
		return f'monster: {self.name}, lvl: {self.level}'

	def get_stat(self, stat):
		return self.base_stats[stat] * self.level

	def get_stats(self):
		return {
			'health': self.get_stat('max_health'),
			'energy': self.get_stat('max_energy'),
			'attack': self.get_stat('attack'),
			'defense': self.get_stat('defense'),
			'speed': self.get_stat('speed'),
			'recovery': self.get_stat('recovery'),
		}

	def get_abilities(self, all  = True):
		if all:
			return [ability for lvl, ability in self.abilities.items() if self.level >= lvl]
		else:
			return [ability for lvl, ability in self.abilities.items() if self.level >= lvl and ATTACK_DATA[ability]['cost'] < self.energy]

	def get_info(self):
		return (
			(self.health, self.get_stat('max_health')),
			(self.energy, self.get_stat('max_energy')),
			(self.initiative, 100)
			)

	def reduce_energy(self, attack):
		self.energy -= ATTACK_DATA[attack]['cost']

	def get_base_damage(self, attack):
		return self.get_stat('attack') * ATTACK_DATA[attack]['amount']

	def update_xp(self, amount):
		if self.level_up - self.xp > amount:
			self.xp += amount
		else:
			self.level += 1
			self.xp = amount - (self.level_up - self.xp)
			self.level_up = self.level * 150

	def stat_limiter(self):
		self.health = max(0, min(self.health, self.get_stat('max_health')))
		self.energy = max(0, min(self.energy, self.get_stat('max_energy')))

	def update(self, dt):
		self.stat_limiter()
		if not self.paused:
			self.initiative += self.get_stat('speed') * dt