为什么这些功能不起作用?减法和加法
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 件事:
正如 Roman 所建议的,您应该将条件改写为:while firstCreature.isAlive && secondCreature.isAlive && roundNumber < 12
因为你希望战斗只有在两个生物都活着并且少于 12 轮时才能继续。
在您的 repeat
块中,您将 roundNumber
变量递增 1,但您没有将递增的值分配回变量。因此,您的 roundNumber
变量保持不变,初始值为 0。要使其正确,您必须用 roundNumber = roundNumber + 1
替换该行或将其进一步缩短为 roundNumber += 1
您的 print
语句永远不会执行,因为它在 return
键之后。使用 return
键直接退出块,留下未执行的行。
完成这些之后,我可以看到您的代码按预期工作。
昨天我写了一段关于不同奇幻生物战斗的代码。他们有心(就像在电脑游戏中一样)、攻击力和防御力。如果进攻方的攻击力大于防守方的防御力。比攻击力将从心中减去。当其中一个生物不再有红心或超过 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 件事:
正如 Roman 所建议的,您应该将条件改写为:
while firstCreature.isAlive && secondCreature.isAlive && roundNumber < 12
因为你希望战斗只有在两个生物都活着并且少于 12 轮时才能继续。
在您的
repeat
块中,您将roundNumber
变量递增 1,但您没有将递增的值分配回变量。因此,您的roundNumber
变量保持不变,初始值为 0。要使其正确,您必须用roundNumber = roundNumber + 1
替换该行或将其进一步缩短为roundNumber += 1
您的
print
语句永远不会执行,因为它在return
键之后。使用return
键直接退出块,留下未执行的行。
完成这些之后,我可以看到您的代码按预期工作。