乱反射の光跡 in hatenablog

なみへいのブログです。hatenablogヴァージョン。

BlackJack制作ノート その2

その2 作戦会議(笑)


さて、とにかくゲームを作ってみましょう。初めて作るものなので、とりあえず「試作品」です。


まずは、ゲームの設定というか、設計というか、仕様というか、大まかな全体像を考えてみます。行き当たりばったりで作る方法もあるのですが(笑)、それだと完成しなくなる恐れが充分にあるので(笑)。そうでなくても、完成できるのかどうか怪しい、というのに。
まあ、プログラミングを職業にしている人ならば、最初に何をやればいいか、必要なものは何なのか、分かっているのでしょうけど、僕自身はそこからし五里霧中(笑)。
とにかく、ゲームの内容を大ざっぱに決めていきましょう。
まず、プレイヤーはひとり。複数にしてもいいけど、試作版ということで、極力簡単なものにしておきたいと思います。


画面上必要なものは、プレイヤーとディーラーの手札を表示する、カードの画像と表示スペース、プレイヤーの手持ちの金額、ベットする金額、「手」を選択するためのボタンが必要なだけ。まあ、そんなところから考えてみましょう。
画面に表示するものと同時に、ゲームを動かすための内部で扱う変数というか、オブジェクトについても考えていかなくてはなりません。
プレイヤーの手札を表すオブジェクト、ディーラーの手札を示すオブジェクト、シャッフルされたカードを納めるオブジェクト、プレイヤーの持ち金と賭け金を管理する変数。そんなところが主なものでしょうか。


どうせならカードゲーム全般に使えるものを作ってもいいかもしれない。
そんな気分もあって(笑)、今回は1枚のカードを「オブジェクト」として作ることにしました。1枚のカードにはそのカードの種類の情報、カードが持つ点数の情報、そのカードの絵柄(画面表示のための)の情報を持たせましょうか。


カードを表現するオブジェクトのクラス名を「NNCard」とします。「NN」というのはCocoaのクラス名が「NS」で始まるように、他で作られたクラス定義と重ならないよう、一応つけてみた「僕の作ったクラス」という接頭辞。まあ、なくてもいいんですが、何となくカッコいいかな、などと思ったので(笑)。
そしてこのNNCardオブジェクトの集合として、ひとかたまりのカードの「山」を定義するクラスも用意しておきましょう。これを「NNDeck」としておきます。
これは一組のカード(52枚セットの)を意味するクラスでもあるのですが、『マルドゥック・スクランブル』のように6組ものカードを使う場合も考えられるので、「何組のカードを使うか」は引数として与えることにしておきましょう。


実はこのふたつのクラス、Cocoa-Java Applicationで使うために「Javaクラス」として作ったこともあるのですが。そのコードは、ホームページの方で公開することにします。こちらから見てみてください。


さて、実際のゲームですが。
「ヒット」や「ステイ」「サレンダー」、「ダブルダウン」と「イーヴンマネー」はともかく、「スプリット」は画面表示までもががらりと変わってしまうことになります。しかも『マルドゥック・スクランブル』によれば「スプリット」は何回でも可能。ということはプレイヤーのカードがどこまで多くなるかは、ちょっと考えただけでは上限が見えません。
これは怖い(笑)。
もしも使うカードの組をいくらでも選べるのなら、それこそ「20組のカードを使えば、スプリットが80回続く」可能性もある訳で(笑)。これはちょっと、初心者が対処できる問題ではないのではないか、とか(笑)。


そこまで考えたりしていると、初心者にはいつまでたってもソースコードを書くところまで行きません(笑)。それで、「スプリット」は今後の課題として、その他の(カードを分割しなくてよい)プレイは生かすこととして、ゲームを作っていきたいと考えました。
ちなみに、「サレンダー」もなし。理由は、「コンピュータ相手に『降りて』もしょうがないだろう」というもの。どうせゲームです。破滅もまた、ゲームだからこそ(笑)。ただのCPU相手に「降りて」も意味がないでしょ?(笑)


という訳で、「スプリット」と「サレンダー」を除いて、その他はボタンで選べるようにして、プログラムを作成することに。
さて、いよいよ、Xcodeを起動して、「戦闘開始」です(笑)。