首页 > 解决方案 > 如何用布尔值做出“不可定位”的选择?

问题描述

我正在为学校制作一个 2 名玩家的 RPG 游戏,两名玩家将选择 3 个角色进行战斗!当其中一个角色的生命值用完时……他死了!

实际上,我正在尝试弄清楚如何才能做到这一点,我已经使函数死亡,这里是:

 public func death(to attacker: Character, of target: Character, from ennemyPlayer: Player){
    if healthpoint <= 0 {
        isDead = true
        print("\(target.name) is KO")
    }
}

但我不知道把我的函数放在哪里来做出不可选择的选择,比如如果一个玩家选择一个 0hp 的角色,它会说 print("This char is dead")

我做了这个函数来选择一个字符(这个函数和死亡函数不是同一个文件夹):

 //function to choose a fighter
func chooseChar(charac: inout[Character]){

    var attacker: Character
    var inputRole: Bool = false

    repeat{
        let choice = readLine()
        switch choice {
        case "1":
            attacker = self.playerTeam[0]
            charac.append(attacker)
            inputRole = true
        case "2":
            attacker = self.playerTeam[1]
            charac.append(attacker)
            inputRole = true
        case "3":
            attacker = self.playerTeam[2]
            charac.append(attacker)
            inputRole = true
        default:
            print("choose between 1, 2 or 3")
            inputRole = false
        }
    } while inputRole == false
}

非常感谢您的帮助!祝你今天过得愉快

标签: iosswift

解决方案


您可以将isDead计算属性添加到您的Character类中:

class Character {
    var hp: Int
    var isDead: Bool {
        return hp < 1
    }
}

您可以chooseChar通过适应数组大小使您的函数更加灵活。此函数还应返回所选字符而不是使用inout数组:

func chooseChar(characters: [Character]) -> Character {

    var attacker: Character?

    repeat{
        let line = readLine()
        if let choice = Int(line), 
           choice > 0, 
           choice <= characters.count {
               let selection = characters[choice-1]
               if selection.isDead {
                   print("\(selection.name) is already dead!")
               } else {
                   attacker = selection
               }
        } else {
            print("Please enter a number between 1 and \(characters.count)"
        }
    } while attacker == nil
    return attacker
}

推荐阅读