Python Forum

Full Version: weapon creation
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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!
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.
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
(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
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
Quote:damage = damage + 100

That's basically how you code it.
i mean where in my code and how ?
thanks.
You would do that in Sword.__init__, after it calls Weapon.__init__ using super.