リーダー 辻元健照 プログラム 北川泰士 アルゴリズム 水野雄太 ユーザー 松田邦久 プレゼン 戸所風士 ブラックジャック リーダー 辻元健照 プログラム 北川泰士 アルゴリズム 水野雄太 ユーザー 松田邦久 プレゼン 戸所風士
ルール 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・・・次のカードを引かない 親≧18・・・次のカードを引かない (引かないケースは以下略) ⅱ) 〃 「2」・・・ 親≦11・・・HIT(前提条件) ⅲ) 〃 「3」・・・ 親≦13・・・HIT
アルゴリズム3(子が2枚) ⅳ) X が「4」・・・ 親≦13・・・HIT ⅴ) 〃 「5」・・・ 親≦14・・・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」・・・ (c)親の1枚目≧「8」・・・ ⅹ) 〃 「10」・・・
アルゴリズム6(子が3枚) ⅰ)X+Y ≧17・・・ 親≦11・・・HIT(前提条件) ⅱ) 〃 =16・・・ ⅱ) 〃 =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・・・ ⅱ) 〃 =19・・・ (a) Z =「A」・・・親≦20・・・HIT (b) Z ≧「2」・・・親≦11・・・HIT(前提条件) ⅲ) 〃 =18・・・ (a) Z =「A」・・・親≦19・・・HIT (c) Z =「A」・・・親≦20・・・HIT ⅳ) 〃 =17・・・ (a) Z =「A」・・・親≦18・・・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 ≦「5」・・・親≦15・・・HIT (b) Z =「6」・・・親≦16・・・HIT (c) Z =「7」・・・親≦18・・・1/2でHIT (d) Z ≧「8」・・・親≦11・・・HIT(前提条件) ⅹⅱ) X+Y =9・・・ (a) Z ≦「6」・・・親≦15・・・HIT (b) Z =「7」・・・親≦16・・・1/2でHIT (c) Z ≧「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」・・・ ⅱ) 〃 =「6」・・・ (a) X+Y+Z ≧12 親≦11・・・HIT(前提条件) (b) 〃 ≦11 5枚目まで引く ⅲ) 〃 =「5」・・・ (a) X+Y+Z ≧13 (b) 〃 ≦12
アルゴリズム15(子が6枚以上) バーストとみなし、 親≦11・・・HIT(前提条件)
検証結果1 実際このアルゴリズムの元、人の手によってプレイしたところ、 親 - 子 83勝 - 59勝 でした。 (割合 7 - 5 )
検証結果2 勝敗を見ると、親が少々強いような気がするがアルゴリズムの作成としては満足のいくものであり、また、ポイント制をうまく使うことによって、子がちょうど勝つくらいの結果になった。
作成結果1 今回ブラックジャックのプログラミングはインターネット上にあるjavaを編集して行ったが、ルールや大元となるプログラム、設定が大きく異なっていたため、実際にプログラミングできたものは以上に記したようなアルゴリズムとは大きくずれたものとなってしまった。 今回のアルゴリズムでは親が子のカードを見て判断するというものになっていたが、時間の関係もあり、プログラミング上それが困難だとわかり断念してしまった。 実際に作成したアルゴリズムは次のようになる。
作成結果2 親は自分のカードだけを見て判断する。 1、親カード合計=17・・・20%でHIT =16・・・40%でHIT
感想・あとがき プログラミングの完成には至らなかったのはアルゴリズムを完全に完成してからプログラミングに取り掛かったため、何が無理で、何ができることなのかの見極めができなかったことも原因だと思われる。 個人的には結果からもわかるように人より強いアルゴリズムが完成したということだけでも満足している。 課題としては不完全であるが、グループワークの時間は十分にとれ、みんな協力てきだったのでとても助かった。 (リーダー:辻元)