Swift 如何处理这个功能?

Swift 如何处理这个功能?,swift,function,for-in-loop,Swift,Function,For In Loop,我想写一个函数,让街头战士交替攻击他们。每一次攻击都会吸引一些人的心。当其中一个战士有0颗心时,战斗就结束了。但我不知道如何一次又一次地做这个过程。这就是我的代码现在的样子: public struct StreetFighter { var name: String var power: Int var defence: Int var hearts: Int func Attack() { print("\(name) is

我想写一个函数,让街头战士交替攻击他们。每一次攻击都会吸引一些人的心。当其中一个战士有0颗心时,战斗就结束了。但我不知道如何一次又一次地做这个过程。这就是我的代码现在的样子:

public struct StreetFighter {
    var name: String
    var power: Int
    var defence: Int
    var hearts: Int
    func Attack() {
        print("\(name) is going into the offence...")
    }
    func Blocking() {
        print("\(name) is blocking the attack")
    }
}
var connorMcGregor = StreetFighter(name: "Connor McGregor", power: 8, defence: 7, hearts: 100)
var mikeTyson = StreetFighter(name: "Connor McGregor", power: 9, defence: 6, hearts: 100)
var alisterOverreem = StreetFighter(name: "Alister Overreem", power: 7, defence: 10, hearts: 100)
var khabib = StreetFighter(name: "Khabib", power: 9, defence: 8, hearts: 100)


struct Fight {
    var location: String
    mutating func Round1(firstFighter: StreetFighter,secondFighter: StreetFighter) -> Int {
        firstFighter.Attack()
        if firstFighter.power < secondFighter.defence  {
            secondFighter.Blocking()
            secondFighter.Attack()
        } else {
        secondFighter.hearts - firstFighter.power
            }
            
            if secondFighter.power < firstFighter.defence  {
                firstFighter.Blocking()
            } else {
        firstFighter.hearts - secondFighter.power
            }
        if firstFighter.hearts == 0 || secondFighter.hearts == 0 {
        print("The fight is over!")
        
        }
        return firstFighter.hearts
        return secondFighter.hearts
    }
}

var mma = Fight(location: "New York")
mma.Round1(firstFighter: connorMcGregor, secondFighter: khabib)
public struct StreetFighter{
变量名称:String
无功功率:Int
var防御:Int
变量:Int
func攻击(){
打印(“\(姓名)将进入犯罪…”)
}
func阻塞(){
打印(“\(名称)正在阻止攻击”)
}
}
var connorMcGregor=街头斗士(姓名:“Connor McGregor”,力量:8,防御:7,心脏:100)
var mikeTyson=街头斗士(姓名:“康纳·麦格雷戈”,力量:9,防守:6,红心:100)
var alisterOverreem=街头斗士(名称:“Alister overseem”,力量:7,防御:10,红心:100)
var khabib=街头斗士(名字:“khabib”,力量:9,防御:8,心脏:100)
结构战{
变量位置:字符串
变异func Round1(第一架战斗机:街机战斗机,第二架战斗机:街机战斗机)->Int{
firstFighter.Attack()
如果First Fighter.power
问题是这个过程在第一轮之后就停止了。我尝试了for in或repeat while循环,但没有成功。
有人能帮我吗?

首先,您可以尝试将一些功能移动到
街机本身:

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
struct中添加一个带有
while
循环的函数(您也可以在那里限制回合数):



根据您的目标,您可能希望从外部提取战斗的某些部分。例如,
start
函数可以返回一个结果(谁赢了),然后您可以对其进行操作。

1。您有2个返回运算符-它在基本级别上是错误的。您只需返回1次。2.为什么你需要归还红心?第二轮?3.你能告诉我该怎么做吗?您是否希望运行1个函数,并且它必须在所有12轮上运行?最后一轮还赢了?哇,太好了,谢谢!我刚刚开始学习如何在大科罗纳锁定代码,所以我是这方面的新手,但这很有趣!:)
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", power: 9, defence: 8) // you can use the default `hearts` count

var mma = Fight(location: "New York", fighter1: connorMcGregor, fighter2: khabib)
mma.start()