2014-09-29 103 views
1

我想制作一个游戏,您可以升级您的特定物品。新项目的质量将是随机的,基于这样的:选择随机数的快速概率?

10% worse - 35% better then current item level = 55% chance 
36% better to 90% better then current item level = 35% chance 
91% better to 200% better then current item level = 5% chance 
201% better to 500% better then current item level = 2.5% chance 
500% better to 2000% better then current item level = 2.5% chance 

我怎么会去制作它,以便产生一个随机数会有的,例如,55%的机会只有35%好?我有一个裂缝,想出了这个(忽略%数字,我只是用这个测试)。

let randomNumber = Int(arc4random_uniform(1000)) 


if randomNumber <= 700 { 
    println("hey") 
    var newLevel = (Double(Double(randomNumber)/700.00) + 0.1) * Double(pickDamage) 

} else if randomNumber <= 800 && randomNumber > 700 { 
    var newLevel = (Double(Double(randomNumber)/700.00) + 1.00) * Double(pickDamage) 
} else if randomNumber <= 1000 && randomNumber > 950 { 
    var newLevel = (Double(Double(randomNumber)/700.00) + 2.00) * Double(pickDamage) 
} 

但是,这并不是按照我想要的方式做到的。

+0

你无法产生随机数,是你的问题吗? – Suresh 2014-09-29 05:25:00

回答

4

为什么不使用斯威夫特switch语句与模式匹配相结合:

// create a random percent, with a precision of one decimal place 
func randomPercent() -> Double { 
    return Double(arc4random() % 1000)/10.0; 
} 

let randomNumber = randomPercent() 
switch(randomNumber) { 
case 0..<55: 
    println("10% worse - 35% better then current item level") 
case 55..<90: 
    println("36% better to 90% better then current item level") 
case 90..<95: 
    println("91% better to 200% better then current item level") 
case 95..<97.5: 
    println("201% better to 500% better then current item level") 
default: 
    println("500% better to 2000% better then current item level") 
} 

这使得该逻辑非常清晰。

4

我认为统一与可啉的解决方案将是最好的:

func randomPermille() -> Int { 
    return Int(arc4Random(1000)) 
} 

let randomNumber = randomPermille() 
switch(randomNumber) { 
    case 0..<550: 
     println("10% worse - 35% better then current item level") 
    case 550<900: 
     ... and so on 

它通常是一个坏主意,Float S或Double我们比较,因为漂浮在整个整数点古怪的Int秒。 (10.0的分割看起来特别令人担忧,但最后可能并不重要)