【Unity】Randomクラスを使ってトランプをシャッフルするサンプル

【Unity】Randomクラスを使ってトランプをシャッフルするサンプル

ビバ乱数!

と叫ばんばかりに最近は乱数ばっかりいじってます。

Unityのマニュアルに『ランダムなゲームプレイ要素の追加』の項目があるのですが、これを自分なりに解釈して手を動かしてコーディングしています。

今回はその中の『リストをシャッフルする』の項目を出発点に、トランプをシャッフルするサンプルを作成してみます。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

作りたいサンプル

4種類のマーク(スート) * 13個の数字 + ジョーカーで計53枚のトランプを考えます。

このトランプをシャッフルして、毎回異なる並びにするサンプルを作ります。

その動作確認のため1つのマークだけ使い、13枚のカードでシャッフルしてみることを目指します。

まずはカードの定義とカードリストの作成を行います。

カードは上記のようにstructで定義してみました。

スペード、クラブなどのマーク(スート)を保持するフィールド、カードの数字、ジョーカーフラグをもたせました。

ジョーカーフラグがtrueの場合はマークや数字に関係なくジョーカー扱いとする予定。

コンストラクタで各フィールドの値を突っ込んでいます。

 

Unityのマニュアルでは配列でカードを保持しています。でも同じことやってもアレなので、ここではListで持たせることにします。

初期化はInitializeCardList()で行なっています。上で定義したCard型のリストを新しく作り、カードを1枚ずつ生成してAddしています。最初はスペードだけでいきましょ。

作られたデッキの中身はShowCardsName()でコンソールに出力しています。ひとまず1行にまとめて出力しちゃいましょう。

上のスクリプトを任意のゲームオブジェクトにアタッチしてゲームを実行すると、以下のようにコンソールにメッセージが出力されます。

順番にカードが追加された
順番にカードが追加された

 

あ、全角の記号って小さく表示されますね。……まぁいいや(適当)

これでカードデッキが作成されました。次はシャッフルしてみます。

 

カードをシャッフル

上で作ったカードデッキをシャッフルして、そのたびにランダムに並べ変わるようにします。

Unityのマニュアルで掲載されているサンプルコードの流れは以下の通り。

  • 順番にカードデッキの配列にアクセスする
  • アクセスした要素(A)は一時的に変数に格納
  • 要素を格納する位置をRandom.Rangeを使ってランダムに取得
  • 移動先の要素(B)を(A)の位置に格納
  • (B)の位置に(A)を格納
  • これをリストの大きさだけ繰り返す

カードデッキがList型でも同じように作成できます。上記のスクリプトファイルに以下を追加します。

スクリプトを保存してゲームを実行するとコンソールに以下のテキストが表示されます。

もしかして……私たち、入れ替わってる!?
もしかして……私たち、入れ替わってる!?

 

無事シャッフルされました。

あとは他のマーク(スート)を追加して、ジョーカーも入るようにします。11, 12, 13もJ, Q, Kで表示したいなー。

マーク(スート)の追加はフィールドで。そのリストも作成しました。こうしておくと初期化の時にforeachが使えて便利。

 

 

初期化のメソッドにマーク(スート)の追加を反映しました。ジョーカーは個別対応です。追加したい枚数に応じてどんどんCardを追加すればOKですが、今回は1枚なのでシンプルに。

 

 

マーク(スート)の追加に応じて、コンソールに出力するときの記号も追加しました。また、11, 12, 13をJ, Q, Kとして表示する処理も入れました。

 

 

実は一度全部のカードを1行に表示してみたのですが、えらいことになったので複数行に分ける処理を入れました。

びふぉー
びふぉー

 

あふたー
あふたー

 

1行にしてしまうと、横幅がものっそい伸びて、このブログの横幅に入りきらないんです。縮小すると文字が潰れてしまうので痛し痒し。

なので1行表示の文字列は残しつつ、表示用に分割する処理を入れています。

これらの変更を保存し、ゲームを実行するとカードがシャッフルされて表示されます。

無事シャッフルされた
無事シャッフルされた

 

よしよし、いい感じです。

まとめ

シャッフル以外の場所で時間取られましたが、シャッフル自体は簡単にできました。

カードゲーム系では必須も必須なので自分用にソースコードを用意しておくといいかも。

これを使ってババ抜きとかやってみようかしら。

アプリ公開までの攻略チャートを作りました!

CTA-IMAGE

「スマホ向けのアプリを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験から手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


アプリをリリースする観点から書いているので各アプリストア向けの作業が入っていますが、企画、設計、開発、テスト部分については他のプラットフォームでも使える知識が満載です。


無料で入手できるのでぜひお早めにゲットして、開発をブーストさせてください!