0

I am coding a small project in Python currently that has a basic turn based combat system in it. When I run my code it runs the Combat() function but for some reason skips over the if statements within it meaning that the player doesn't get to take an action. I have put some print statements within the code to check if it's just the if statements that are being skipped and can confirm that they are the only ones being skipped. I also tried adjusting the indentation by a block to the left and the right and that didn't seem to work. (Though I could've just made a mistake there, the indentation stuff is weird to get the hang of for a new programmer) The minimum amount of code so that you can test the code yourself is below. Sorry if it's a lot, the whole program is connected up and I tried to remove as much as I could that isn't relevant and wouldn't cause an other errors

    def __init__(self, **kwargs):
        self._STR = kwargs['STR']
        self._MAG = kwargs['MAG']
        self._DEF = kwargs['DEF']
        self._RES = kwargs['RES'] 
        self._INT = kwargs['INT'] 
        self._WIS = kwargs['WIS'] 
        self._HP = kwargs['HP'] 
        self._MP = kwargs['MP'] 
        self._Weapon = kwargs['Weapon'] 
        self._MagicS1 = kwargs['MagicS1'] 
        self._MagicS2 = kwargs['MagicS2'] 
        self._Equipment = kwargs['Equipment'] 
        self._Item = kwargs['Item'] 
        self._Money = kwargs['Money'] 
        
    def STR(self, s = None):
            if s: self._STR = s
            return self._STR
    def MAG(self, m = None):
            if m: self._MAG = m
            return self._MAG
    def DEF(self, d = None):
            if d: self._DEF = d
            return self._DEF
    def RES(self, r = None):
            if r: self._RES = r
            return self._RES
    def INT(self, i = None):
            if i: self._INT = i
            return self._INT
    def WIS(self, w = None):
            if w: self._WIS = w
            return self._WIS
    def HP(self, h = None):
            if h: self._HP = h
            return self._HP
    def MP(self, mp = None):
            if mp: self._MP = mp
            return self._MP
    def Weapon(self, we = None):
            if we: self._Weapon = we
            return self._Weapon
    def MagicS1(self, m1 = None):
            if m1: self._MagicS1 = m1
            return self._MagicS1
    def MagicS2(self, m2 = None):
            if m2: self._MagicS2 = m2
            return self._MagicS2
    def Equipment(self, e = None):
            if e: self._Equipment = e
            return self._Equipment
    def Item(self, i = None):
            if i: self._Item = i
            return self._Item
    def Money(self, mon = None):
            if mon: self._Money = mon
            return self._Money

    def __str__(self):
            return f'STR: "{self.STR()}" MAG: "{self.MAG()}" DEF: "{self.DEF()}" RES: "{self.RES()}" INT: "{self.INT()}" WIS: "{self.WIS()}" HP: "{self.HP()}" MP: "{self.MP()}"'

def main(): 
    Player = Character(STR = 6, MAG = 1, DEF = 4, RES = 1, INT = 2, WIS = 3, HP = 10, MP = 2, Weapon = "Rusted Dagger", MagicS1 = "None", MagicS2 = "None", Equipment = "Battered Shield", Item = "Lesser Healing Potion", Money = 10)
    if Player._Weapon == 'Rusted Dagger':
        Player._STR = Player._STR + 1
            
    if Player._Equipment == 'Battered Shield':
        Player._DEF = Player._DEF + 1
    
    Goblin = Character(STR = 4, MAG = 0, DEF = 2, RES = 1, INT = 1, WIS = 1, HP = 6, MP = 0, Weapon = "None", MagicS1 = "None", MagicS2 = "None", Equipment = "None", Item = "None", Money = 3)
    Combat(Player, Goblin)
    
def Combat(Player, Enemy):
    PCurrentHP = Player._HP
    PCurrentMP = Player._MP
    ECurrentHP = Enemy._HP
    ECurrentMP = Enemy._MP
    Guarding = "No"
    ItemUsed = "No"
    print("TEST COMBAT FOR MECHANICAL CHECKING'S SAKE: GOBLIN VERSION")
    print(Player)
    print(Enemy)
    print("Encountered Goblin!")
    while PCurrentHP > 0 and ECurrentHP > 0:
        print('Player HP: {}'.format(PCurrentHP))
        print('Enemy HP: {}'.format(ECurrentHP))
        print("1-Attack")
        print("2-Magic")
        print("3-Item")
        print("4-Defend")
        choice = input()
        print(choice)
        if choice == 1:
            damage = Player._STR - Enemy._DEF
            if damage < 1:
                damage = 1
            ECurrentHP = ECurrentHP - damage
            print('Enemy takes {} damage!'.format(damage))
        print('after if 1')
        if choice == 2:
            if Player._MagicS1 == 'None' and Player.MagicS2 == 'None':
                print("You have no magic!")
            else:
                print("Choose Magic Attack:")
                print("Fire: 3 might, costs 2MP")
                print("Lightning: 6 might, costs 4MP")
                mchoice = input()
                if mchoice == 'Fire' or mchoice != 'Lightning':
                    damage = Player._MAG + 3 - Enemy._RES
                    if damage < 1:
                        damage = 1
                    ECurrentHP = ECurrentHP - damage
                    PCurrentMP = PCurrentMP - 2
                    print('Enemy takes {} damage!'.format(damage))
                if mchoice == 'Lightning':
                    damage = Player._MAG + 6 - Enemy._RES
                    if damage < 1:
                        damage = 1
                    ECurrentHP = ECurrentHP - damage
                    PCurrentMP = PCurrentMP - 4
                    print('Enemy takes {} damage!'.format(damage))
        print('after if 2')
        if choice == 3:
            print("You chug a lesser healing potion, 3HP healed!")
            PCurrentHP = PCurrentHP + 3
            if PCurrentHP > Player._HP:
                PCurrentHP = Player._HP
        print('after if 3')
        if choice == 4:
            Guarding = "Yes"
        print('after if 4')
        print("The enemy attacks!")
        if Guarding == "No":
            edamage = Enemy._STR - Player._DEF
            if edamage < 1:
                edamage = 1
            PCurrentHP = PCurrentHP - edamage
            print('Player takes {} damage!'.format(edamage))
        else:
            edamage = Enemy._STR - (Player._DEF * 2)
            if edamage < 1:
                edamage = 0
            PCurrentHP = PCurrentHP - edamage
    
    if PCurrentHP <= 0:
        print("Player lost combat")
    else:
        print("Enemy lost combat")
if __name__ == '__main__': main()```
Anthony
  • 23
  • 2

0 Answers0