简体   繁体   中英

Python Class Won't execute my function

So I made this code a little bit ago, but it won't use the check_level command or the award command when called:

from random import randint

class RPG:
    #Defines parts of your character
    def __init__(self, character_name):
        self.chrn = character_name
        self.exp = 0 #Total Experince points
        self.level = 1 #Total Level
        self.h = 25 #Player Health
        self.expn = 10 #Experience Needed
        self.eh = 10 #Base Enemy Health
        self.set = False #Used to chest enemy status
        self.win = False #Used to check for win

    def set_basic(self): # Sets up the basic enemy.
        if self.eh == 0:
            self.eh = 10

    def check_level(self): # Checks to see if you have enough EXP to level up.
        if self.exp >= self.expn:
            self.level = self.level + 1
            self.exp = 0
            self.expn = self.level * 10
            print('Level has increased to {0}'.format(self.level))


    def check_enemy(self): # Checks to see if enemy's health is equal to 0.
        if self.eh == 0:
            print('You Win')
            self.set == True
            RPG.set_basic(self)
        else:
            print('')

    def award(self): # Awards EXP if enemy is dead.
        if self.set == True:
            self.exp = self.exp + 5
            print ('You gained 5 EXP!')

    def attack(self): #The main character's attack.
        x = randint(1,100)
        if x > 20:
            y = randint(1, self.level * 3)
            self.eh = self.eh - y
            final = ('Enemy took {0} damage'.format(y))
            print(final)
            if self.eh < 0:
                self.eh = 0
            print('Enemy has {0} health left'.format(self.eh))
            print('')
            RPG.check_enemy(self)
            RPG.award(self)
            RPG.check_level(self)
        else:
            print('Miss!')

This:

RPG.check_enemy(self)
RPG.award(self)
RPG.check_level(self)

Should be:

self.check_enemy()
self.award()
self.check_level()

The self param is implied.

EDIT: actually any of your RPG.*(self) functions should be self.*() -- I see a few of them sprinkled throughout the class.

Samsquanch is correct about changing all your RPG.(self) method calls to self.*() . When you call a method, python will always pass the instance object as the first parameter. That way you can avoid having to explicitly call the method as you were doing previously. You can check out this link for some more detailed information on self .

I tested out your code and it looks like your problem lies within check_enemy() . You need to change self.set == True to self.set = True .

The new method should look like this

def check_enemy(self):
    if self.eh == 0:
        print('You Win')
        self.set = True
        self.set_basic()
    else:
        print('')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM