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()```