教育システム情報学会 2013年度学生研究発表会

四国地区

ポーカー戦略を題材とする応用 C プログラミング演習の支援と実践
A Support System and Practicesof Applied Exercises of C Programming with a Poker Strategy
吉田 亜未, 大川 昌寛, 玄馬 史也, 富永 浩之
Ami YOSHIDA, Masahiro OKAWA, Fumiya GEMBA, Hiroyuki TOMINAGA
香川大学工学部
Faculty of Engineering, Kagawa University
Email: s10t278@stmail.eng.kagawa-u.ac.jp
あらまし：ポーカー戦略を題材とする応用 C プログラミング演習を提案する．配布された 5 枚の手札から 1 枚を捨て，山札から 1 枚を加える．過去の捨札も参考にし，指定回数内の交換で役を確定させる．このゲームを 1 つの山札で繰り返す．実行環境を提供し，上記の戦略を実装させる．大会サーバを運営し，作成した戦略コードをアップロードさせる．相当数の山札で平均得点を求める．各自の最高得点で最終順位を決める．数年間の演習での支援方法と実践結果を報告する．
キーワード：プログラミング演習，ポーカー戦略，競争型学習

1.

はじめに札を捨てるか，それとも交換を打ち切るかを決めることである．ここで，1 つの山札で既に使われた札も考慮する必要がある．残りの山札の確率的な傾向から，進行に応じた戦略のパラメタを調整させる．
C 言語の学習項目としては，配列による手札の管理，ビンソートなどの整列算法，ストレートの待ち判定などのパターンマッチ，山札の乱数シミュレーション，再帰による先読みなどがある．高度な戦略でなければ，構造体，ポインタ操作，文字列処理，ファイル入出力は不要であり，文法的には C プログ
ラミングの初級者でも挑戦できる．
ただし，戦略のアイデアを実際のアルゴリズムで表現し，C 言語のソースコードとして記述するには，実践的なプログラミング経験が必要となる．また，補助関数によるコードの整理，十分なデータによるテスト，変数の値確認によるデバッギング，バージョン管理，非機能要件としての性能向上など，ソフトウェア開発手法の初歩も教育目標に含まれる．

近年，学習者の興味と意欲を高めるため，プログラミング実習の題材にパズルやゲームが取り上げられている (1)．また，企業や団体が主催する情報系のコンテストも盛んになってきており，学内のプログラミング演習をコンテスト形式で行うところも出てきている．本学科でも，ボードゲームの戦略を題材とする応用 Java 演習を実施している (2)．
本研究では，カードゲームの戦略を題材とする応用 C 演習を提案する．
ポーカーを具体的な課題とし，ルールの設定，支援システムの開発，演習実践の結果を論じる．

2.

ポーカー戦略のプログラミング演習

ポーカーは，ハンドメイキング型のトランプゲームであり，手札の 5 枚で 9 種類の手役のうちの 1 つを作る．手役には，ペア系，フラッシュ系，ストレート系の 3 つの要素があり，これらの組合せで難度が変わる．単純ドロー式では，手札から不要な札 1枚を捨て，山札から捲った 1 枚と交換していく．制
限回数までに高い手役ができれば交換を打ち切る．
最も高い手役を作ったプレイヤが勝ちである．
本研究が提案する課題は，人間のプレイヤの代わりにポーカーを行う計算機のプログラムを作成することである．ここで，以下のルールを採用する．まず，手役の配点を与える．ただし，アルゴリズムの実装の難易を考慮し，ストレート系の配点を高くする．十分にシャッフルされた 1 つの山札で，各プレイヤがポーカーゲームのテイクを繰り返し，作った手役の合計点を素点とする．トランプが 52 枚である
ことにより，交換の制限回数(チェンジ数)によって，可能なテイクの回数(テイク数)は異なる．ランダムな山札で 10000 回ゲームを繰り返し，その平均点を得点とする．
実現すべき戦略とは，各時点の手札に対し，どの3.

ポーカー戦略の実行環境

本演習では，必要なライブラリやスクリプトからなる実行環境を配布し，試行錯誤による戦略プログラムの修正を支援する．プログラミング自体は，既存のテキストエディタと言語処理系で行う．
受講者が作成した戦略は関数 strategy() に記述し，本体の関数 main() と結合させ，交換回数などの実施パラメタを指定して，コンパイルする．別に生成していた山札を与えて，ポーカーを実行する．ゲー
ムの途中経過として手札と捨札を表示し，実行結果として手役の集計と素点を出力する．ユーザ入力による対話実行も可能である．戦略検討に有用となるサンプルとして，例示戦略も提供する．
受講者は，以下のように戦略プログラミングを進める．第 1 段階では，ユーザ入力による対話実行で，ポーカーのルールを把握する．第 2 段階では，例示

9教育システム情報学会 2013年度学生研究発表会

四国地区し，後半で高い手役を狙う必要がある．残りの山札による戦略のパラメタ調整を促すためである．
期間を 5 週間とし，受講者は 37 名で，聴講者も 4名が参加した．全体で 862 個の提出があり，受講者からは 773 個であった(図 2)．平均は 21 個で，最高は 84 個であった．得点の上位陣は，提出回数が多く，中位陣と下位陣は少なめであった．ただし，少ない回数でも上位となる受講者もいた．毎週の授業の前後に提出が増え，締切直前も大幅に増えた．
得点分布(図 3)では，高得点側への大きなピークがある．今年度からの戦略の工夫による得点の伸びが広がった状況に対応できたと思われる．一方，低い得点にも小さなピークがみられる．これは，掛率の導入による難度の向上に対応できなかった層である．
次年度以降は，この層へのフォローが必要である．
明示的なアンケートは実施していないが，レポートの後記から学生の意見や要望を得た．戦略作成の初期はすぐに得点が向上するため，着手への動機付けになっていた．得点と順位の公開が競争意欲を刺激し，戦略の改良を促進していた．特に，上級生や下級生によるオープン参加がそれを勢い付けた．また，バージョン管理や各戦略の実行結果を記録することの重要性を学んだ学生が多かった．

戦略でゲームを実行させ，戦略の効果を確認しながら戦略のアイデアを検討する．第 3 段階では，自分が作成したプログラムを，特定の山札で実行し，バグがないかを確認する．第 4 段階では，ランダムに生成した山札を用い，偏りのない戦略かを検証する．

図 1 大会運営サーバ WinT の学生側の GUI

4.

大会運営サーバ

個々の戦略プログラムは単独で実行されるが，受講者全体を 1 つのリーグと捉え，その中での得点を競わせる．その支援として，大会運営サーバ WinTを運用する．WinT では，演習期間中，戦略の提出を受け付け，サーバ側でゲームを実行し，得点や順位を全員に公開する．順位の推移を見て，自分の戦略を再検討し，状況に応じて戦略を修正していく．
自分の戦略を常に評価する機会を設けることで，試行錯誤の繰返しを動機付ける．締切時に，提出された各自の戦略のうち，最高の得点となる最強戦略を最終結果とし，成績に反映させる．
WinT の学生側ページは，図 1 の通りである．戦略提出ページでは，戦略に対する題目やコメントを付けて，戦略コードをアップロードする．コードがコンパイルされ，ポーカーが実行される．得点やテイクごとの手役の出現数などが表示される．順位表
示ページでは，全戦略および各受講者の最強戦略の得点ランキングが表示される．戦績分析ページでは，各自が提出した戦略について，手役の割合などを集計して表示する．

5.

図 2 戦略の提出状況

6.

図 3 最終戦略の得点

おわりにポーカーの戦略プログラミングを題材とする C 言語の応用演習を提案した．具体的な課題を設定し，実行環境を構築した．提出された戦略を管理し，実行結果を公開する運営サーバを開発した．受講者は，ランダムな山札に対して，不要な手札を捨て，高い手役を作る戦略プログラムを作成する．得点や順位をサーバで確認し，最強戦略を目指す．
2013 年度の演習実践では，聴講者の参加が競争意欲を刺激し，提出数が増えた．ルールの難度は上がったが，得点分布では，上位陣にピークがあった．
ただし，得点の伸びない層もみられた．今後の課題
として，実行環境やサーバの戦績分析ページを改良し，支援を強化する．

演習実践の課題設定と結果分析

2010 年度からの新カリキュラムで，本学科の情報環境コースの 3 年次後期に必修科目「情報環境実験Ⅱ」が開講された．その課題の 1 つとして，ポーカー戦略のプログラミング演習を実施している．毎年の受講者は 40 名程度で，期間は約 4 週間である．2010年度は，中間大会として暫定的に完成した戦略を提出させた．その状況を踏まえて最終大会を行った．
2011 年度から大会運営サーバを運用し，最終大会に至るまで継続的に戦略を提出させるようにした．また，各年度で，ゲームのレギュレーションとして，チェンジ数とテイク数を少しずつ変えて実施した．
そのため，得点そのものは異なるが，分布状況としては，上位へのシフトがみられた．
2013 年度は，6 チェンジの 6 テイクとした．これでは，後半で山札が不足し，ゲームが打切りとなる場合が生じる．また，テイクごとに掛率を変えるように拡張した．すなわち，前半は低い手役でも妥協

参考文献(1) 富永浩之: "プログラミング実習の題材としてのゲームと支援環境", ゲーム学会 第 1 回合同研究会, Vol.1,
No.1, pp.39-42 (2003)(2) 山田航平, 富永浩之: "ボードゲーム戦略プログラミ
ングを題材とした Java 演習支援 －指標戦略の導入と重み付き勝点度による結果分析－", 教育システム情報学会 研究報告, Vol.28, No.2, pp.127-134 (2013)10