ios - 如何用布尔值做出“不可定位”的选择?
问题描述
我正在为学校制作一个 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
}
非常感谢您的帮助!祝你今天过得愉快
解决方案
您可以将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
}
推荐阅读
- laravel - Laravel 基础 URL 无缘无故重定向到 /home
- django - 如何从 sqlite 迁移到 postgres
- visual-studio - VS2017,VSIX:刚刚创建的 AsyncPackage 没有被实例化
- python - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行附近使用正确的语法",
- sqlite - SQL 逻辑错误 no such table: porting xaf standard security to Sqlite
- java - 每次迭代为任务安排一个新的日期 - Java Spring
- java - 在单个 java 程序的多次运行之间进行缓存
- rest - 保护公共 Java Spring-Boot Web 应用程序的最佳实践
- regex - 无效的表达模式
- neo4j - 如何展示连续“获胜”最多的球队。在 epl 比赛中 Neo4j