Swiftで乱数を簡単に作るメソッドを作ってみた

こんにちは、Swiftでゲーム制作を勉強中の@Yuuです。
ここ数日SpriteKitを使い、ヒーヒーいいながら勉強中です。
ゲームを作るには、物理・重力の事を考えながらプログラムしなきゃいけないんだ・・と、そんなゲーム作りの初歩から学んでる日々でございます。
さて、ゲームを作っていると乱数を作る機会がよくあると思います。
ところがどっこい、Swiftで乱数を作る方法が意外とめんどくさい事を知りました。
んじゃあ、もうちょい簡単に乱数作れないのかな、と思い自分で乱数を簡単に生成するためのメソッドを作ってみたので、ご紹介させて頂きます。
ちなみに、Xcode6.4で書いていますが、Swift2にも対応しておりますよ!
─=≡Σ((( つ•̀ω•́)つ
スポンサーリンク
Swiftで乱数を簡単生成する
きっかけ
そもそも何でそんな事をしようと思ったかと言いますと、Swiftで乱数を生成するのが結構めんどくさいから、です。
例えば、10~12までの乱数を作りたい!という場合
上記の場合であれば、そこまでめんどくさくないのですが、
例えば、Intの値を2つ渡し、それぞれ最小値と範囲を示す値とした場合の処理は以下のようになります。
1回、2回だけならまだしも、こんな処理を沢山書くのはしんどい・・しかもIntだったり、UInt32だったり、型を変換したり戻したり・・と複雑で少し経ったら書き方忘れそう・・
と思ったので作ってみました(⌯¤̴̶̷̀ω¤̴̶̷́)✧
乱数を生成する関数arc4randomについて
乱数を生成する場合、arc4random() % 10
と書くことでも乱数を生成出来ますが、これはarc4random()
で乱数を生成し、その乱数の余剰から値を求めるため、偏りが生じてしまいます。
arc4random_uniform(10)
と書くと、0~10までの乱数を生成してくれるので、偏りなく乱数を生成できます。そのため、今回はこちらの方法を使って作成します。
CreateRandomInt.swift
お待たせしました、以下のコードが乱数を簡単に生成するコードです。
軽くどのように使うかを解説しますと、
minMaxDesignation(min: Int, max: Int)
というメソッドでは、最小値(min)〜最大値(max)の乱数を生成。
minRange(min: Int, range: Int)
というメソッドでは、最小値(min)から指定した範囲(range)の乱数を生成。
maxRange(max: Int, range: Int)
というメソッドでは、最大値(max)から指定した範囲(range)の乱数を生成。
となっております。
どのメソッドも、返り値は扱いやすいようにInt型にしてみました。
また、以前当ブログでご紹介したSwiftで現在時刻を呼び出す記事(Swiftで現在時刻を一発簡単に呼び出せるようにする方法)同様、タイプメソッドにすることでサクッと呼び出せるようになっております。
このメソッドの使い方ですが、例えば1~10までの乱数を生成する場合は、
var ret = CreateRandomInt.minMaxDesignation(min: 1, max: 10)
とすることで、サクッと変数ret
に1~10までの乱数を生成することが出来ます。
使い方は、先ほどのコードの下の方に書いてあるので、そちらを参照して下さい。
実際に使ってみる
試しにプロジェクト内に導入してみたいと思います。
適当にSingle Page Applicationでプロジェクトを作成してみました。
そこに「CreateRandomInt.swift」を作成します。
ファイル名は、同じものにしなくても構いませんが、今から記述するコードのクラス名を変更しない場合は、ファイル名は「CreateRandomInt.swift」しておいた方が分かりやすいと思います。
ファイルを追加した後CreateRandomInt.swiftを、先ほど上げたコードをコピペして、まるっと書き換えます。
ちなみに32行目より下に書いてあるコメントが不要な方は、消しちゃって下さいね。
ViewControllerのvieDidLoad()
で、以下のようなfor文を10回ぐらい回して実行出来ているか確認したいと思います。
するとコンソール部分に結果が表示されました。
うん、無事乱数生成出来ました!(๑•̀ㅂ•́)و✧
画像が見づらいと思うので、クリックして拡大してみてください。
ご不便おかけしてスイマセン・・。
あとがき
この「CreateRandomIntクラス」を使いたい方は、自由に使ってやって下さい。
もしTwitterで一言「CreateRandomIntクラス使いまーす」、みたいに声を掛けて頂けると僕が泣いて喜びますがw
久しぶりにSwiftを触りましたが、やはり書きやすいですね。
是非、皆さんもこのクラスを使ってやって乱数を作って下さい。
よろしくお願いします!
ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧
