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

问题描述

昨天,我写了一段关于不同幻想生物战斗的代码。他们有内心(就像在电脑游戏中一样),进攻能力和防御能力。如果攻击者的攻击力大于防御者的防御力。比攻击力要从心中减去。当其中一个生物没有“心”或超过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",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. 正如罗曼建议的那样,您应该将条件改写为:while firstCreature.isAlive && secondCreature.isAlive && roundNumber < 12

    因为只有两个生物都还活着并且少于12发,您才希望战斗继续进行。

  2. 在您的repeat块中,您将roundNumber变量增加了1,但没有将增加的值分配回该变量。结果,您的roundNumber变量保持不变,初始值为0。为正确起见,您必须将行替换为roundNumber = roundNumber + 1或将其缩短至roundNumber += 1

  3. 您的print语句像在return键之后一样永远不会执行。仅使用return键即可直接退出该块,而使后面的行未执行。

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