0
import random


class Character:
    def __init__(self, name, hp, attack, dodge):
        self.name = name
        self.hp = hp
        self.attack = attack
        self.dodge = dodge
    
    def take_damage(self, damage):
        self.hp -= damage
    
    def attack(self, target):
        damage = self.attack
        target.take_damage(damage)
        print(f"{self.name} attacks {target.name} for {damage} damage!")
        
class Player(Character):
    def __init__(self, name, hp, attack, dodge):
        super().__init__(name, hp, attack, dodge)
        
class Enemy(Character):
    def __init__(self, name, hp, attack, dodge):
        super().__init__(name, hp, attack, dodge)

    fighter = Player("Fighter", 5, 3, 2)
    mage = Player("Mage" ,1, 5, 4)
    thief = Player("Thief" ,4, 3, 4)
    
    print("Welcome to Fighter Arena")
    x = input("Enter Your Name: ")
    print("Choose Your Character (fighter = 1 | mage = 2 | thief = 3)")
    choice = input()
    
    if choice == '1':
      player = fighter
    
    if choice == '2':
      player = mage
    
    if choice == '3':
      player = thief
    
    while True:
      enemy = random.randint(1,3)
      if enemy == 1:
        enemy = fighter
        print("\nYou are fighting a fighter!")
        break
      if enemy == 2:
        enemy = mage
        print("\nYou are fighting a mage!")
        break
      if enemy == 3:
        enemy = thief
        print("\nYou are fighting a thief!")
        break
    
    while player.hp > 0 and enemy.hp > 0:
        player.attack(enemy)
        if enemy.hp <= 0:
            break
        enemy.attack(player)
        if player.hp <= 0:
            break
            
        if player.hp > 0:
            print("You win!")
        else:
            print("You lose!")

Traceback (most recent call last): File "main.py", line 1, in from player import Player, Character, Enemy File "/home/runner/ClassesAssessment/player.py", line 23, in class Enemy(Character): File "/home/runner/ClassesAssessment/player.py", line 61, in Enemy int(player.attack(enemy)) TypeError: 'int' object is not callable

I tried changing any other objects, classes, etc also named player or changing the syntax but none of it worked. I believe there is something wrong when I am assigning the different fighter classes (mage, fighter, thief) and all that I've searched has not helped me.

  • if the code you've post is the same as what you're using with indentation and all, then see the indentation when you call Player. – mzm Dec 11 '22 at 19:29
  • You've got a property called `attack` and a method called `attack` so when you try and do `attack()` its using the property. You might want to rename the `self.attack` in your init to `strength` or something like that and also in the damage = self.attack` line of the attack method. – tobyd Dec 11 '22 at 19:29

0 Answers0