为什么这些功能不起作用?减法和加法

Why are these functions not working? Subtractions and additions

昨天我写了一段关于不同奇幻生物战斗的代码。他们有心(就像在电脑游戏中一样)、攻击力和防御力。如果进攻方的攻击力大于防守方的防御力。比攻击力将从心中减去。当其中一个生物不再有红心或超过 11 轮时,战斗应该结束。但问题是圆形加法不起作用,心脏减法也不起作用。 问题出在哪里? 提前致谢!

protocol Character {
    var name: String {get set}
    var creature: String {get set}
    var specialAttack: String {get set}
    var power: Int {get set}
    var defence: Int {get set}
    var hearts: Int {get set}
}

struct Creature: Character {
    var name: String
    var creature: String
    var specialAttack: String
    var power: Int
    var defence: Int
    var hearts: Int = 30
    
    func attack() {
        print("\(name) is attacking...")
    }
    
    mutating func defend(attackingPower: Int) {
        if defence > attackingPower {
            print("\(name) is blocking the attack...")
} else {
            hearts -= attackingPower
        }
    }
    var isAlive: Bool {
        hearts > 0
    }
    
}
var orc = Creature(name: "Arzog", creature: "orc", specialAttack: "dark knife", power: 6, defence: 7, hearts: 30)
var minotaurus = Creature(name: "Horus", creature: "minotaurus", specialAttack: "hornbump", power: 8, defence: 9, hearts: 30)
var troll = Creature(name: "Ortenstone", creature: "troll", specialAttack: "poison spit", power: 5, defence: 6)
var dragon = Creature(name: "Eragon", creature: "dragon", specialAttack: "fireball", power: 10, defence: 8)
var wizard = Creature(name: "Gandalf", creature: "wizard", specialAttack: "magicspell", power: 7, defence: 9)
var human = Creature(name: "Aragon", creature: "human", specialAttack: "swoard", power: 6, defence: 8)
var HorrorClown = Creature(name: "Pennywise", creature: "horror clown", specialAttack: "bite", power: 9, defence: 7)

struct Battle {
    var world: String
    var firstCreature: Creature
    var secondCreature: Creature
    
    mutating func start() -> Int {
        var roundNumber = 0
        
        func rounds() {
            firstCreature.attack()
            secondCreature.defend(attackingPower: firstCreature.power)
            secondCreature.attack()
            firstCreature.defend(attackingPower: secondCreature.power)
        }
        
        repeat {
            print(" Round: \(roundNumber)")
            rounds()
            roundNumber + 1
        } while  !firstCreature.isAlive || !secondCreature.isAlive || roundNumber < 12
        return roundNumber
        print("Battle is over! \(firstCreature.name) with \(firstCreature.hearts) hearts and \(secondCreature.name) with \(secondCreature) hearts")
        }
    }

var BattleArena = Battle(world: "Middleearth", firstCreature: dragon, secondCreature: wizard)
BattleArena.start()

依我看,战斗应该还在继续

while firstCreature.isAlive && secondCreature.isAlive && roundNumber < 12

我可以发现 3 件事:

  1. 正如 Roman 所建议的,您应该将条件改写为:while firstCreature.isAlive && secondCreature.isAlive && roundNumber < 12

    因为你希望战斗只有在两个生物都活着并且少于 12 轮时才能继续。

  2. 在您的 repeat 块中,您将 roundNumber 变量递增 1,但您没有将递增的值分配回变量。因此,您的 roundNumber 变量保持不变,初始值为 0。要使其正确,您必须用 roundNumber = roundNumber + 1 替换该行或将其进一步缩短为 roundNumber += 1

  3. 您的 print 语句永远不会执行,因为它在 return 键之后。使用 return 键直接退出块,留下未执行的行。

完成这些之后,我可以看到您的代码按预期工作。