Appearance
第13回 デバッグ・調整・発表
前回: 第12回 独自要素の追加
今回の授業内容
- 不具合を再現手順、期待結果、実際の結果に分ける
- F1のデバッグ表示を使って、目に見えない値から原因を絞り込む
- 提出前チェックを行う
- 難易度、操作感、表示、音量を調整する
- 自分が追加した実装意図を説明できるようにする
- 完成したゲームを発表する
今回の開始状態
第12回終了時点では、基本ゲームに独自要素が1つ追加されています
今回の終了時点では、提出できる状態まで不具合を直し、発表できるようにします
不具合を整理する
不具合を直す前に、現象を固定します
次の3つを分けて書きます
| 項目 | 内容 |
|---|---|
| 再現手順 | どの操作をすると起きるか |
| 期待結果 | 本来どうなってほしいか |
| 実際の結果 | 実際に何が起きているか |
この形で整理すると、修正後に同じ手順で確認できます
勘や思いつきで修正すると、直ったように見えて実は別の不具合を埋め込んでいる場合があります
デバッグ表示で原因を絞り込む
第09回で追加したF1のデバッグ表示は、この回で最も活躍します
「見た目では分からないが、内部の値がおかしい」不具合は、コードを目で追うより先に、デバッグ表示で数値を確認したほうが早く原因へたどり着けることがあります
次の例で、デバッグ表示を使った調べ方の流れを確認します
| 項目 | 内容 |
|---|---|
| 再現手順 | ゲームオーバーになった直後、Enterでリトライする |
| 期待結果 | 弾と敵がすべて消えた状態でプレイが再開する |
| 実際の結果 | リトライ直後、画面外にいたはずの弾が数発、そのまま表示され続ける |
まず、F1でデバッグ表示を開き、リトライの直前と直後でBulletsの数を見比べます
リトライ直後のBulletsが0になっていなければ、StartGame()で弾を無効化できていないことが分かりますGame::StartGame()を確認すると、bulletsを無効化するループが実装から抜けている、あるいはenemiesのループとコピーミスで重複しているといった原因が見つかります
cpp
void Game::StartGame()
{
player.Reset();
for (Bullet& bullet : bullets)
bullet.Deactivate();
for (Enemy& enemy : enemies)
enemy.Deactivate();
// ...
}このように、デバッグ表示は「怪しい場所に見当をつけてからコードを読む」ための手がかりとして使います
表示されている数値と、コード上でその数値を変更している箇所を突き合わせる読み方に慣れておくと、今後デバッグ表示のない環境で作業するときにも、同じ考え方で調査を進められます
提出前チェック
最低限、次の項目を確認します
- タイトル画面からゲームを開始できる
- プレイヤーが画面外へ出ない
- 弾が画面外で無効化される
- 敵を倒すとスコアが増える
- 敵に当たるとHPが減り、無敵時間中は連続でダメージを受けない
- HPが0になるとゲームオーバーになる
- クリア条件を満たすとゲームクリアになる
- リトライでスコア、HP、弾、敵、エフェクトが初期化される
- 画像や音声がない場合でも致命的に止まらない
- 第12回で追加した独自要素が説明通りに動く
確認した項目は、通ったかどうかを記録します
修正後は、関連する項目をもう一度確認します
調整する
ゲームは動くだけでは完成ではありません
速すぎる、難しすぎる、情報が見えにくい、音が多すぎるといった問題を調整します
調整するときは、1度に多くの値を変えません
1つ変えて動かし、結果を見てから次を変えます
| 調整対象 | 影響 |
|---|---|
| プレイヤー速度 | 操作のしやすさ |
| ショット間隔 | 攻撃の手応え |
| 敵の出現間隔 | 難易度 |
| 敵の速度 | 避けやすさ |
| 無敵時間の長さ | 被弾後の立て直しやすさ |
| クリアスコア | プレイ時間 |
| HP | 失敗の許容量 |
発表準備
発表では、作ったものを見せるだけでなく、実装意図を説明します
- どのようなゲームにしたか
- 第12回で追加した要素は何か
- どのファイルやクラスを変更したか
- 実装で迷った点は何か
- 調整で変えた値は何か
- 次に改善するなら何を直すか
コードのすべてを説明する必要はありません
自分が意図して変更した部分を、具体的に説明できることを重視します
実習
- 提出前チェックを行う
- 見つかった不具合を再現手順つきで記録する
- F1のデバッグ表示を使い、疑わしい値を絞り込んでから該当コードを読む
- 不具合を修正し、同じ手順で確認する
- 難易度や操作感を1項目ずつ調整する
- 発表用の操作手順と説明内容をまとめる
- 時間があれば、他の人に遊んでもらい、分かりにくい点を確認する
今回の完成条件
- 提出前チェックを通したゲームを用意できる
- 不具合を再現手順、期待結果、実際の結果で説明できる
- デバッグ表示を使って原因を絞り込む手順を説明できる
- 自分が追加した要素と変更箇所を説明できる
- 完成したゲームを発表できる
まとめ
全13回で、DXライブラリを使った2Dシューティングゲームを段階的に実装しました
今後は、敵の種類、ステージ、アイテム、演出、UIなどを追加して、自分のゲームへ発展させられます