2016-05-08 7 views
-1

Brauchen Sie Hilfe mit diesem Code. Ich habe keine Ahnung, warum es diesen Fehler ist zu werfen, wenn ich es laufen -Weiß nicht, welcher Fehler ist __init__ Anruffehler

Traceback (most recent call last): 
    File "python", line 130, in <module> 
    File "python", line 111, in encounterModule 
    File "python", line 100, in CombatModule 
TypeError: 'int' object is not callable 

#Combat/exp system test of concept 

import time 

print("Welcome to the Combat Concept Testing Module!") 

print("What would you like your Hero to be called?") 
nameHero = input(">") 




class Hero: 
    'Hero class' 
    def __init__(self): 
     #Constructor to build object 
     self.name = "Placeholder" #Must Declare name after creation of object 
     self.maxhitpoints = 150 
     self.hitpoints = self.maxhitpoints 
     self.defPower = 20 
     self.AD = 30 
     self.exp = 0 
     self.lvl = 1 
     self.threshold = 5 ** self.lvl 
     self.isAlive = True 
     self.maxenergy = 50 
     self.energy = self.maxenergy 
    def basicattack(self,target): 
     #First level attack function 
     self.attack = self.AD 
     target.hitpoints = target.hitpoints - self.attack 
     print("Target striked!") 
    def heavyattack(self,target): 
     if self.lvl == 2: 
      #Second level attack function 
      self.attack = self.AD * 1.2 
      target.hitpoints = target.hitpoints - self.attack 
      print("Target heavily striked!") 
     else: 
      #If level isn't high enough, attack will not occur. 
      pass 
    def printStats(self): 
     #This module prints our hero's stats. 
     print("HP: %d" % (self.maxhitpoints)) 
     print("DefPower: %d" % (self.defPower)) 
     print("Attack Damage: %d" % (self.AD)) 
     print("XP: %d" % (self.exp)) 
     print("LVL: %d" % (self.lvl)) 
     print("Current HP: %d" % (self.hitpoints)) 

class badguy1: 
    'Jokes on you' 
    def __init__(self): 
     self.hitpoints = 80 
     self.AD = 20 
     self.expworth = 10 
     self.isAlive = True 
    def attack(self,target): 
     self.attack = self.AD 
     target.hitpoints = target.hitpoints - self.attack 
    def printStat(self): 
     print(self.hitpoints) 
    def counterattack(self,target): 
     target.hitpoints = target.hitpoints - self.AD 




def expgain(recp,givE): #recp = recipient; givE = person donating experience  after demise 
    recp.exp = recp.exp + givE.expworth 
    print(recp.exp) 

def lvlUp(in1): 
    if in1.exp >= in1.threshold: 
     in1.lvl = in1.lvl + 1 
    else: 
     pass 

def isAliveTest(testin): 
    if testin.hitpoints > 0: 
     testin.isAlive = True 
    else: 
     testin.isAlive = False 


def CombatModule(fighter,fightee): #Fighter initiates fight 
    print("What is your first strike?") 

    choice = input("X for a basic strike, Y for a advanced strike") 

    if choice == "X" or "x": 
     fighter.basicattack(fightee) 
     print("Target HP: %d" % fightee.hitpoints) 
    elif choice == "Y" or "y": 
     fighter.heavyattack(fightee) 
     print("Target HP: %d" % fightee.hitpoints) 
    else: 
     print("Sorry you aren't able to do that") 
    if fightee.isAlive == True: 
     fightee.attack(fighter) 
     print("You've been struck") 
     print("Current HP: %d" % fighter.hitpoints) 
    else: 
     pass 


def encounterModule(attacker,attackee): 
    while True: 
     if attacker.isAlive == True: 
      if attackee.isAlive == True: 
       CombatModule(attacker,attackee) 
      else: 
       print("The target is dead!") 
       break 
     else: 
      print("You have died!") 
      break 






print("The hero's name will be %s" % nameHero) 


me = Hero() 
me.name = nameHero 
en = badguy1() 
encounterModule(me,en) 

ja so verstehe ich nicht, warum es diesen Fehler zu werfen. Der Code läuft nach 2 Durchläufen durch die CombatModule-Funktion gut, dann wirft er beim zweiten Durchlauf diesen Fehler.

+1

Bitte geben Sie eine [mcve] ein und erwägen Sie, sich an https://www.python.org/dev/peps/pep-0008/ zu halten (oder zumindest Konsistenz). – jonrsharpe

+0

Ja, versucht, in einem kleineren Maßstab zu reproduzieren, tut mir leid, es ist ein großer Block von Code, aber das ist nur die Möglichkeit, das Problem zu reproduzieren. Hier ist eine repl.it-Shell zum Reproduzieren. https://repl.it/CNRk/34 –

Antwort

1

badguy1().attack kann sich auf zwei Dinge in Ihrer aktuellen Klassendefinition beziehen. Die Variable self.attack oder die Methode attack(self,target). Ihr Code wird verwirrt, welcher attack verwendet wird, und verwendet den falschen Code. Ändern Sie entweder Ihren Methoden- oder Variablennamen, um das Problem zu beheben

+0

Perfekt, danke für Ihre Hilfe. Das hat das Problem gelöst. –

Verwandte Themen