【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を作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!