簡體   English   中英

Python 基於文本的游戲 - TypeError: bool oject not callable

[英]Python text based game - TypeError: bool oject not callable

我正在創建我的第一個 python 程序並且一直在努力解決“TypeError:'bool'object is not callable”錯誤。 我只學習了幾個星期,所以任何幫助都會很棒,此外,如果有任何關於如何減少一些代碼的提示,那就太好了! 謝謝!

import random

class Spacecraft:
    def __init__(self, type, health):
        self.type = type
        self.health = health
        self.ship_destroyed = False

    def ship_destroyed(self):
        self.ship_destroyed = True
        if self.health != 0:
            self.health = 0
        print("Your spacecraft has been destroyed!")

    def ship_destroyed_def(self):
        self.ship_destroyed = True
        if self.health != 0:
            self.health = 0
        print("Your enemy spacecraft has been destroyed! YOU WON!!")

    def lose_health(self, amount):
        self.health -= amount
        if self.health <= 0:
            self.ship_destroyed()
        else:
            print("Your spacecraft now has {health} hit points remaining.".format(health=self.health))

    def lose_health_def(self, amount):
        self.health -= amount
        if self.health <= 0:
            self.health = 0
            self.ship_destroyed()
        else:
            print("The enemy spacecraft now has {health} hit points remaining".format(health=self.health))
            print()

    def attack(self, enemy_ship):
        while True:
            damage_fighter = random.randrange(2, 14)
            damage_defender = random.randrange(4, 10)
            if self.type == "fighter":
                print(
                    'Your {type} spacecraft attacked the enemy ship for {damage} damage and the enemy {enemy_ship} spacecraft attacked your ship for {damage2} damage.'.format(
                        type=self.type,
                        damage=damage_fighter,
                        enemy_ship=enemy_ship.type,
                        damage2=damage_defender))
                self.lose_health(damage_defender)
                enemy_ship.lose_health_def(damage_fighter)
            elif self.type == "defender":
                print(
                    'Your {type} spacecraft attacked the enemy ship for {damage} damage and the enemy {enemy_ship} spacecraft attacked your ship for {damage2} damage.'.format(
                        type=self.type,
                        damage=damage_defender,
                        enemy_ship=enemy_ship.type,
                        damage2=damage_fighter))
                self.lose_health(damage_fighter)
                enemy_ship.lose_health_def(damage_defender)

class Player:
    def __init__(self, type):
        self.type = type
        self.current_type = 0

    def attack_enemy_ship(self, enemy_ship):
        my_ship = self.type[self.current_type]
        their_ship = enemy_ship.type[enemy_ship.current_type]
        my_ship.attack(their_ship)

a = Spacecraft("fighter", 40)
b = Spacecraft("defender", 50)

print()
player_name = input('Welcome to Space Warriors! Please enter your name and hit enter. ')
player_style = input('''
Welcome ''' + player_name + '''! Space Warriors is a game that allows you to chose between two classes of spacecraft. If you select a 
fighter spacecraft when you will fight again a defender spacecraft. If you choose a defender space craft
then you will fight a fighter spacecraft. Please select "Fighter" or "Defender" and press enter. ''').lower()

player_selected = []
computer_selected = []

if player_style == 'fighter':
    player_selected.append(a)
    computer_selected.append(b)

else:
    player_selected.append(b)
    computer_selected.append(a)

live_player = Player(player_selected)
computer_player = Player(computer_selected)

print()
print("Let's get ready to fight! Both ships are launched!")
print()

live_player.attack_enemy_ship(computer_player)

一旦兩艘船中的一艘達到零生命值,我將嘗試調用 ship_destroyed 或 ship_destroyed_def 來結束游戲; 然而,一旦其中一艘船達到“0”,程序就會停止。 這是我收到錯誤的時候。

def ship_destroyed(self):
    self.ship_destroyed = True

您正在嘗試制作一個function和一個都命名為ship_destroyed屬性 你不能那樣做。 為其中之一取一個不同的名字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM