简体   繁体   English

似乎无法通过函数传递 class 变量

[英]Can't seem to pass class variables through functions

I'm relatively new to coding and wanted to try my hand at a longer project - A text based RPG game - and I'm scratching my head at classes and objects, can someone point me in a better direction?我对编码比较陌生,想尝试一个更长的项目 - 基于文本的 RPG 游戏 - 我在类和对象上摸不着头脑,有人能指出我更好的方向吗?

>> Error: enemy has no attribute 'attack'
class Character(object):
    def __init__(self, name):
        self.name = name
        self.maxHealth = health
        self.health = self.maxHealth
        self.attack = attack
        self.AC = AC
        self.armour = armour
        self.strength = strength
        self.equipped_weapon = equipped_weapon
        self.xp = xp

class player(Character):
    def __init__(self, name):
        self.name = "KD"
        self.maxHealth = 100
        self.health = self.maxHealth
        self.attack = 15
        self.AC = 15
        self.armour = 0
        self.strength = 15
        self.equipped_weapon = "Pistol"
        self.xp = 0

class enemy(Character):
    def __init__(self, name):
        self.name = "X"
        self.maxHealth = 60
        self.health = self.maxHealth
        self.attack = 8
        self.AC = 8
        self.armour = 0
        self.strength = 5
        self.xp = 25

enemyIG = enemy
playerIG = player

def player_combat(player, enemy):

    in_combat = 1

    while in_combat == 1 and player.health > 0:

        player_ac_check = (random.randint(0, player.attack + 1))
        enemy_ac_check = (random.randint(0, enemy.attack + 1))...



player_combat(playerIG, enemyIG)

You haven't initialized the objects, just passed references to the classes.您还没有初始化对象,只是传递了对类的引用。 You have to instantiate like so:你必须像这样实例化:

enemyIG = enemy(name="Bad Guy")
playerIG = player(name="Good Guy")

An uninitialized class doesn't have attributes unless they're defined outside of __init__未初始化的 class 没有属性,除非它们在__init__之外定义

You need to instantiate to the class, not assign it.您需要实例化到 class,而不是分配它。

Change this:改变这个:

enemyIG = enemy
playerIG = player

to this:对此:

enemyIG = enemy(name = 'enemy1')
playerIG = player(name = 'player1')

This would still endup in an infinite loop, you need some logic for a meaningful end, perhaps decreasing the player health.这仍然会以无限循环结束,您需要一些逻辑来实现有意义的结束,可能会降低玩家的健康状况。

while in_combat == 1 and player.health > 0:    
    player_ac_check = (random.randint(0, player.attack + 1))
    enemy_ac_check = (random.randint(0, enemy.attack + 1))
    player.health -= 10  # once the health goes below 0, it would end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM