我是Python编程的新手,我正在编写一个简单的格斗游戏(基于文本),这非常简单,因为我现在只是在学习基础知识。 我已经在下面放置了我的游戏代码(它还没有完成),我的问题是,每次我运行程序时,当你输入哪个角色时你都会发生这个错误。
Traceback (most recent call last):
File "C:\Python26\combat.py", line 60, in <module>
first_player.attack(second_player)
TypeError: 'int' object is not callable
以下是我游戏的代码(不要担心它不是很大!)。
import time
import random
class player(object):
def __init__(self, name):
self.account = name
self.health = random.randint(50,100)
self.attack = random.randint(30,40)
self.alive = True
def __str__(self):
if self.alive:
return "%s (%i health, %i attack)" % (self.account, self.health, self.attack)
else:
return self.account, "is dead!"
def attack(self, enemy):
print self.account, "attacks", enemy.account, "with %s attack!" % self.attack
enemy.health -= self.attack
if enemy.health <= 0:
enemy.die()
def die(self):
print self.account, "dies!"
alive_players = 2
name1 = raw_input("Enter a name: ")
name2 = raw_input("Enter another name: ")
player_list = {"a":player(name1), "b":player(name2)}
while alive_players == 2:
print
for player_name in sorted(player_list.keys()):
print player_name, player_list[player_name]
print
player1 = raw_input("Who would you like to play as? (a/b): ").lower()
try:
first_player=player_list[player1]
except KeyError, wrong_name:
print wrong_name, "does not exist!"
continue
if first_player==player(name1):
second_player=player(name2)
else:
second_player=player(name1)
time.sleep(1)
print
print "*" * 30
first_player.attack(second_player)
second_player.attack(first_player)
我知道有一些解决方法,比如在玩家选择名字之后将字符附加到列表中,虽然我想进一步了解类,并想知道为什么这不起作用!如果可能的话,有人可以解释一下这个错误以及如何修复它吗?我已经看了三天了,我可以用不同的方式做到这一点,但是我想知道为什么这不起作用!
提前致谢! -Charlie
答案 0 :(得分:9)
first_player.attack
, self.attack = random.randint(30,40)
是一个数字。我怀疑您希望以不同方式命名,以便它不会覆盖您的attack
方法。
答案 1 :(得分:8)
__init__()
隐藏对象上的attack()
方法。使用其他名称。
答案 2 :(得分:2)
每个玩家攻击强度的变量与攻击函数的名称相同,所以当你调用first_player.attack()时,它试图调用一个int就像它是一个函数一样。将该函数重命名为“attack_player()”或攻击评级为“attack_value”等等,它应该可以正常工作。