如何解决如何处理此功能?
我想编写一个功能,让街头霸王交替攻击他们。每次攻击都令人心动。当其中一名战士的心数为0时,战斗结束了。但是我不知道如何一次又一次地执行此过程。这是我的代码现在的样子:
fs.rmdir
问题是该过程在第一轮之后停止。我尝试了for-in或Repeat-while循环,但没有成功。 有人可以帮我吗?
解决方法
首先,您可以尝试将某些功能移至StreetFighter
本身:
public struct StreetFighter {
let name: String
let power: Int
let defence: Int
var hearts = 100 // you can provide a default value
var isAlive: Bool {
hearts > 0
}
func attack() {
print("\(name) is going into the offence...")
}
mutating func defend(attackingPower: Int) {
if power > defence {
hurt(damage: attackingPower)
} else {
block()
}
}
private func block() {
print("\(name) is blocking the attack")
}
private mutating func hurt(damage: Int) {
print("\(name) is hurt")
hearts -= damage
}
}
然后,通过Fight
循环在while
结构中添加一个函数(您也可以在其中限制回合数):
struct Fight {
let location: String
var fighter1: StreetFighter
var fighter2: StreetFighter
mutating func start() {
var roundNumber = 0
while !isFinished && roundNumber < 12 {
roundNumber += 1
round()
print("Round \(roundNumber): \(fighter1.name) - \(fighter1.hearts),\(fighter2.name) - \(fighter2.hearts)")
}
print("The fight is over!")
}
private mutating func round() {
fighter1.attack()
fighter2.defend(attackingPower: fighter1.power)
fighter2.attack()
fighter1.defend(attackingPower: fighter2.power)
}
private var isFinished: Bool {
!fighter1.isAlive || !fighter2.isAlive
}
}
现在您可以开始战斗:
let connorMcGregor = StreetFighter(name: "Connor McGregor",power: 8,defence: 7,hearts: 100)
let mikeTyson = StreetFighter(name: "Connor McGregor",power: 9,defence: 6,hearts: 100)
let alisterOverreem = StreetFighter(name: "Alister Overreem",power: 7,defence: 10,hearts: 100)
let khabib = StreetFighter(name: "Khabib",defence: 8) // you can use the default `hearts` count
var mma = Fight(location: "New York",fighter1: connorMcGregor,fighter2: khabib)
mma.start()
根据您的目标,您可能需要提取Fight
的某些部分。例如,start
函数可以返回结果(谁赢得了),然后您可以对其进行操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。