10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftで抽選マシン(ガチャ)を作ってみる その1

Last updated at Posted at 2015-10-01

車輪の再発明っぽいですが、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

エラーはこんなんだった。

10
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?