車輪の再発明っぽいですが、Swiftで抽選マシンを作ってみることにしました。
(素人です)
要件
必須
抽選をすると以下の確率で結果が帰ってくるようにする
ラベル | 確率(%) |
---|---|
特賞 | 0.01 |
1等 | 0.49 |
2等 | 4.5 |
3等 | 45 |
はずれ | 50 |
やったこと
Prize Classをつくる
class Prize:NSObject {
var name: String
var probability: Double
var prizesNo = 0
let lotNo = 10000.0
init(name: String, probability: Double){
self.name = name
self.probability = probability
}
func number() -> Int{
var result: Int
result = Int(Double(lotNo) * Double(probability/100))
return result
}
}
prize.numberでlotNoの個数のときの景品数を返します。
Prizeを作る
let prizeList = [
Prize(name: "特賞", probability:0.01 ),
Prize(name: "1等", probability:0.49 ),
Prize(name: "2等", probability:4.5 ),
Prize(name: "3等", probability:45.0 ),
Prize(name: "残念", probability: 50.0)
]
乱数と抽選
arc4random_uniform(最大値)
0から最大値までの乱数を返してくれる。
なんかここは綺麗にできてない。
商品の数10000っていうのを乱数の最大数で入力しているけれど、
prizeの中でも同じものを定義しててだめなかんじ。
ほんとはまとめたい。
let prizesNo = arc4random_uniform(10000)
///1万を最大値にとる乱数
let prizes = prizeList.count-1
var k = 0
print(prizes)
for prize in prizeList{
k = k + prize.number()
if Int(prizesNo) < k {
print(prize.name) //ここで抽選結果を表示する
break
}
print(k)
}
はまったところ
IntだとおもってあつかっていたものがIntとUint32とあって、
大小比較ができなかったので、型変換した。
binary operator 'hoge' cannot be applied to operands of type Int and Uint32
エラーはこんなんだった。