Leader;平尾 仲達 Programmer;古川 智啓 Player , Algorithmer; 長畑 弘樹,吉村 達也,河本 拓哉 1
作成方針 プログラムの作成する人と,アルゴリズムを考える人にわかれて作業を進めた。 メンバーの中でパソコンを使い慣れている古川にプログラムの作成をメインで進めてもらった。 他のメンバーで,アルゴリズムを考えた。
アルゴリズムの方針 基本ルールの確認 追加ルールの決定 人がプレイする時の思考方法の確認 半アルゴリズム化 アルゴリズムの作成 半Algorithmを利用して,フローチャートを作成 プログラムを作成 3
大富豪 基本ルール 大富豪とは,トランプゲームの一種である。 カードは52(~54枚)をプレイヤーに均等にすべて配り分ける。 大富豪 基本ルール 大富豪とは,トランプゲームの一種である。 カードは52(~54枚)をプレイヤーに均等にすべて配り分ける。 カードの強弱は弱い順に3,4,5,…,K,A,2である。 最初の人は,好きなカードを場に出すことができる。出し方は,同じ数字を複数枚出すことができる。1枚の時をシングル,2枚の時をペア,3枚の時をトリプルと呼ぶこともある。 基本的に時計回りで順番が回り,自分の番に場に出ているカードより強い,同じ枚数のカードを出す。出せるカードがないときや,出したくないときは,パスをする。 最後に出した人以外全員パスをしたら,場が流れ,最後に出した人が場にカードを出す。 手札を先に全部出した人の勝ちになる。全員が上がるまで,ゲームを続け,順位を決める。 4
大富豪 採用追加ルール 4人プレイ 革命 八流し(八切り) イレブンバック(バック) 大富豪 採用追加ルール 4人プレイ 革命 4枚同じ数を同時に出したときから,3から2までの強さが逆転する。 一度革命された後に(3が強いときに)革命することを,革命返しということもある。 八流し(八切り) 8を出したら,場のカードが流れる。 イレブンバック(バック) 11を出したときにその場が流れるまで革命状態になる。 5
人の思考 何もない場に出す時 何か出ている場に出す時 革命 8流し イレブンバック 手札が多いとき 手札が少ないとき 弱いカードから出す。シングル(ペア,トリプルになってないカード)の手札から出す。 手札が少ないとき 他の人に上がられないように,かつ自分が上がれるように出す。手札により様々に出し方が変化する。 何か出ている場に出す時 出せるカード中で弱いカードから使う。強いカードは出せる場面があっても出さない。ペアやトリプル,4枚はなるべく崩さない。 勝てると思ったときに強いカードを使う。弱いカードをなるべく残さない。 革命 革命対策で最弱カードを手札に残しておく。 革命時,強弱を入れ替えて思考する。 8流し 最後のほうに場を流すために使う。 イレブンバック 手札に最弱カードを残しておいて,Jackが出てきたときに使う。 6
半アルゴリズム化(1) Algorithmを考える上で,3~10までの数値はそのままの数値として扱う。J→11,Q→12,K→13,A→14,2→15として扱う。 手札の種類で,序盤(3種類以下),中盤(4種類),終盤(5種類以上)というように場合分けをする。 7
半アルゴリズム化(2) 何もない場への出し方 序盤と中盤(4種類以上) 最弱カードを除いたカードから出す。ペアよりシングルの手札から出す。 シングル>ペア>トリプルの順に出しやすくするために,ペアのときはカードの値+4.5,トリプルのときはカードの値+7.75の修正値を与えて,出すカードの順位を評価させる。 終盤(3種類以下) 2と8が同時に手札にあれば,8,2の順に出す。 それ以外の時は,弱いカードから出す。 8
半アルゴリズム化(3) 場にシングルカードが出ている時 場にペアやトリプルが出ている時 序盤,中盤は出すことができるペアやトリプル以外の弱いカードから出す。Q以上のトリプルは崩して出す。最強カードは出さない。 終盤はペアを崩してでも積極的に出す。 場にペアやトリプルが出ている時 序盤,中盤は最強カード以外のカードで出すことができる弱いカードから出す。 終盤は積極的に出す。 9
場;Empty(なにも出ていない) 何種類カードを持っている? 最弱カード(3or4)を残す 8を所持? 8をだす 弱いものを出す アルゴリズム化 場;Empty(なにも出ていない) 何種類カードを持っている? 3種類 以下 4種類以上 最弱カード(3or4)を残す 8を所持? yes no 8をだす 弱いものを出す ダブル→カードの値+4.5 トリプル→カードの値+7.75 4枚は3,4,5とK,A,2の枚数を比較 2を持っている? yes no 値の小さいものを出す 2を出す 弱いものから出す
場;ダブル 4種類以上所持 場;カードが3? 考慮カード;手札に3枚? 手札;3を所持? 考慮カード;手札に2枚ちょうど? アルゴリズム化 場;ダブル 4種類以上所持 場;カードが3? Yes No Yes No 考慮カード;手札に3枚? 手札;3を所持? 考慮カード;手札に2枚ちょうど? Yes No Yes No Yes 考慮カード=場のカード+2 出す 考慮カード=場のカード+1 考慮カード⇒考慮カード+1 No 考慮カード;手札に2枚ちょうど? 出す No Yes 考慮カード;12以上? No 考慮カード;最強の手持ちカード? Yes PASS
場:Empty 非革命 4種類以上所持 i=1 c[i] (カードの枚数) 1 2 3 4 cs[i]=100 cs[i]=i Flowchart 場:Empty 非革命 4種類以上所持 i=1 c[i] (カードの枚数) 1 2 3 4 cs[i]=100 cs[i]=i cs[i]=i+4.5 cs[i]=i+7.75 i++ i=>14
場:Empty 非革命 4種類以上所持 i 6<=i<=12 3<=i<=5 i=1,2 i=13 4 Flowchart 場:Empty 非革命 4種類以上所持 4 i 6<=i<=12 3<=i<=5 i=1,2 i=13 3・c[3]+2・c[4]+1・c[5] >3・c[2]+2・c[1]+1・c[13] 3・c[3]+2・c[4]+1・c[5] >3・c[2]+2・c[1]+1・c[13]-(1+i)・c[i] yes no yes no cs[i]=-20 cs[i]=50 cs[i]=-20 cs[i]=50 3・c[3]+2・c[4]+1・c[5] >3・c[2]+2・c[1] 3・c[3]+2・c[4]+1・c[5]-(6-i)・c[i] >3・c[2]+2・c[1]+1・c[13] yes no yes no cs[i]=-20 cs[i]=-20 cs[i]=50 cs[i]=50 16
場:Empty 非革命 4種類以上所持 i=1 c[i] (カードの枚数) 1 2 3 4 no cs[i]=100 cs[i]=i Flowchart 場:Empty 非革命 4種類以上所持 i=1 c[i] (カードの枚数) 1 2 3 4 no cs[i]=100 cs[i]=i cs[i]=i+4.5 cs[i]=i+7.75 i++ i=>14 yes cs[1]=cs[1]+13,cs[2]=cs[2]+13,cs[3]=cs[3]+20,cs[8]=cs[8]+20 no cs[4]=cs[4] c[3]=0 MINcs[i]を出す yes cs[4]=cs[4]+20
プログラム構造 CPUクラスの プログラムを変更 MainPanelクラス CardDeckクラス Cardクラス Fieldクラス Programming プログラム構造 MainPanelクラス メイン画面の制御。結果の表示などを行う。 CPUクラスの プログラムを変更 CardDeckクラス Playerのインスタンスにカード1~52を配る。 Cardクラス 配られた整数表現のカードに柄とナンバーを与える。 Fieldクラス 場の状態を管理する。 カードの強弱の判断も行う。 Playerクラス プレイヤーのコンストラクタ。 プレイヤーの各定義。 Userクラス 人間が扱うPlayerについての記述 CPUクラス CPUが扱うPlayerについての記述。思考
プログラム変更 Playerクラス CPUクラス Programming 持っているカードの種類の数を表す変数kindと出しやすさの指標である配列cs[ ]を定義 CPUクラス 元のプログラム 変更後のプログラム 場合分けの仕方 革命の場合 場にカードがない場合 場にカードがある場合 革命でない場合 カードの出し方 ルールに従って所持しているカードのうち弱いものから順に出す。 場合分けの仕方 元のプログラム中のおのおのの場にカードがある・ない場合の中にCPが所持しているカードの種類に応じたプログラムを追加。 カードの出し方 アルゴリズムに従って行動するようにプログラム。
結果 改造前の対戦結果 改造後の対戦結果 25回中 期待値・・・1.16位 25回 期待値・・・1.88位 1位・・・23回(92%) 2位・・・1回(4%) 4位・・・1回(4%) 期待値・・・1.16位 改造後の対戦結果 25回 1位・・・12回(48%) 2位・・・6回(24%) 3位・・・5回(20%) 4位・・・2回(8%) 期待値・・・1.88位
考察 元のプログラムより強くなった。 元のプログラムから引き継いだバグは解決できなかった。 停止するバグが多い。 できればもっと,人の思考に近付けたアルゴリズムを考えたい。
感想 今回完成した大富豪に当初考えていたアルゴリズムすべてを組み込むことは出来ませんでした。半アルゴリズム化の時点ではより人の考えに近いカードの切り方を検討していたのですが実際それをアルゴリズム化してプログラムすることは非常に難しく、私たちが普段何気なく行う判断がいかに複雑かを知る良い機会となりました。
Thanks for your listening Member of Group Tatsuya Yoshimura Takuya Komoto Hiroki Nagahata Tomohiro Furukawa Chutatsu Hirao Thanks for your listening Staff Roll 大富豪 Reference 2008 F-Daifugo Produced by 2009-A group Algorithmer Tatsuya Yoshimura Takuya Komoto Hiroki Nagahata PowerPoint made by Tomohiro Furukawa Chutatsu Hirao Programmer Tomohiro Furukawa Leader Chutatsu Hirao The End