我终于开始使用swift了,而我和我的伙伴正试图制作一个小游戏来测试我们学到的东西。 我们制作了一种怪物格斗游戏,没有移动物体只需点击怪物。 到目前为止,如此好的evrything正常运行,得到升级以获得更多的Hp或Str对怪物造成更多伤害,并在它击中时获得更多Hp。 那说。我已经为游戏制作了物品,但我希望它们能够被怪物击落。 制作了不同的类型,并想知道是否有人知道一个代码,以获得物品的掉落机会... 像
"Normal" = 73%
"Rare" = 25%
"Legend" = 2%
我在evry搜索引擎上查看,但无法找到我需要的任何东西。 希望很快得到答复 谢谢。 Greetz Kristof.V
答案 0 :(得分:2)
这个逻辑与 Avt 的答案相同,只是一个不同的实现。
let random = Int(arc4random_uniform(100))
switch random {
case 0...72: print("Normal")
case 73...97: print("Rare")
case 98...99: print("Legend")
default: fatalError("Wrong number")
}
答案 1 :(得分:1)
使用随机函数arc4random_uniform
返回介于0和插入参数减去1之间的随机数。
例如arc4random_uniform(3)可能会返回0,1或2而不是3。
您可以像以下一样使用它:
=SI(ESTERREUR(EQUIV("ABI";C14:G14;1)); MOYENNE(C14:G14); "ABI")
=IF(ISERROR(MATCH("ABI";C14:G14;1)); AVERAGE(C14:G14); "ABI")
答案 2 :(得分:1)
(已编辑:根据后续问题包含武器类型 Random number to print array (Swift) )
如上所述,使用arc4random
功能。一个更完整的怪物"例子如下。
将enum
个案件
enum Rarities {
case Normal
case Rare
case Legendary
}
enum Weapons {
case Knife
case Sword
case Katana
}
每个怪物都可以是Monster
类的实例,其中包含自己的特定项目和稀有丢弃率,在创建Monster
对象时初始化。
class Monster {
var name : String
var dropRatesRarity = [Rarities:Double]()
var dropRatesWeapons = [Weapons:Double]()
init(name: String, dropRatesRarity: [Rarities:Double], dropRatesWeapons: [Weapons:Double]) {
self.name = name
var rateSum = dropRatesRarity.values.reduce(0.0, combine: +)
var dropRatesCumSum = 0.0
for (k, v) in dropRatesRarity {
self.dropRatesRarity[k] = v/rateSum + dropRatesCumSum
dropRatesCumSum += v/rateSum
}
rateSum = dropRatesWeapons.values.reduce(0.0, combine: +)
dropRatesCumSum = 0.0
for (k, v) in dropRatesWeapons {
self.dropRatesWeapons[k] = v/rateSum + dropRatesCumSum
dropRatesCumSum += v/rateSum
}
}
func dropItem() -> (Weapons,Rarities) {
return (generateItemType(), generateRarity())
}
func generateRarity() -> Rarities {
let random = Double(Float(arc4random()) / Float(UINT32_MAX))
return dropRatesRarity.filter({ (k, v) in v >= random }).minElement({ $0.1 < $1.1 })?.0 ?? .Normal
}
func generateItemType() -> Weapons {
let random = Double(Float(arc4random()) / Float(UINT32_MAX))
return dropRatesWeapons.filter({ (k, v) in v >= random }).minElement({ $0.1 < $1.1 })?.0 ?? .Knife
}
}
某些Monster
实例的示例:
/* Example */
var myDropRatesRarity = [Rarities:Double]()
myDropRatesRarity[.Normal] = 73 // relative drop rates, needn't sum to 100
myDropRatesRarity[.Rare] = 25
myDropRatesRarity[.Legendary] = 2
var myDropRatesWeapons = [Weapons:Double]()
myDropRatesWeapons[.Knife] = 50
myDropRatesWeapons[.Sword] = 30
myDropRatesWeapons[.Katana] = 20
var myMonster = Monster(name: "Godzilla", dropRatesRarity: myDropRatesRarity, dropRatesWeapons: myDropRatesWeapons)
var myItem = myMonster.dropItem()
print(myMonster.name + " dropped a \(myItem.0) of \(myItem.1) rarity!")
/* "Godzilla dropped a Katana of Normal rarity!" */
/* ... most likely Normal rarity ... keep grinding! */