スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

JavaScriptでポーカー作ってみた(プログラミングの話)

前の記事からの関連になります。

JavaScriptのプログラミングに関わるお話になるので、興味があまりない方は無理に読もうとしなくて全然構いません。

まず、ソースが欲しい方がいるかもしれないので、こちら に用意しておきました。
※2017/04/09 追記 ここから
ソースダウンロード先をgithubに変えました。
ソース一式をzipで欲しい方は、
リンク先を開く - 「Clone or download」ボタンクリック - 「Download ZIP」ボタンクリック
の操作からダウンロードできます。
※追記ここまで

Microsoft Visual Web Developer 2010 Express で開けれるようにしておきましたので、同開発ツールもしくは互換性のある開発ツールをお持ちの方はどうぞお使いください。
起動の際、動作させたいhtmファイルをスタートページに設定していただくよう、お願いします。

さて、ここでは以下の2つについてお話させて頂こうかと思います。
1.クラス
2.思考回路


1.クラス

今回のJavaScriptではクラスの考え方を思いきり取り入れました。
カードをカードクラスから生成したカードインスタンスで表現したかったのが主な理由です。

さて、JavaScriptでクラスの考えを取り入れてみたわけなのですが、大変でした。
型付けが弱いので、関数(メソッド)の引数に何の型のどんな値が入ってくるのか特定されず、関数を呼ぶときは慎重になってました。
この関数にはこのクラスのインスタンスが来るに決まっているんだ、などと勝手に決めつけて作っていたので、作りながらドキドキしてました。おかしなオブジェクト(空の配列とか)が来た時のエラーチェックはほんとに気まぐれで書いたり書かなかったりです。

やはりJavaScriptでクラスの考えを取り入れるのは、ほどほどにした方が良さそうです(もともとそんな言語ではないですしね)


2.思考回路
手札から不要なカードを捨てる思考回路を頑張って作ってみました。
手札が何の役かどうかの判定は楽なのですが、イーシャンテン((麻雀用語)役完成まであと1つの状態)かどうかの判定は難易度がちょっと高かったです。
フラッシュの場合だと 手札5枚中4枚同じスート or 3枚同じスート+ジョーカー かどうか判定するだけなので、楽でした。
フルハウス系(ツーペアやスリーカードなど)は、ジョーカーが含まれいるかどうか注意しながら組んでいけば良かったのでこれもまだ楽でした。
例:[JK]抜きでツーペア+[JK] = フルハウス

厄介なのはストレート。
ストレートまであと1枚の状態というのは、次の4パターンあります。
ストレートを構成している4枚が、
・連番([4][5][6][7][K])
・歯抜け([4][5][7][8][K])
・連番3枚+ジョーカー([4][5][6][K][JK])
・歯抜け3枚+ジョーカー([4][5][7][K][JK])
そしてエース始まりのストレート([A][2][3][4][5])、エース終わりのストレート([10][J][Q][K][A])の考慮も必要です。
リアルで人とやっているときにはどのカードを捨てればいいかすぐに分かるのに、プログラムで書こうとするとほんとに唸り声がでました(たぶん、その気持ちは伝わらないでしょうけど)
考えに考え、やっと思いついた方法は、ジョーカーが何のカードに化けているか最初に調査&置換し、そしてストレートの完成形と比べて何のカードが不要かを調べるという方法でした。
こんな感じ:[4][5][7][K][JK] -> [4][5][6][7][K] -> [4][5][6][7][8]にしたいので[K]が不要

もっといい方法は他にないんでしょうか。
作っている最中はあえてネットなどで調べずに試行錯誤してましたが、これよりもスマートな方法があるような気がしてならないです。

うーん、とりあえずできたので良しとしますか・・・。


以上です。
もしアドバイス等頂けるようでしたら、ありがたく思います。
それでは!

2017/04/09
Dropbox Publicフォルダー廃止対応
ソースダウンロード先をgithubに変更
関連記事
[ 2013/12/15 22:36 ] プログラミング JavaScript | TB(0) | CM(0)

コメントの投稿













管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://kiyoshiroom.blog.fc2.com/tb.php/156-8d62d862









上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。