ブラックジャック

ブラックジャック
リーダー
プログラム
アルゴリズム
ユーザー
プレゼン
辻元健照
北川泰士
水野雄太
松田邦久
戸所風士
ルール
1.Aは1か11とし、絵札(ジョーカーを含む)は
すべて10とする。
2.コンピューターが親を務める。
3.10回の勝負を終えた時点でポイントが高い
ほうの勝ちとする。
4.はじめに2枚ずつカードを配り2枚目は伏せ
ておく。
5.プレイヤーがプレイを終了するまで親はカー
ドを引かない。
ルール(勝敗)
1.カードの合計を21に近づけて、より近いほうが
勝ちとする。(同じ数のときは親の勝ちとする。)
2.21を超えた場合はバーストとし、バースト以外
のすべての数に負ける。
3.5枚引いて合計が21以下のとき、4枚以下の
手には勝つ。
4.6枚、7枚…についても同様。
ポイント制について





子は1枚目のカードを見たところで賭けるポイ
ント(1~5点)を宣言する。勝てばそのポイン
トをプラスし、負けた方はマイナスにする。ま
たポイントはお互いの手札で変化する。
ブラックジャック(21ちょうど)‥2倍
ジョーカーを含む場合‥3倍
5枚で21以内‥5倍(ブラックジャックより強
い)
6枚で21以内‥10倍
アルゴリズムの基本原理


親(COM)は見えているカードから子の手札
を予想する。(画面では子のカードは2枚目も
見えているが、COM側からは2枚目は見えて
いない)
次のカードを引くかは見えているカードの合
計と順番で判断する。判断の方法は確率の
みに頼らず、人間の経験と感覚を重視し、繰
り返し検証(プレイ)することで決定した。
アルゴリズム1
前提として親は自分のカード合計が11以下
ならカードを引く。
 以下、子のカードの枚数やカードの数字に
よって場合分けしたアルゴリズムを記す。
 また、ここでは子のカードを1枚目から順に
X, ?, Y, Z とおく。

アルゴリズム2(子が2枚)
ⅰ)
ⅱ)
ⅲ)
X が「A」・・・
親≦17・・・次のカードを引く(HIT)
親≧18・・・次のカードを引かない
(引かないケースは以下略)
〃 「2」・・・
親≦11・・・HIT(前提条件)
〃 「3」・・・
親≦13・・・HIT
アルゴリズム3(子が2枚)
ⅳ)
ⅴ)
ⅵ)
ⅶ)
X が「4」・・・
親≦13・・・HIT
〃
「5」・・・
親≦14・・・HIT
〃
「6」・・・
親≦15・・・HIT
〃
「7」・・・
親≦16・・・HIT
アルゴリズム4(子が2枚)
ⅷ)
X
が「8」・・・
(a)親の1枚目≧ 「8」 の時
親≦16・・・HIT
親=17・・・1/2でHIT
(b)親の1枚目≦「7」
親≦16・・・HIT
アルゴリズム5(子が2枚)
ⅸ)
X
が「9」・・・
(a)親の1枚目≦「6」・・・
親≦17・・・HIT
(b)親の1枚目=「7」・・・
親≦16・・・HIT
親=17・・・1/2でHIT
(c)親の1枚目≧「8」・・・
親≦16・・・HIT
ⅹ)
〃
「10」・・・
親≦17・・・HIT
アルゴリズム6(子が3枚)
ⅰ)X+Y ≧17・・・
親≦11・・・HIT(前提条件)
ⅱ) 〃 =16・・・
(a) X
≧9・・・親≦15・・・HIT
(b) X
≦8・・・親≦11・・・HIT
ⅲ) 〃 =15・・・
(a) X
≧8・・・親≦15・・・HIT
(b) X
=7・・・親≦15なら1/2でHIT
(c) X
≦6・・・親≦ 11・・・HIT
アルゴリズム7(子が3枚)
ⅳ)X+Y =14 ・・・
(a) X
≧6・・・親≦15・・・HIT
(b) X
≦5・・・親≦ 15なら1/2でHIT
ⅴ) 〃 =13・・・
(a) X
≧4・・・親≦15・・・HIT
(b) X
=3・・・親≦15なら1/2でHIT
アルゴリズム8(子が4枚)
ⅰ)X+Y ≧20・・・
親≦11・・・HIT(前提条件)
ⅱ) 〃 =19・・・
(a) Z
=「A」・・・親≦20・・・HIT
(b) Z
≧「2」・・・親≦11・・・HIT(前提条件)
ⅲ) 〃 =18・・・
(a) Z
=「A」・・・親≦19・・・HIT
(b) Z
≧「2」・・・親≦11・・・HIT(前提条件)
(c) Z
=「A」・・・親≦20・・・HIT
ⅳ) 〃 =17・・・
(a) Z
=「A」・・・親≦18・・・HIT
(b) Z
≧「2」・・・親≦11・・・HIT(前提条件)
アルゴリズム9(子が4枚)
ⅴ)X+Y =16・・・
(a) Z =「A」・・・親≦17・・・HIT
(b) Z =「2」・・・親≦18・・・HIT
(c) Z =「3」・・・親≦19・・・1/2でHIT
(d) Z ≧「4」・・・親≦11・・・HIT(前提条件)
ⅵ) X+Y =15
(a) Z =「A」・・・親≦16・・・HIT
(b) Z =「2」・・・親≦17・・・HIT
(c) Z =「3」・・・親≦18・・・HIT
(d) Z =「4」・・・親≦19・・・HIT
(e) Z ≧「5」・・・親≦11・・・HIT(前提条件)
アルゴリズム10(子が4枚)
ⅶ)X+Y =14・・・
(a) Z =「A」・・・親≦15・・・HIT
(b) Z =「2」・・・親≦16・・・HIT
(c) Z =「3」・・・親≦18・・・HIT
(d) Z =「4」・・・親≦18・・・HIT
(e) Z ≧「5」・・・親≦11・・・HIT(前提条件)
Ⅷ) X+Y =13・・・
(a) Z =「A」、「2」・・・親≦15・・・HIT
(b) Z =「3」・・・親≦16・・・HIT
(c) Z =「4」・・・親≦17・・・HIT
(d) Z =「5」・・・親≦18・・・HIT
(e) Z ≧「6」・・・親≦11・・・HIT(前提条件)
アルゴリズム11(子が4枚)
ⅸ) X+Y =12・・・
(a) Z ≦「3」・・・親≦15・・・HIT
(b) Z =「4」・・・親≦16・・・HIT
(c) Z =「5」・・・親≦17・・・HIT
(d) Z =「6」・・・親≦18・・・HIT
(e) Z ≧「7」・・・親≦11・・・HIT(前提条件)
ⅹ) X+Y =11・・・
(a) Z ≦「4」・・・親≦15・・・HIT
(b) Z =「5」・・・親≦16・・・HIT
(c) Z =「6」・・・親≦18・・・HIT
(d) Z =「7」・・・親≦18・・・1/2でHIT
(e) Z ≧「8」・・・親≦11・・・HIT(前提条件)
アルゴリズム12(子が4枚)
ⅹⅰ) X+Y =10・・・
(a) Z
(b) Z
(c) Z
(d) Z
ⅹⅱ) X+Y
(a) Z
(b) Z
(c) Z
≦「5」・・・親≦15・・・HIT
=「6」・・・親≦16・・・HIT
=「7」・・・親≦18・・・1/2でHIT
≧「8」・・・親≦11・・・HIT(前提条件)
=9・・・
≦「6」・・・親≦15・・・HIT
=「7」・・・親≦16・・・1/2でHIT
≧「8」・・・親≦11・・・HIT(前提条件)
アルゴリズム13(子が4枚)
ⅹⅲ) X+Y =8・・・
(a) Z ≦「7」・・・親≦16・・・1/2でHIT
(b) Z ≧「8」・・・親≦11・・・HIT(前提条件)
ⅹⅳ) X+Y =7・・・
親≦15・・・HIT
アルゴリズム14(子が5枚)
ⅰ)5枚目≧「7」・・・
親≦11・・・HIT(前提条件)
ⅱ) 〃 =「6」・・・
(a) X+Y+Z ≧12
親≦11・・・HIT(前提条件)
(b)
〃
≦11
5枚目まで引く
ⅲ) 〃 =「5」・・・
(a) X+Y+Z ≧13
親≦11・・・HIT(前提条件)
(b)
〃
≦12
5枚目まで引く
アルゴリズム15(子が6枚以上)
バーストとみなし、
親≦11・・・HIT(前提条件)
検証結果1

実際このアルゴリズムの元、人の手によって
プレイしたところ、
親
-
子
83勝 - 59勝
でした。
(割合
7 - 5
)
検証結果2

勝敗を見ると、親が少々強いような気がする
がアルゴリズムの作成としては満足のいくも
のであり、また、ポイント制をうまく使うことに
よって、子がちょうど勝つくらいの結果になっ
た。
作成結果1



今回ブラックジャックのプログラミングはインターネッ
ト上にあるjavaを編集して行ったが、ルールや大元
となるプログラム、設定が大きく異なっていたため、
実際にプログラミングできたものは以上に記したよう
なアルゴリズムとは大きくずれたものとなってしまっ
た。
今回のアルゴリズムでは親が子のカードを見て判断
するというものになっていたが、時間の関係もあり、
プログラミング上それが困難だとわかり断念してし
まった。
実際に作成したアルゴリズムは次のようになる。
作成結果2
親は自分のカードだけを見て判断する。
1、親カード合計=17・・・20%でHIT
=16・・・40%でHIT
=15・・・55%でHIT
=14・・・65%でHIT
=13・・・HIT
感想・あとがき
プログラミングの完成には至らなかったのはア
ルゴリズムを完全に完成してからプログラミン
グに取り掛かったため、何が無理で、何がで
きることなのかの見極めができなかったことも
原因だと思われる。
個人的には結果からもわかるように人より強い
アルゴリズムが完成したということだけでも満
足している。
課題としては不完全であるが、グループワーク
の時間は十分にとれ、みんな協力てきだった
のでとても助かった。
(リーダー:辻元)