筑波大学技術報告
29: 36-41, 2009

ブラックジャックゲームの設計
中山 勝
筑波大学システム情報工学等技術室（装置開発班）〒305-8573 茨城県つくば市天王台 1-1-1
オープンにして配る。その次にディーラーは、自分にオープンで 1 枚、伏せた状態で１枚配る。その後、プレーヤーがカードを続けて引き（引かなくてもよい）手札を決定する。次にディーラーは、手札の合計が 16 以下の場合は、カードを引き続け、17 以上になったら Stand する。その際、絵札はすべて 10 と数えエースは 1 か、11 かを選べる。（今回の設計では、エースは 1 としか数えない。）

概要
筑波大学情報学類・情報科学類の実験にプロセッサの設計開発というテーマがある。このテーマは、開発ツールを使って、ハードウェア記述言語（VHDL）で記述した論理回路を Field Programmable
Gate Array（FPGA）に実装して行われる。そのため、開発ツールの使い方や、VHDL について学ぶ必要がある。
そこで学生が、論理回路設計に興味を持って取り組めるように、トランプゲームの、ブラックジャックゲームを設計させることを提案した。

用語
プレーヤー
ディーラー
Hit
Stand
バースト

キーワード：VHDL、FPGA、ブラックジャックゲー
ム

１．はじめに

表 1 基本用語
意味
ボードを操作する人（ボタンを押す）
カードを配る人（論理回路）
カードを引くこれ以上カードを引かない
手札の合計が 21 を超えたゲームの進行中にプレーヤーがバーストした場合、無条件でディーラーの勝ちとなる。プレーヤーの手札の合計が 21 以下でディーラーの手札の合計より数が大きい場合、もしくは、ディーラーがバーストしているときはプレーヤーの勝となり、双方同じ数の場合引き分けとなる。

ブラックジャックゲームは、トランプゲームの 1つである。学生は、シミュレーションで各部の動作を確認しながら、VHDL で回路設計をする。回路が完成し動作に問題がないと判断したら、スパルタン
3 スタータキット（図 1）上の FPGA に実装し、動作させる。その過程において、開発ツールを使った、VHDL による論理回路設計と、シミュレーション方法を習得することができる。しかし、一からすべてを考え、設計させるには時間的に無理がある。そのため、基本回路の構成を提示し、その内容に沿って設計させることにした。

３．ゲームの構成
ゲームを実現する上で、論理回路に必要な機能がいくつかある。このゲームは、プレーヤーとディーラーが 1 対 1 で対戦する。そこで論理回路には、ディーラーとしての判断ができる機能を持たせることになる。

3.1 ルーレット機能
ランダムにカードを配るために、ルーレットが必要となる。プレーヤーが 1 回ボタンを押すと回転し、もう 1 回押すと停止して配るカードが決まる。図 2
は、プレーヤーの 3 枚目のカードを配るため、ルーレットが回っている様子である。8 に見えるのは、1～d（16 進）を連続表示しているからで、ドットを点灯することで、ルーレットの回転と、配られたカードの値 8 を区別している。また、右の 2 つの値は、すでに配られたカードを示す。
AN3AN2

AN1AN 0

図 1. スパルタン 3 スタータキット
L D １ LD ０

２．ブラックジャックゲームとは

図 2. ルーレットが回転する様子表 1 にゲームの基本用語を示す。このゲームは、手札の合計がディーラーよりも大きい数で、かつ「21」を超えない範囲で「21」に近づけるトランプゲームである。まず、プレーヤーに 2 枚のカードを36

プレーヤー Stand（LD6）は、プレーヤーの手札が決定した際に点灯し、ゲーム終了（LD7）は、プレーヤーとディーラーのすべてのカードが決定した際に点灯する。

3.2 Stand 検出機能
プレーヤーの Stand は、ボタンが押されることで判断する。ディーラーの Stand は、カードを合計した値で決まる。論理回路により状況を判断し、正しくゲームを進めていく必要がある。

4.3 押しボタンスイッチ
押しボタンスイッチは、論理回路に意思を伝えるため、またゲームを進めるための入力として用いる。
それぞれ 4 つの押しボタンスイッチに、Reset（BTN3）、Hit（BTN2）、Stand（BTN1）、表示切り替え（BTN0）の機能を割り当てた。

3.3 ゲーム進行機能
ゲームは、カードを配りながら進められる。論理回路は、次にどちらにカードを配るべきか知っている必要がある。また、配られたカードを把握し、ゲームの終了判定を行なう必要がある。

５．回路構成3.4 勝敗判定機能

ブラックジャックゲームを論理回路で構成するには、必要な機能毎にモジュールを分けたほうが得策である。そこで以降説明する 6 個のモジュールと 1つのサブモジュールに分けることにした。

ゲームが終了したとき、プレーヤー、ディーラーそれぞれのカードの合計を計算し勝敗判定をする。
また、この時 16 進数で保存されている値を 10 進数で表示する（図 3）。
AN3

AN1AN2

5.1 serve モジュール

AN0

LD１ LD０

図 3. 勝敗表示
図 5. serve モジュール

４．ユーザーインターフェイス

図 5 に serve モジュールの入出力を示す。このモジュールは図 6 のようなステートマシンで、配られるカードを決める機能を持つ。Start 入力が 1 になるとルーレットが回転し、1～d（16 進）の値を連続的に出力する。Start 入力が 0 になると停止しその時の値を保持する。

図 4 に示すように、スパルタン 3 スタータキットには出力として 7 セグメント LED が 4 個（AN0～AN3）、発光ダイオードが 8 個（LD0～LD7）あり、入力としてスライドスイッチが 8 個（SW0～SW7）、押しボタンスイッチが 4 個（BTN0～BTN3）ある。
ゲーム終了

AN3

プレーヤーStand

ディーラー

AN2

AN1

AN0Reset

プレーヤー

１Start

Start

ｄ
LD７

LD６

BTN3

LD５

LD４

BTN2

LD３

LD２

BTN1

LD１３Ｃ

BTN0
SW６SW５

SW４SW３

SW２

SW１

SW０

表示切替
カードを引く

Start

Start

LD０

SW７Reset

２StartStart

ｂ４Standする

Start

図 4. ボードの入出力

Start
５AStartStart
９4.1 カード表示用 7 セグメント LED

６Start7 セグメント LED は、カードの数字を表示する。
7 セグメント LED の数は 4 個のため、プレーヤー、ディーラー各々最高 4 枚のカードで勝負するゲームルールにした。また、カードの数字は、A（エース）、2～10、J（ジャック）、Q（クイーン）、K（キング）だが、ここでは 1～d（16 進）となる。

８７StartStart

図 6. カードの値を出力するステートマシンの状態遷移図
また、カードが決まったことを知らせる信号として、１クロックサイクルの信号（Hit）を、図 7 に示すステートマシンで出力する。

4.2 状態表示用発光ダイオード
発光ダイオードは、現在の状態を表すために用いる。プレーヤー（LD0）とディーラー（LD1）は、現在どちらのカードが表示されているかを表す。また、最後の勝敗表示のときに勝ったほうが点灯する。

37

S0
Hit＜＝0

無条件Start

表 2 Phase モジュールのステートの意味

S１
Hit＜＝0notStart

ステート
Phase00
Phase01
Phase02
Phase03
Phase04
Phase05
Phase06
Phase07
Phase08
Phase09

S２Hit＜＝１

図 7. Hit 信号出力

5.2 phase モジュール
phase モジュールは、ゲームの進行状況を管理するモジュールで、図 8 に示す入出力を持つ。このモジ
ュールもステートマシンからなり、図 9 に示す状態遷移図で表現できる。

意味初期状態プレーヤーのカードが 1 枚配られた状態
プレーヤーのカードが 2 枚配られた状態
ディーラーのカードが 1 枚配られた状態
ディーラーのカードが 2 枚配られた状態
プレーヤーのカードが 3 枚配られた状態
プレーヤーのカードが決まった状態
ディーラーのカードが 3 枚配られた状態
ディーラーのカードが決まった状態
ゲーム結果を表示する状態

5.3 hand モジュール
図 10 に示す Hand モジュールはフリップフロップからなり、プレーヤー4 枚、ディーラー4 枚、計 8枚のカードを記憶する。

図 8. phase モジュール
Reset
Result

図 10. hand モジュール

5.4 selector モジュールと decide サブモジュール

Phase00
Hit

Phase0９

Phase0１

ResultHit

Phase0８

Phase0２
Hit

Hit or Stand
Phase0７
Phase0３

StandHit

Stand

Phase0６
Hit or StandHit
Phase0４
Hit

Phase0５

図 9. phase モジュールの状態遷移図
phase モジュールは、ゲームの進行中には Hit 信号
または Stand 信号で遷移し、結果表示と初期状態に戻るときは Result 信号で遷移する。表 2 に、それぞれのステートの意味を示す。

図 11. selector モジュール
図 11 に、selector モジュールの入出力を示す。組み合わせ回路からなるこのモジュールは、Show 信号、Roulette 信号、Phase 信号の組み合わせで、発光ダイオード及び 7 セグメント LED の表示データを決める。
また、下位モジュールとして decide サブモジュールを持つ（図 12）。decide サブモジュールも組み合わせ回路からなり、プレーヤーの手札の合計とディーラーの手札の合計を計算して勝敗を判定する。また、
38

各々の手札の合計の値を 16 進数から 10 進数に変換する機能を持つ。

プフロップで設計する。Deal_out 信号と Result 信号
は、同じ Deal_in 入力から作るがその時の Phase 入力によって作る信号を切り替える。それぞれの信号は、
図 15、図 16 のようなステートマシンで設計する。
Deal_inandS0その他の遷移条件
Deal_out＜＝０

S１
Deal_out＜＝１

not Deal_in
andその他の遷移条件

not Deal_in
andその他の遷移条件

S３
Deal_out＜＝１

図 12. decide サブモジュール

5.5 stand_judge モジュール

S２
Deal_out＜＝１
Deal_in
andその他の遷移条件

図 15. Deal_out 信号出力
Deal_in
andその他の遷移条件

S0
Result＜＝０

not Deal_in
andその他の遷移条件

S１
Result＜＝１
無条件

S２Result＜＝０

図 16. Result 信号出力

5.7 その他のモジュール

図 13. stand_judge モジュール
図 13 に示す stand_judge モジュールは、プレーヤーの手順で、Stand 入力があった時、1 クロックサイクルの信号を出力する。またディーラーの手順で、手札の合計が 17 以上の時も、同様の信号を出力する。

5.6 switch_ctl モジュール

以上が、学生に設計させるモジュールとなる。しかし実際には、これらのモジュールだけでは動作しない。他に、スパルタン 3 スタータキット上の 7 セ
グメント LED を 4 個同時にそれぞれの値を表示させるためのダイナミック点灯モジュールと、スイッチのチャタリングを防止するための Enable 信号を作るモジュールが必要となる。しかし、これらのモジュールまで設計させるのは学生に対して余計な負担になると考え、あらかじめ設計してあるものを提供することにした。

６．回路の完成
今まで述べてきたモジュールを、図 17 の回路図の様に、VHDL で記述すれば回路の完成となる。

７．まとめ
現在、ブラックジャックゲームの設計は、実際に学生実験に取り入れられている。開発ツールの使い方、シミュレーションの方法、VHDL による論理回路の設計などを理解する上で、適当な規模の回路になっていると考える。

図 14. switch_ctl モジュール
Switch_ctl モジュール（図 14）は、押しボタンスイッチのチャタリングを取り除くと共に、それに対応する制御信号を作るモジュールである。Stand_out
信号と Show_out 信号は、イネーブル付きのフリッ39

図 17. ブラックジャックゲームの回路図

謝辞

参考文献

今回の提案を採用してくださった、システム情報工学研究科コンピュータサイエンス専攻の和田耕一教授に感謝いたします。また、学生に提供するモジュールを設計してくださった、システム情報工学等技術室（装置開発班）の小野雅晃技術専門職員に感謝いたします。

[1] 長谷川 裕恭 著, 改訂 VHDL によるハードウェア設計入門, CQ 出版.
[2] Introduction to Programmable Logic, XILINX.

40

The design of Blackjack
Masaru Nakayama
Technical Service Office for Systems and Information Engineering, University of Tsukuba,
1-1-1 Tennodai, Tsukuba, Ibaraki, 305-8573 Japan

One assignment among the experiments in the College of Information Science in the University of Tsukuba
is to design and develop a processor. Students complete this assignment by using a development tool to implement
logic circuits specified in a hardware description language (VHDL) in an FPGA (Field Programmable Gate Array).
To do that, students must learn how to use the development tool, and about VHDL.
Thus, it was proposed that students be asked to design a “Black Jack” card game, to make the process oflogic circuit design more interesting.
Keywords: VHDL; FPGA; Blackjack41