I am creating a basic OOP program for one of my modules at college. I am making a simple CLI RPG game using python. For a few classes I will be overloading all of the parent class's functions and I'm not sure whether I should be using polymorphism in these cases.
Example:
class character():
def __init__(self, name, hp, level, defense, damage):
self.hp = hp + (10 * level)
self.name = name
self.level = level
self.defense = defense + (10 * level)
self.damage = damage + (10 * level)
self.target = None
self.invetory = []
def attack(self, target):
hit_chance = random.random()
print '%s %s attacked %s %s' % (self.__class__.__name__, self.name, target.__class__.__name__, target.name)
if self.target == None:
self.target = target
if hit_chance <= 0.2:
print '%s %ss\' attack missed \n' % (self.__class__.__name__, self.name)
return
target.attacked(self.damage, self)
self.fighting()
def attacked(self, wound, attacker):
wound = wound - float(self.defense) / 100 * random.randint(30, 60)
self.hp = self.hp - wound
print '%s %s took %s points of damage from %s %s' % (self.__class__.__name__, self.name, wound, attacker.__class__.__name__, attacker.name)
if self.target == None:
self.target=attacker
if self.hp <= 0:
print '%s has been defeated. %s is victorious!' % (self.name, attacker.name)
attacker.victory(self.level)
del self
return
print '%s %ss\' hp fell to %s\n' % (self.__class__.__name__, self.name, self.hp)
def fighting(self):
threading.Timer(5.0, fighting).start()
if self.target:
attack(self.target)
if self.target.hp <= 0:
self.target = None
time.sleep(2)
class player(character):
def __init__(self, name):
self.level = 1
self.max_hp = 100 + 10 * self.level
self.hp = self.max_hp
self.name = name
self.defense = 10 * self.level
self.damage = 10 * self.level
self.target = None
self.inventory = ['bronze_dagger']
self.xp = 0
self.gold = 0
self.weapon = bronze_sword
def victory(self, level):
self.xp = self.xp + ((level - self.level) * 20 + random.randint(10, 50))
self.gold = level * random.randint(1, 100)
self.hp = self.max_hp
if self.xp >= self.level * 100:
self.level_up()
def attacked(self, wound, attacker):
wound = wound - float(self.defense) / 100 * random.randint(40, 60)
self.hp = self.hp - wound
print '%s %s took %s points of damage from %s %s' % (self.__class__.__name__, self.name, wound, attacker.__class__.__name__, attacker.name)
if self.hp <= 0:
print 'You have been defeated by %s!\nGAME OVER!' % (attacker.name)
del self
return
print '%s %ss\' hp fell to %s\n' % (self.__class__.__name__, self.name, self.hp)
def level_up(self):
self.xp = 0
self.level = self.level + 1
self.hp = 100 + 10 * self.level
self.defense = 10 * self.level
self.damage = 10 * self.level
print '%s %s has reached level %s!' % (self.__class__.__name__, self.name, self.level)
As you can see the player class overloads all of the character class's functions and adds more functions.