weapon creation - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: weapon creation (/thread-5106.html) |
weapon creation - haye - Sep-19-2017 Hello, I have to create a " weapon " with name, damage speed, range, damage/second, and the damage would change if the weapon has a gem.. here is the starter code i have: class Weapon(object): [...] class Sword(Weapon): def __init__(self, name='sword', speed=1, dmg_min=1, dmg_max=1, wrange=1, gems=, gems_nb=0): super(Sword, self).__init__(speed=speed, dmg_min=dmg_min, dmg_max=dmg_max, wrange=wrange) self.gems = gems self.gems_nb = gems_nb self.name = name return class Gem(object): [...] def infos(self): print "Name = {}".format(self.name) print "Damage range = {}".format() print "Dps = {}".format() print "Nb gems = {}".format() print "Golden gem: {}".format() excalibur = Sword('Excalibur', 10, 50, 120, 4) gold_gem = Gem("Golden gem", 100) excalibur.add_gem(gold_gem) excalibur.infos()It has to print : im stuck, any help ?thanks! RE: weapon creation - ichabod801 - Sep-19-2017 The requirements are not clear. Are you being given the Weapon class and you need to write the Sword subclass yourself, or do you need to write both classes? One problem I see is that you need a close parens at the end of line 6. RE: weapon creation - haye - Sep-19-2017 Hi, thanks for your answer, here is my new code : class Weapon(object): def __init__(self, name, speed, dmg_min, dmg_max, wrange, gems_nb): self.name = name self.speed = speed self.dmg_min = dmg_min self.dmg_max = dmg_max self.wrange = wrange self.gems_nb = gems_nb def infos(self): print "Name = {}".format(self.name) print "Damage range = {}".format(self.wrange) print "Dps = {}".format((self.dmg_min + self.dmg_max) / 2 * self.speed) print "Nb gems = {}".format(self.gems_nb) print "Golden gem: {}".format(0) class Sword(Weapon): def __init__(self, name='sword', speed=None, dmg_min=None, dmg_max=None, wrange=None, gems_nb=None, gems=[]): super(Sword, self).__init__(name, speed, dmg_min, dmg_max, wrange, gems_nb) self.gems = gems self.gems_nb = gems_nb class Gem(object): def __init__(self, name, gems): return excalibur = Sword('Excalibur', 10, 50, 120, "50-120", 1) gold_gem = Gem("Golden gem", 100) excalibur.infos()class Weapon(object): def __init__(self, name, speed, dmg_min, dmg_max, wrange, gems_nb): self.name = name self.speed = speed self.dmg_min = dmg_min self.dmg_max = dmg_max self.wrange = wrange self.gems_nb = gems_nb def infos(self): print "Name = {}".format(self.name) print "Damage range = {}".format(self.wrange) print "Dps = {}".format((self.dmg_min + self.dmg_max) / 2 * self.speed) print "Nb gems = {}".format(self.gems_nb) print "Golden gem: {}".format(0) class Sword(Weapon): def __init__(self, name='sword', speed=None, dmg_min=None, dmg_max=None, wrange=None, gems_nb=None, gems=[]): super(Sword, self).__init__(name, speed, dmg_min, dmg_max, wrange, gems_nb) self.gems = gems self.gems_nb = gems_nb class Gem(object): def __init__(self, name, gems): return but actually the new problem is that my " excalibur " should have one gem, and one gem means damage = damage + 100(so, dmg_min would be 150 instead of 50 and dmg_max should be 220 instead of 120) and the "dps" output would be "dps : 1850 "instead of "dps = 850", that it was i want from the start and i have no idea how to code that thanks for help RE: weapon creation - buran - Sep-19-2017 (Sep-19-2017, 02:11 PM)ichabod801 Wrote: One problem I see is that you need a close parens at the end of line 6.That's my fault when adding python code and proper indentation... Fixed now RE: weapon creation - haye - Sep-19-2017 sorry, i failed my last answer, i correct it : class Weapon(object): def __init__(self, name, speed, dmg_min, dmg_max, wrange, gems_nb): self.name = name self.speed = speed self.dmg_min = dmg_min self.dmg_max = dmg_max self.wrange = wrange self.gems_nb = gems_nb def infos(self): print "Name = {}".format(self.name) print "Damage range = {}".format(self.wrange) print "Dps = {}".format((self.dmg_min + self.dmg_max) / 2 * self.speed) print "Nb gems = {}".format(self.gems_nb) print "Golden gem: {}".format(0) class Sword(Weapon): def __init__(self, name='sword', speed=None, dmg_min=None, dmg_max=None, wrange=None, gems_nb=None, gems=[]): super(Sword, self).__init__(name, speed, dmg_min, dmg_max, wrange, gems_nb) self.gems = gems self.gems_nb = gems_nb class Gem(object): def __init__(self, name, gems): return excalibur = Sword('Excalibur', 10, 50, 120, "50-120", 1) gold_gem = Gem("Golden gem", 100) excalibur.infos() # excalibur.add_gem(gold_gem) but actually the new problem is that my " excalibur " should have one gem, and one gem means damage = damage + 100(so, dmg_min would be 150 instead of 50 and dmg_max should be 220 instead of 120) and the "dps" output would be "dps : 1850 "instead of "dps = 850", that it was i want from the start and i have no idea how to code that thanks for help sorry for the new answer RE: weapon creation - ichabod801 - Sep-19-2017 Quote:damage = damage + 100 That's basically how you code it. RE: weapon creation - haye - Sep-19-2017 i mean where in my code and how ? thanks. RE: weapon creation - ichabod801 - Sep-19-2017 You would do that in Sword.__init__, after it calls Weapon.__init__ using super. |