がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ブラックジャックを設計してみる:おまけでポーカー

前提は似たようなもんで、とりあえず「ユーザを特定できる(authenticationは必要ないので、authorizationが出来る)」。
PHPだと、session機能使うと楽ですな。


カジノでの「サシの」ポーカーを一端想定してまふ。


ユーザから「ページを表示する」リクエストが来ます。poker.phpとかいうプログラムと仮定しましょう。
session情報に「なにもない」場合、new gameってことで、インスタンスを作ります。
ゲームの開始なので「掛け金」がrequestされているはずです。掛け金が0ならエラーreturnします。
とりあえず
・トランプ一式を、シャッフルした状態
で持っているクラス。
このクラスをnewします。


んで。ポーカーの場合は
・山からカードを5枚引いて、親の手札に入れる
・山からカードを5枚引いて、子の手札に入れる
って操作をしておきます。


クラスの中は
・山札(52枚から10枚引かれてるので、42枚)
・親の手札(5枚)
・子の手札(5枚)
って感じ。
このインスタンスをセッションに保存しておきます(インスタンスの保存の仕方は、おまけ http://d.hatena.ne.jp/gallu/20140625/p5 を参照)。


レスポンスとしては
・子の手札5枚ともの、スートと数字の情報
を含む情報をレスポンスします。


次のリクエストでは「チェンジ」のrequestが来るはずなので。
チェンジのリクエストでは「手札の1番目と3番目」のように、1〜5(0〜4でも可)の、数値だけを受け取ります。
受け取ったリクエストに従って
・子の手札を捨てて、山から引いてカード入れ替え
・親が、AIに従って「カードを捨てて山から引いてカードを入れ替え」
をして、インスタンスをセッションに保存、「子の手札5枚ともの、スートと数字の情報」「親がチェンジした枚数」を含む情報をレスポンスします。


で、適当に「掛け金の駆け引き」の通信経由で、勝敗を決めます。


いずれにしてもコツがあるとすると
・カードの情報は全部サーバ側で持っている事
・通信には「こういう事をしたい」という意図だけを載せること
くらいかしらん。