対応づけルールを使って、モデルから変換して作成したプログラムができあがりました。 できあがったプログラムを確認し、実際に動かしてみましょう。
まず、プログラムをテストできるよう、完成させましょう。
作成したプログラムの全体を 【Ruby】score.rb に示します。 みなさんも作成したプログラムの全体を確認しましょう。
link:{sourcesdir}/score.rb[role=include]
作成したプログラムの末尾に、テストするためのプログラムを追加します( 【Ruby】score.rb(ファイル末尾に追加したテストコード部分) )。
実際にピン数を与えてスコアを作成しているのは「 game.playing
」の呼び出しです。
このテストコードでは、ピン数のデータは、1ゲーム分のピン数をまとめています。
しかし、スコアシートのプログラム本体はピン数を受け取るたびに動作するように作られているので、ピン数を1投球ずつ与える方法でも動かせます。
link:{sourcesdir}/score.rb[role=include]
-
実行時プログラム名とファイル名が同じとき(このファイル自身から実行したとき)に実行する部分のはじまり。
-
新しいスコアシートを作成する。
-
作成したスコアシートにゲームを追加する。
-
追加したゲームを選ぶ(ここでは最後のゲームを選ぶ方法をとった)。
-
ゲームへプレーヤーがエントリーする。このプレーヤーのこのゲーム用のスコアが用意される。
-
スコアシートの作成日付とIDの表示。
-
テスト用データ。1行が1人の1ゲーム分のピン数のデータ。
-
ゲームの終了まで繰り返し。
-
turnは、そのゲーム内の何番目のプレーヤーか(ゲーム中の何番目のスコアか)を表している。このテストコードでは2人がエントリしているので、0→1→0→1 と繰り返す。
-
現在のturnのプレーヤーのピン数のテストデータを先頭から1つずつ取り出す。
-
現在のturnのプレーヤーのスコアにピン数を渡して、スコアへ反映する。
-
現在のゲームの全体像を取得して表示する。
-
ここで空の改行キーを入力してテストを進める。テストを1回ずつ止めて実行できる。この入力待ちをやめれば一括して実行できる。
テスト用のプログラムも作成できたので、実行してみましょう。
コマンドプロンプトを起動して(MacやLinuxならターミナルを起動して)、プログラムを実行します( 【端末】score.rb を実行する )。
出力フォーマットは、左から「フレーム番号」「1投目のピン数」「2投目のピン数」「のべのトータル」「フレームのトータル」「スペアボーナス」「ストライクボーナス」「フレームの状態」です。
フレームの状態の変化を追ってみて、フレームのステートマシン図と対応していることを確認してみましょう。
C:\Users\kuboaki>cd Desktop\BowlingScore
C:\Users\kuboaki\Desktop\BowlingScore>ruby score.rb
Score Sheet Date: 2022-02-26 02:08:21 +0900(id:0GG70gNRWtk) # (1)
----------------------------------------
turn: くぼあき # (2)
input pins: 7 # (3)
Game(id:zwBxlorJlog), # (4)
Player:くぼあき, Score(id: q5rZ-vnFM1o), Frame:1, # (5)
|No|1st|2nd|Total|Frame Score|Spare Bonus|Strike Bonus|Frame State|
|-1| 0| 0| .| 0| 0| 0| RESERVED| # (6)
| 0| 0| 0| .| 0| 0| 0| RESERVED|
| 1| 7| 0| .| 7| 0| 0| BEFORE_2ND| # (7)
| 2| 0| 0| .| 0| 0| 0| RESERVED|
| 3| 0| 0| .| 0| 0| 0| RESERVED|
| 4| 0| 0| .| 0| 0| 0| RESERVED|
| 5| 0| 0| .| 0| 0| 0| RESERVED|
| 6| 0| 0| .| 0| 0| 0| RESERVED|
| 7| 0| 0| .| 0| 0| 0| RESERVED|
| 8| 0| 0| .| 0| 0| 0| RESERVED|
| 9| 0| 0| .| 0| 0| 0| RESERVED|
|10| 0| 0| .| 0| 0| 0| RESERVED|
|11| 0| 0| .| 0| 0| 0| RESERVED|
|12| 0| 0| .| 0| 0| 0| RESERVED|
|13| 0| 0| .| 0| 0| 0| RESERVED|
Player:うえはら, Score(id: plq9pFD6nSA), Frame:1,
|No|1st|2nd|Total|Frame Score|Spare Bonus|Strike Bonus|Frame State|
|-1| 0| 0| .| 0| 0| 0| RESERVED|
| 0| 0| 0| .| 0| 0| 0| RESERVED|
| 1| 0| 0| .| 0| 0| 0| BEFORE_1ST|
| 2| 0| 0| .| 0| 0| 0| RESERVED|
| 3| 0| 0| .| 0| 0| 0| RESERVED|
| 4| 0| 0| .| 0| 0| 0| RESERVED|
| 5| 0| 0| .| 0| 0| 0| RESERVED|
| 6| 0| 0| .| 0| 0| 0| RESERVED|
| 7| 0| 0| .| 0| 0| 0| RESERVED|
| 8| 0| 0| .| 0| 0| 0| RESERVED|
| 9| 0| 0| .| 0| 0| 0| RESERVED|
|10| 0| 0| .| 0| 0| 0| RESERVED|
|11| 0| 0| .| 0| 0| 0| RESERVED|
|12| 0| 0| .| 0| 0| 0| RESERVED|
|13| 0| 0| .| 0| 0| 0| RESERVED|
(略)
----------------------------------------
turn: うえはら
input pins: 3
Game(id:zwBxlorJlog),
Player:くぼあき, Score(id: q5rZ-vnFM1o), Frame:11,
|No|1st|2nd|Total|Frame Score|Spare Bonus|Strike Bonus|Frame State|
|-1| 0| 0| .| 0| 0| 0| RESERVED|
| 0| 0| 0| .| 0| 0| 0| RESERVED|
| 1| 7| 0| 7| 7| 0| 0| FIXED|
| 2| 5| 5| 27| 20| 10| 0| FIXED|
| 3| 10| 0| 52| 25| 0| 15| FIXED|
| 4| 10| 0| 71| 19| 0| 9| FIXED|
| 5| 5| 4| 80| 9| 0| 0| FIXED|
| 6| 10| 0| 100| 20| 0| 10| FIXED|
| 7| 7| 3| 115| 15| 5| 0| FIXED|
| 8| 5| 4| 124| 9| 0| 0| FIXED|
| 9| 7| 3| 141| 17| 7| 0| FIXED|
|10| 7| 3| 155| 14| 4| 0| FIXED|
|11| 4| 0| .| 4| 0| 0| BEFORE_2ND| # (8)
|12| 0| 0| .| 0| 0| 0| RESERVED|
|13| 0| 0| .| 0| 0| 0| RESERVED|
Player:うえはら, Score(id: plq9pFD6nSA), Frame:10,
|No|1st|2nd|Total|Frame Score|Spare Bonus|Strike Bonus|Frame State|
|-1| 0| 0| .| 0| 0| 0| RESERVED|
| 0| 0| 0| .| 0| 0| 0| RESERVED|
| 1| 6| 3| 9| 9| 0| 0| FIXED|
| 2| 9| 0| 18| 9| 0| 0| FIXED|
| 3| 0| 3| 21| 3| 0| 0| FIXED|
| 4| 8| 2| 38| 17| 7| 0| FIXED|
| 5| 7| 3| 58| 20| 10| 0| FIXED|
| 6| 10| 0| 78| 20| 0| 10| FIXED|
| 7| 9| 1| 96| 18| 8| 0| FIXED|
| 8| 8| 0| 104| 8| 0| 0| FIXED|
| 9| 10| 0| 123| 19| 0| 9| FIXED|
|10| 6| 3| 132| 9| 0| 0| FIXED|
|11| 0| 0| .| 0| 0| 0| RESERVED|
|12| 0| 0| .| 0| 0| 0| RESERVED|
|13| 0| 0| .| 0| 0| 0| RESERVED|
Game(id:zwBxlorJlog) is finished.
C:\Users\kuboaki\Desktop\BowlingScore>
-
スコアシートの作成日付とIDの表示。
-
どのプレーヤーのターンなのかを表示した。
-
プログラムが受け取ったピン数。
-
現在のゲームのID。
-
プレーヤーとそのプレーヤーのスコアのID、現在のフレーム番号。
-
前の前のフレームを無条件に扱うためのダミーフレーム。
-
1投目が終わったので、フレームは2投目の投球前の状態。
-
ここは2投目の投球前の状態だが、第10フレームの状態が「FIXED」なのでゲームは終了。
動作を確認できるよう、テストプログラムを実行した様子を収めた動画を用意しました。
このテキストと一緒に配布している資料として videos
フォルダに次のファイルを置いてあります。
videos
フォルダにあります)-
score_rb_demo_win.mp4
-
score_rb_demo_mac.mov