Unityでポーカーを作る その4 ベット機能

こんにちは、インターン生の小玉です。
4日目は掛け金をかけて、揃えた役によって払い戻しがされるようにします。

まずはUIを設置します。

右が所持金、左が掛け金です。
UP、DOWNを押すと掛け金が設定できます。
最小値は1にしました。0で始められないようにするためです。
なお、所持金は負の値のほぼどこまでもいけます。借金システムです。

ChangeButtonは、押すタイミングによって機能を変わるようにしました。BETと表記が変わり、クリックすると掛け金が確定されゲームが始まります。
ゲームが始まってから、UP、DOWNを押されると困るので押せないようにしました。

次は倍率を設定します。前にやっていたゲームの中にあったポーカーの倍率を曖昧ながら参考にして倍率は決めました。
そして、役判定の隣に各倍率を返すように仕込みます。

掛け金などを保存するスクリプトに、掛け金と倍率、払い戻し金を保存し、再度掛け金を選ぶ画面に戻る前に払い戻し金が所持金に追加されるようにしました。
役ができなければ掛け金は没収、次のゲームにご期待を、という流れになっています。

これでひとまずは簡単なポーカーゲームが実装できました。
でもこれだけでは味気ないのでハイアンドロウのダブルアップを作っていきます。
なので、ダブルアップにも使えるように掛け金周りの関数も作りました。

・・・コードを見直すと払い戻しの関数(Rehund())が
return winMoney;  (winMoney 掛け金*倍率の勝ち金)
だけなので、GetWinMoneyの方が正しいですねこれ。
所持金に追加するように書き直しました。

興味を持たれた方はお気軽にお問い合わせください。

六日で作るテトリス:Part3 ブロックの位置

こんにちは、インターン生の針ヶ谷です。
今日テトリミノの移動際に必要なブロックの位置の制作の前半に入りたいと思います。

解決策として、データ構造、二次元配列を用いて、ある座標にはブロックがあり、ある座標にはブロックがないというのを表します。
横10マス、縦20マスの計200マスの座標にブロックがあるかないかを判定してテトリスの動きを再現します。

テトリミノの回転による座標の推移はヘルパー関数を用います。
回転によって座標が丸められなくなる可能性があるので、このヘルパー関数が必要になります。
特定の座標が境界線の間にあるかどうか、または境界線の外側にあるかどうかを調べるのにもヘルパー関数を用います。

短いですが今回はここまでにします。
次回でこの作業を終了させます。

興味を持たれた方はお気軽にお問い合わせください。

unityを使ってブラックジャックを作る 3日目 メインゲーム部分の内部処理

こんにちは、インターン生の小宮です。
今回も引き続きブラックジャックのゲームを作っていきたいと思います。

3日目の作業は「計算などの内部処理の作成」です。
細かく分けると「今持っている手札の合計」「勝敗判定」「1ゲームの流れ」の3つとなります。

まず、持っている手札の合計ですがこれはそれほど難しいわけでもなく2日目に作った構造体の中にカードの数字を格納してあるのでこれを格納するための変数を用意して1つずつ足していくだけです。

次に、勝敗判定です。
勝敗判定は1日目にまとめた仕様書と照らし合わせながらif文で分岐させていくことで実装できます。
ここで仕様書が無いと条件を1つ見落としていたり、間違った条件を書いてしまったりで混乱してしまう可能性があったので1日目に仕様書を作っておく必要があったんです。

最後に1ゲームの流れですが、このゲームにおける1ゲームはプレイヤーとディーラーが交互にカードを引き、手札の合計によって勝敗が決まるまでが1ゲームとなっております。
交互にカードを引く部分は2日目にフェーズ分けをしていたのでプレイヤーのターン、ディーラーのターンにそれぞれカードを1枚引くと言う処理を書く事で実装できます。
手札の合計による勝敗判定は今回作った勝敗判定と合計値を格納する変数を組み合わせれば作れるので、打ち間違いにだけ気をつければ大丈夫です。

今回は主に内部での処理を作りましたので、次回はカードの描画や文字の表示などプレイヤーの目に見える部分を作っていきます。
最後まで読んでいただきありがとうございました。

興味を持たれた方はお気軽にお問い合わせください。

Unityでポーカーを作る その3 役の判定

こんにちは、インターン生の小玉です。
3日目は役判定に触れていきます。

作ろうとした上で気づいたことは、処理上では、
ペア系
ストレート系
フラッシュ
に分かれて作ります。

ペア系統は、組み合わせの数だけ参照してペアが何個あったかを見ます。
ワンペア、ツーペアはそのままペアが1つ、2つで分かりやすいですが、スリーカードは3回、フルハウスは4回、フォーカードは6回組み合わせ上ペアになります。これを利用し、ペア系の判定を行いました。

次にストレート系です。
5枚のカードの最大と最小の差が4であればストレートの可能性がありますが、
2,2,3,5,6
のようなケースも考えられます。なので、差が4で、かつペアが無いという条件であればストレートの判定が行えます。
ついでにロイヤルの判定も行います。
ロイヤルの条件は、10,J,Q,K,Aになっていることです。
KとAの端と端があるので、先ほどの方法ではうまくいきません。ですが、すべてが違うカードという意味のペアが無いという条件は使えます。
そこで、合計値を使ってみます。ロイヤルの合計値はすべて47になります。
この2つの条件だけでは例の5つの数字まで絞り込めないので、もう1つ、最小の数字が1という条件を追加します。
すると、
・ペアが無い
・合計が47
・最小が1
これらの条件を満たすものはロイヤルだけになります。

次はフラッシュの判定です。
単純に、1つのカードをほかのカードのマークを比べ、4回一致した時にフラッシュの判定を行います。
ですが、マークを比べ一致しなかった時にフラッシュではない判定をした方が文が短くなることに気づき、改めました。
これで、一致した数を保存する変数宣言、4回回すfor文、一致した数によってフラッシュかを判定するif文が、
一致していないか見るを最大4回回すfor文
だけで済みました。

後は良い感じにストレートとフラッシュとロイヤルを組み合わせて、ストレート、フラッシュ、ストレートフラッシュ、ロイヤルストレートフラッシュの判定が行えました。

最後に
google先生大変お世話になりました、ありがとうございます。

興味を持たれた方はお気軽にお問い合わせください。

6日で作るジャグリングゲームpart2

こんにちは、インターン生の岸です。
今回から、前回紹介したゲーム&ウォッチのボールを元にした
ジャグリングゲームの制作過程を見ていこうと思います。

使用するゲームエンジンはunityとします。
まずはボールを受け止めるための腕として機能するオブジェクトを生成し
且つそれが左右に動くようにしましょう。
Hierarchyの枠内を右クリックし、3D objectの中からCubeを選びましょう。
これを計2つ作りそれぞれにLeftHandとRightHandと名前をつけます。
このCubeを横にワイドにします。ボールを受け止める形に。
そうしたら今度はHandのポジションを決めます。
実際のボールでは腕の位置は3つあったので
両腕に3つの置き場所を用意するとします。

ではこれを作るためにスクリプトを作成します。
用意する変数はHand2つのobjectを格納する変数。
Handの現在位置を格納する変数。
Handのポジションを格納する配列です。
用意できたらStartでHandの初期位置を決めておきます。
Hand2つのInspectorのtransform、position xの座標を
それぞれ-6,-4,-2 2,4,6とします。
y座標は共通でお好みの高さにします。

できたらvoid startに最初の動きを書きましょう。
手の位置の初期設定として
Handの座標を縦に2分割した画面基準に
それぞれ真ん中に来るよう座標を渡します。
これでゲームを起動した際手が初期位置に来るようになります。

そうしたら今度はキー入力でHandが動くようにしましょう。
特定のキーを押した時に横にずれるように、
先程書いたポジションを格納した配列の位置に来るようにします。
if文を用いてその動きを作ります。
キーを押した時且つ手が左端、もしくは右端に無い場合にのみ動くようにします。

これで腕に変わるオブジェクトは生成完了です。
今回はここまでにしておきます。
次回はボールとボールのポジション、タイマーを作っていこうと思います。
ここまで読んでいただきありがとうございます。

興味を持たれた方はお気軽にお問い合わせください。

六日で作るテトリス:Part2

こんにちは、インターン生の針ヶ谷です。
今日からテトリスの制作に入りたいと思います。

まず最初は、テトリスに必ず必要な要素であるテトリミノとゲーム画面の作成に入りたいと思います。
今回の作業は何も難しい事はありません。unityに、少しでも触れたことがあるのなら容易に行えます。

まず素材として適当な正方形と棒の画像を用意しHierarchyにドラッグします。これで必要な素材は全てです。
次にボーダーはゲームの左と右になければならないので、二つの棒をX = 0.5とX = 9.5に配置し、ScaleのY = 40にします。

次はテトリミノのI 、 J 、 L 、 O 、 S 、 T 、 Zグループを作成します 。
まず、トップメニューからGameObject – > Create Emptyを選択して空の GameObject を作成します。
これにより空のGameObjectがHierarchyに追加されます。
正方形を空のGameObjectに 4回ドラッグすると、4つのブロックがその子になります。
ここでは、正方形をテトリミノOになるように配置します。

4つのブロックに使用した座標は次のとおりです。
X = 0 Y = 0
X = 0 Y = 1
X = 1 Y = 0
X = 1 Y = 1

このままでは名前がわかりにくいのでGameObjectを右クリックし、名前をグループOに変更しましょう。
これをProjectにドラッグしてPrefabを作成します。
これ以上、HierarchyにグループOは不要なので削除しましょう。
残りのグループもこれを元に作成していきましょう。

これでテトリスに必要な最低限の物は揃いました。
次回からはテトリミノの移動に入っていきます。

興味を持たれた方はお気軽にお問い合わせください。

unityを使ってブラックジャックを作る 2日目 ゲームのフェーズ分けとカードの作成

こんにちは、インターン生の小宮です。
今回も引き続きブラックジャックのゲームを作っていきたいと思います。

2日目の作業は「列挙型を使ったゲームのフェーズ分け」と「構造体を使ったカードの作成」です。
この時点で何を言ってるのか分からないと言う人も、分かりやすいようになるべく嚙み砕いて説明していきますのでご安心ください。

ではまず「列挙型を使ったゲームのフェーズ分け」からいきます。
この列挙型ですが今回どうやって使うかを簡単に説明しますと、数字に名前をつけるために使います。
数字に名前をつける理由ですが「単に何が書いてあるかを分かりやすくする」だけで、もちろん列挙型を使わなくても何かバグが起きたりせずに正常に動かせます。
しかし、その数字を見て処理を書き込んでいくので比較してみると

列挙型無し → 0 1 2 …
列挙型有り → GAME_START BATTLE RESULT …

こうなります。
今どういう状況なのかが理解しやすいのはどちらか、言うまでもありませんよね?
少し手間がかかったとしても分かりやすく書くような癖をつけておくとチームでゲームを作るときや過去に作ったプログラムを見直す時にとても役立ちます。

では次に「構造体を使ったカードの作成」についてです。
構造体はどのように使うかと言うと数字や文字等の複数の要素をまとめるのに使用します。
今回の場合ですと「数字」「マーク」「画像ファイルの名前」の3つですね、この3つの要素を1つにまとめて1枚のカードのデータとしました。
画像ファイルの名前は必須というわけではありませんが、後々描画の処理を書くときに書きやすくなるので今回は構造体の中に入れることにしました。

今回は主にゲームの骨組みを作る為のプログラミングをしました。
前回は仕様書という設計図を書き、今回はゲームの土台となる骨組みを作りましたので、次回からはカードの画像を実際に描画したりブラックジャックのゲームシステムを組んだりといった肉付けに入っていきます。
最後まで読んでいただきありがとうございました。

興味を持たれた方はお気軽にお問い合わせください。

Unityでポーカーを作る その2 カードの交換

こんにちは。インターン生の小玉です。
2日目です。特に初日のような説明は無かったので朝会の後すぐに制作に入りました。
カードを交換する。
言葉にすると1行ですが、それを作るとなると大分事情が変わってきます。
カードが選ばれているか、それはどのカードか、選ばれたカードを捨て、カードを引く。
大分処理が
まずは、カードが選べるようにCardにButtonをつけました。

これでカードを選べるようになりました。

次に、カードが選ばれてるかの変数を作り、画面上に選んだことがわかる「CHANGE」というテキストを変数により制御しました
カードが選び終わる、または選ぶ必要が無いなら交換を行います。
そのための「Change Button」を配置しました。
これを押したら交換が行われます。
前回作った「トップのカードを1枚引く関数」を使い、選ばれたカードにだけその処理を施すようにしました。
そしてできたので実行してみましょう。


6のツーペアからは変わりませんでしたが、うまく交換されているようです。

さて、お次は一番頭を悩ませるであろう役判定です。
ひとまずは、判定させる関数の枠を作り後は条件式を入れるだけです
それは次に考えます。

興味を持たれた方はお気軽にお問い合わせください。

6日で作るジャグリングゲームpart1

初めまして、インターン生の岸といいます。
今回はゲーム&ウォッチのボールを元にした
ジャグリングゲームを作っていきたいと思います。

今回はジャグリングゲームを作る工程を見せていく前に
ゲーム&ウォッチのボールとはどんなゲームかを見ていきます。

まずゲーム&ウォッチとは任天堂が1980年に発売した携帯型液晶ゲーム機です。
ゲームソフトを本体内のROMに書き込ませた1ハード1ソフトで
最近のゲームのようにカートリッジ交換で他のゲームを遊ぶことは出来ません。
ゲームをしない間は時計として機能し、
手軽に遊べる便利さが受けて社会現象にもなった作品で、
ボールはそのゲーム&ウォッチの第一作目です。

中央に映る人形の腕を左右にコントロールし空中から落ちてくる3つの玉を手で受け止め続け
一つでも落とせばゲームオーバーというゲームです。
続けているとボールの速度が早くなったり遅くなったりして、難易度が増していきます。

また、このボールのキャラクターをマリオに差し替えた
リメイク作品のマリオジャグラーというゲームもありました。

ゲームシステム的にはあまり変わりは無いですが
ボールの代わりにスターやボムが落ちてきます。

これでゲーム&ウォッチとそのボールの簡単な説明は以上になります。
次回はそんなボールに似たゲームの制作過程を見せていきたいと思います。
よろしければ是非読んでいただきたいです。

興味を持たれた方はお気軽にお問い合わせください。

六日で作るテトリス:Part1 落ち物パズルの元祖テトリスについて

はじめまして。インターン生の針ヶ谷と申します。
今回はテトリスを六日で作っていく風景をインターンの記事にしたいと思います。

初回は作成するテトリスについての簡単な説明をさせていただきます。

テトリスのオリジナルはソビエト連邦の科学者アレクセイの手で開発されました。
名前の由来は、正方形4つをつなげた多角形を意味する「テトロミノ」+イメージとしての「テニス」からきています。
そして1988年にセガ・エンタープライゼス(後のセガ・インタラクティブ)からアーケード版が発売されました。

こちらが当時のテトリスの画面になります。
その後テトリス事件によって任天堂がテトリスの独占ライセンスを得ることになり、1989年にゲームボーイでテトリスが発売されました。

また、テトリスの持つ数学性、動的性、知名度、並びに実装の平易性から、テトリスをゲームプログラミングの練習題材として用いられる例がしばしば見られますが、元々テトリスは教育用に作られたソフトであり役目通りの活躍を今でもしています。

遊び方は4つの正方形を組み合わせて作られた、テトリミノがフィールド上方からランダムに1種類ずつ落下してくる。
個々のテトリミノの名称は特にはありませんがプレイヤー間では、その形状により、
I-テトリミノ
O-テトリミノ
S-テトリミノ
Z-テトリミノ
J-テトリミノ
L-テトリミノ
T-テトリミノ

と七種類の名前で呼ばれています。
プレイヤーはテトリミノを左右90度単位で4方位に回転させるか、格子単位で左右に移動させるか、高速に落下させるかの複数の操作を落下中にすることができます。
このテトリミノを落とす場となるフィールドのサイズは、公式には縦20行 × 横10列とされています。
テトリミノがフィールド最下段、または他のテトリミノの上に着地するか引っかかると、そのテトリミノはブロックとしてフィールドに固定される。そして新しいテトリミノがフィールド上方に出現します。
格子の任意の1 – 4段がすべてブロックで埋め尽くされると、その段が消滅し、得点となります。
同時に多くの段(通常は最大4段)を消去する程高得点が得られます。
アレクセイは、テトリスで高得点を出すためにプレイヤーが学習すると考えました。
斯く言う私も、作成にテトリスを用いているので、アレクセイ氏のテトリス開発理由であった教育・学習を身をもって実践しています。

これにてテトリスの簡単な説明を終わらせていただきます。
次回からはテトリスの作成過程を記事にしていきたいと思いますのでお付き合いしていただけれると幸いです。

興味を持たれた方はお気軽にお問い合わせください。