A班 大富豪

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