一攫千金プログラミング~ボットdeジャックポット~
今日はホワイトデーではなく円周率の日。
いや、毎日円周率に含まれてるから毎日円周率の日か。
最近かじり始めたPythonでブラックジャックのゲームを遊んでます。
これっすね、
paizaっていう初心者向けサイトのもので、自分でコードを書いてディーラーからチップを巻き上げていくゲーム。
始めて思ったのはブラックジャックってエースが本当にいい仕事してる、エースがないのとあるのとではゲームの深みに天と地の差がある。
0.基本ルール
・手元のカードの合計が21により近い方が勝ち(ただし22以上はBustとなり負け)
・"HIT"でカードを引く、"STAND"で引かない(一度STANDしたらHITは基本できない)
(HITの上限は恐らく7回)
・BET数は範囲内で一戦ごとに指定
・連勝するたびに倍率が上がる (初期倍率×(1+コンボ数^2×0.1))
・同値はディーラーの勝ち
・プレイヤー側はディーラーに応じて相手の手札や山札を知ることができる
つまり、同値で負ける分を情報量+プログラミングの精度+連勝ボーナスで期待値をプラスにできればいいわけです。
1.自分の手札のカードしか分からないディーラー戦
実際のブラックジャックと近い状況の為、プログラミングのし甲斐がありますw
手札にエースを交えた時どう処理するかを考えるのが面倒でもあり面白いが、単純なHIGHLOWゲームなため"HIT"したときのBust確率を出せばいいだけなのかなとも思う。
序盤なのであまり複雑なプログラムを書いても仕方ない((
2.相手の手札が分かるディーラー戦
上記の1.にプラスして相手の処理の仕方が大きく影響してくる。
なので観察してメタれば圧勝できます。
3.全てのカードが分かるディーラー戦
最終戦です。
全てのカードが分かるなら余裕じゃね!?って思ったのも束の間、ここに来て痛感する「同値は負け」というルール。
極端な話こんな感じで「21」を3連続で出されたらそれだけで3連敗が確定する。
想像以上に起こりやすい事象なので、倍率が低いラスボスは手抜きプログラムでは期待値をプラスにできない。
またブラックジャックは山札が分かっていようと最初の2枚が弱いとまず勝てない、運要素が強いことも分かってくる。
4.バグ
山札が枯渇すると最後に引いた数字が無限に湧いてくるw
一つのトランプに1が7つもあってたまるかww
テーブルでの表示はこうなってました↓
右端のエースとダイヤの5の間に見えないエースが恐らく6個以上w
山札の枯渇なので例外処理も余儀なく要求されます。
他にも下限のBET数を下回る数値を出力した場合、カードを引く順番が滅茶苦茶になったりとなかなかの手抜き具合。
こんな過疎の手抜きゲーですが他人のコードも見れるので面白いですよ。
現在47位(過疎w)
※ネタバレ
5.山札の偏り
ラスボス戦においての最重要要素、BET数の意味が明白になります。
自分の場合、1戦目の勝率が60%以上、2戦目の勝率が50%以上、3戦目の勝率が40%以下でした。