Posts: 27
Threads: 8
Joined: Sep 2017
Sep-19-2017, 10:08 AM
(This post was last modified: Sep-19-2017, 02:21 PM by buran.)
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 :
Output: Name = Excalibur
Dammage range = 50-120
Dps = 1850
Nb gems = 1
Golden gem:
+100 dmg, +0 speed, +0 range.
im stuck, any help ?
thanks!
Posts: 4,220
Threads: 97
Joined: Sep 2016
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.
Posts: 27
Threads: 8
Joined: Sep 2017
Sep-19-2017, 02:20 PM
(This post was last modified: Sep-19-2017, 02:30 PM by haye.)
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
Output: excalibur = Sword('Excalibur', 10, 50, 120, "50-120", 1)
gold_gem = Gem("Golden gem", 100)
excalibur.infos()
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
Posts: 8,160
Threads: 160
Joined: Sep 2016
(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
Posts: 27
Threads: 8
Joined: Sep 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) Output: Name = Excalibur
Damage range = 50-120
Dps = 850
Nb gems = 1
Golden gem: 0
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
Posts: 4,220
Threads: 97
Joined: Sep 2016
Quote:damage = damage + 100
That's basically how you code it.
Posts: 27
Threads: 8
Joined: Sep 2017
i mean where in my code and how ?
thanks.
Posts: 4,220
Threads: 97
Joined: Sep 2016
You would do that in Sword.__init__, after it calls Weapon.__init__ using super.
|