よかひよかとき     花札(HTML版)   花札(Java版)


パソコンで 「花札」を作るにあたって、役の配点についての考察


 花札は、決められた役を揃え、相手より高得点を競うゲームである。役の配点には特に定まったものはなく、行う人によって適切に定めればよいのであるが、
   (役の期待値)=(役の配点)×(役のできる確率)
として、どの役に対してもその期待値がほぼ等しくなるようにするのが、ゲームをおもしろくする要点であると考えられる。したがって、その役ができる確率を得る必要にせまられる。

 花札の場合長い歴史の結果、役ができるおおよその確率は経験的に知られ、配点は自然に落ち着くところに落ち着いていて、人によって異なりはあってもそれほど大差はないものと思われる。したがって、パソコンゲーム「花札」を作るにあたっても、それらの幾つかを参考にして役の配点を定めることもできる。そうなのであるが、役のできる確率を理論的に計算できるものならばそれに越したことはあるまい。

 ところが、役のできる確率を理論的に厳密に求めることは、容易なことではないということにすぐに気付かされる。その因はルールの複雑さにあることは言うまでもない。また、互いに高得点を目指すプレーヤの取る手法自体が役のできる確率に影響を及ぼす。さらに、いったん役の配点を定めたとして、その配点自体がプレーヤの取る手法に影響を与える。このような複雑な経過を経て最終的に落ち着くところに落ち着いたものが、適切な役のできる確率であり、役の配点となる。

 すなわち、先に役のできる確率だけを単独に求めることはできなく、2人のプレーヤーの戦法や手腕も関わって決まる。このようなことを正しく表した多元連立方程式なるものができるなら、コンピュータを用いて数値計算でも行えば目的を達成できるであろう。しかしながら、このようなことを正しく数式で表すにはどうしたらよいのか。私の頭脳をもってしては、ただただ途方に暮れるのみである。

 そこで、役のできる確率として次のように簡単に定義する。まず、2人のプレーヤーが全く思考をしないとする。すなわち、自分の手番になったとき手持ち札の1枚をランダムに選び場に出す。また、めくった山札に対して同種の札が場に2枚あったときはランダムにどちらかを選ぶ。この条件のもとで、役のできる確率をその役のできる確率とする。

 これなら私の弱い頭脳でもなんとか確率を厳密に計算できるように思う。ということで、私がもう少し若くて元気があればそれに挑戦するところなのだが、そう若くはないし、またなんでもパソコンに頼って楽をしたがるズボラな私は、パソコンでシミュレーションしてみることを思いついた。

 ● まず、花札のルールにそったパソコンゲームを作る。2人のプレーヤーは、どちらもコンピュータとし、COM(A) と COM(B) とする。ただし得点はいっさい計算しないし、勝敗も付けない。したがって、役の配点は定めておく必要はない。札の点は、フケの回数を調べるために、3種の札に対して5点、1点、0点とし、役ができたときやシマ札が出来たときはフケにはしない。
 ● COM(A) と COM(B) には、全く思考はさせない。すなわち、自分の手番になったら、手札からランダムに1枚選びそれを場に出す。また、山札を1枚めくったとき、場札に同種の札が2枚あったときはそのうちの1枚をランダムに選ぶ。
 ● このようなやり方で、ゲームを1000000回行なわせ、どの役が何回出来たかをカウントする。

 結果を 表-1 に示す。この試行では、COM(A) を常に親(先手)にして行った。先手、後手によって役のできる回数に有意差があるように見える。また、「十短」については、1000000回の試行では回数が足りないと思われる。これらのことより、「十短」を除き、計の回数で役のできる確率を求めた。

表-1  1000000回ゲームを行って求めた、役のできる確率
      ※ COM(A) が常に親(先手)

COM(A)COM(B)
十短00.0000050.000005
七短0.0002520.0003400.000592
六光0.0010510.0012770.002328
五光0.0026540.0029880.005642
四光0.0088190.0097740.018593
松桐坊主0.0276100.0299700.057580
てっぽう0.0276850.0296180.057303
猪鹿蝶0.0402210.0439620.084183
月見で一杯0.0547560.0566750.111431
花見で一杯0.0546240.0562420.110866
大山0.0389360.0426020.081538
小山0.0408050.0437050.084510
赤短0.0402690.0436340.083903
青短0.0402330.0434070.083640
ニゾロ0.1071920.1193300.226522
フケ0.0137440.0112460.024990
(0点フケ)0.0000750.0000530.000128
(1点フケ)0.0007680.0005970.001365
(2点フケ)0.0033920.0026890.006081
(3点フケ)0.0095090.0079070.017416

 七短の配点=10000点 としたとき、七短の期待値=10000×0.000592=5.92 となる。そこで、役の期待値が 5.92 になるように、他の役の配点を定めると、表-2 で配点-1 のようになる。

表-2  役の配点(点)
 配点-1配点-2
十短 1000000
七短1000010000
六光25432500
五光10491000
四光318300
松桐坊主103100
てっぽう103100
猪鹿蝶7070
月見で一杯5350
花見で一杯5350
大山7270
小山6970
赤短6970
青短6970
ニゾロ2530
フケ237(相手の得点)

 このようにして定めた 配点-1 において、区切りのよい配点に修正したものが 配点-2 である。配点-2 では、十短の配点はそのおおよそのできる確率から考えて、1000000点 とした。また、自分の得点が3点以下のときのフケについては、本来は250点の配点にすべきであるが、相手の得点がフケ勝者の得点、相手は0点とすることにする。

 とりあえず、役の配点として 配点-2 を採用し、前回と同じやり方で 1000000回の試行を行ってみた。今回は総計得点も求め1ゲーム当たりの得点を求めた。またおよび勝率も求めた。結果は 表-3 である。前回と同じように COM(A) が常に親(先手)とする場合の他に、勝者が次のゲームで親(先手)になる場合でもやってみた。勝者が次のゲームで親(先手)になる場合には勝率がほぼ50%になる。このことより、後手の方が若干有利であると言える。

表-3  1000000回ゲームを行ったとき、1ゲーム当たりの得点(点)、勝率(%)、および役のできる確率
      ※ 役の配点は、表-2 の 配点-2 を採用
 COM(A) が常に親(先手)勝者が親(先手)
 COM(A)COM(B)COM(A)COM(B)
得点-7.8134237.813423 1.738594-1.738594 
得点(十短点は除外)-5.8134235.813423 -0.2614060.261406 
得点(十短、フケ点は除外)-5.3275295.327529 -0.2962600.296260 
勝率(%)48.16251.838 50.03949.961 
十短0.0000050.0000070.0000120.0000050.0000030.000008
七短0.0002670.0003480.0006150.0003090.0003090.000618
六光0.0010120.0012260.0022380.0010940.0011690.002263
五光0.0027060.0030530.0057590.0027950.0028500.005645
四光0.0089780.0098250.0188030.0092830.0093920.018675
松桐坊主0.0277590.0297890.0575480.0288470.0285970.057444
てっぽう0.0277480.0294070.0571550.0285350.0288160.057351
猪鹿蝶0.0403120.0438960.0842080.0421780.0418980.084076
月見で一杯0.0550720.0562600.1113320.0556020.0554280.111030
花見で一杯0.0550840.0562710.1113550.0557470.0559430.111690
大山0.0394140.0425520.0819660.0409400.0412540.082194
小山0.0405540.0439870.0845410.0419500.0424120.084362
赤短0.0401320.0433830.0835150.0415740.0420760.083650
青短0.0401800.0437460.0839260.0419840.0418510.083835
ニゾロ0.1064810.1184830.2249640.1133180.1125080.225826
フケ0.0137020.0113170.0250190.0125050.0124440.024949
(0点フケ)0.0000680.0000640.0001320.0000560.0000630.000119
(1点フケ)0.0007470.0005850.0013320.0005770.0006610.001238
(2点フケ)0.0033200.0026870.0060070.0030710.0030160.006087
(3点フケ)0.0095670.0079810.0175480.0088010.0087040.017505

 以上のシミュレーションの結果より、役の期待値が役によらず同じにするには、役の配点を 表-2配点-2 とするのが妥当である。しかしながら、ゲームをよりおもしろくするためには、お得な役 を2、3作っておいたほうがよい。そのように考え、私は役の配点を 表-4 のようにした。

表-4  私の採用した役の配点(点)と期待値(点)
 配点期待値
十短10000005.0
七短100005.9
六光30007.0
五光10005.6
四光5009.3
松桐坊主30017.3
てっぽう30017.2
猪鹿蝶30025.2
月見で一杯505.6
花見で一杯505.5
大山504.1
小山504.2
赤短504.2
青短504.2
ニゾロ306.8
フケ(相手の得点) 

 表-4 には、期待値もあわせて示している。これをみて分かるように、「猪鹿蝶」「松桐坊主」および「てっぽう」を特にお得な役として設定している。

∞∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞


 なにも思考をしない2人のプレーヤーが、勝者が次のゲームで親(先手)になるとして戦えば、勝率はほぼ50%になるのは当然である。では、一方は今まで通り全く思考しないプレーヤーとし、他方は役ができるならその札を選んだり、できるだけ5点札を取るようにするなど、思考するプレーヤーに設定した場合、役の出来る確率はどのようになるか、また勝率はどの程度変わるのかがとても興味のあるところである。

 そこで、COM(A) の方だけ、役ができるならその札を選んだり、できるだけ5点札を取るように設定して、シミュレーションを行ってみた。結果を 表-5 に示す。

表-5  1000000回ゲームを行ったとき、1ゲーム当たりの得点(点)、勝率(%)、および役のできる確率
      ※ COM(A):思考プレーヤー    COM(B):無思考プレーヤー
      ※ 役の配点は、表-4 の 配点 を採用
      ※ 勝者が親(先手)
 COM(A)COM(B)
得点96.250307-96.250307 
得点(十短点は除外)72.250307-72.250307 
得点(十短、フケ点は除外)86.530040-86.530040 
勝率(%)70.72429.276 
十短0.00002400.000024
七短0.0010950.0000860.001181
六光0.0043740.0002410.004615
五光0.0076000.0010320.008632
四光0.0242740.0032500.027524
松桐坊主0.0526680.0147940.067462
てっぽう0.0561920.0141420.070334
猪鹿蝶0.0741620.0245400.098702
月見で一杯0.0728650.0405620.113427
花見で一杯0.0709180.0407480.111666
大山0.0815700.0191240.100694
小山0.0724880.0236910.096179
赤短0.0739450.0264320.100377
青短0.0689540.0255380.094492
ニゾロ0.1220800.1012200.223300
フケ0.0012220.0392490.040471
(0点フケ)0.0000010.0002970.000298
(1点フケ)0.0000260.0027230.002749
(2点フケ)0.0002120.0108170.011029
(3点フケ)0.009830.0254120.026395


 当然のことながら、思考する方が圧倒的に強い。といっても勝率が70%くらいであって100%にはならないのは、花札というゲームが偶然の要素を含んだものであることを意味している。この70%という勝率は理論的に限界なのかどうか気になるところである。COM(A) の思考をいろいろ変えたり、ちょっと複雑なものにして試みてみたが、私のアルゴリズム作成能力ではこの70%を越えることはできなかった。今後の課題である。

 COM(B) の方も COM(A) と同じ思考をさせて戦わせてみた結果を 表-6 に示す。表-1 と比較して役のできる確率に多少の違いがあるが、傾向には違いはないようである。

表-6  1000000回ゲームを行ったとき、1ゲーム当たりの得点(点)、勝率(%)、および役のできる確率
      ※ COM(A)、COM(B):同じ思考するプレーヤー
      ※ 役の配点は、表-6 の 配点 を採用
      ※ 勝者が親(先手)
 COM(A)COM(B)
得点4.960498-4.960498 
得点(十短点は除外)1.960498-1.960498 
得点(十短、フケ点は除外)0.939491-0.939491 
勝率(%)50.10249.898 
十短0.0000080.0000050.000013
七短0.0003980.0004200.000818
六光0.0012870.0012960.002583
五光0.0033570.0032830.006640
四光0.0104490.0104230.020872
松桐坊主0.0323140.0324580.064772
てっぽう0.0314480.0311870.062635
猪鹿蝶0.0471730.0472020.094375
月見で一杯0.0585340.0586220.117156
花見で一杯0.0577200.0573910.115111
大山0.0446360.0444040.089040
小山0.0451870.0449880.090175
赤短0.0500640.0495490.099613
青短0.0460140.0459200.091934
ニゾロ0.1095620.1101590.219721
フケ0.0071770.0073040.014481
(0点フケ)0.0000070.0000130.000020
(1点フケ)0.0002710.0002510.000522
(2点フケ)0.0015200.0015540.003074
(3点フケ)0.0053790.0054860.010865

Copyright(C) 2011, YokahiYokatoki