連載
バグ検出ドリル(9)デバッグの基本的な心構えは「人を見たら泥棒と思え」:山浦恒央の“くみこみ”な話(109)(2/4 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第9回では、比較的大きなソースコードである迷路探索プログラムに潜むバグを見つけ出してください!
3.今回の問題
問題文:迷路探索プログラムの仕様、ヘッダファイル(リスト1)、プログラム(リスト2)からどんなバグがあるか推察せよ。
迷路探索プログラムの仕様
1.概要
本プログラムは、プレイヤーがキーボードから入力したキーに応じて、現在地からゴールまで迷路を探索するプログラムである。
2.詳細
本プログラムの詳細を下記に示す。
2.1 フィールド
2.1.1 フィールドの大きさ
探索するフィールドの大きさは、縦10マス×横10マスとする。
2.1.2 フィールドオブジェクト
各マス目の表現方法は、下記の数値に従う。
- 0:プレイヤーが移動可能なフィールド
- 1:プレイヤーが移動不可能なフィールド
- 2:プレイヤーの現在地
- 3:ゴール
2.1.3 フィールドと座標軸の定義
フィールドの座標の範囲は(0,0)〜(9,9)とし、座標軸は下記の図1に従う。
2.1.4 プログラム開始地点
プログラム開始地点は、座標(1,1)から開始する。
2.2 移動
2.2.1 キーボード入力
プレイヤーは、キーボードの入力によって、進行方向や行動を決定する。各キーボードの入力キーを表1に示す。
キーボード入力キー | 進行方向 |
---|---|
↑ | 上方向 |
↓ | 下方向 |
← | 左方向 |
→ | 右方向 |
q | プログラム終了 |
表1 キーボード入力キーと進行方向の対応 |
2.2.2 プレイヤーの移動
現在地を(x,y)とすると、プレイヤーは以下の手順で移動する。
- (1)キーボードから「↑」キーを入力した場合
- (1-1)フィールド座標(y-1,x)の値を調べる
- (1-1-1)フィールドの座標(y-1,x)が3の場合は、GOALとなり、ゲームを終了する
- (1-1-2)フィールドの座標(y-1,x)が0の場合は、フィールドの座標(y-1,x)に2をセットする。また、もともとの座標(y,x)を0とする
- (1-1-3)フィールドの座標(y-1,x)が1の場合は、移動不可であるため、何もしない。
- (1-1)フィールド座標(y-1,x)の値を調べる
- (2) キーボードから「↓」キーを入力した場合
- (2-1)フィールド座標(y+1,x)の値を調べる。
- (2-1-1)フィールドの座標(y+1,x)が3の場合は、GOALとなり、ゲームを終了する
- (2-1-2)フィールドの座標(y+1,x)が0の場合は、フィールドの座標(y+1,x)に2をセットする。また、元の座標(y,x)を0とする
- (2-1-2)フィールドの座標(y+1,x)が1の場合は、移動不可であるため、何もしない
- (2-1)フィールド座標(y+1,x)の値を調べる。
- (3)キーボードから、「→」キーを入力した場合
- (3-1)フィールド座標(y,x+1)の値を調べる
- (3-1-1)フィールドの座標(y,x+1)が3の場合は、GOALとなり、ゲームを終了する
- (3-1-2)フィールドの座標(y,x+1)が0の場合は、フィールドの座標(y+1,x)に2をセットする。また、元の座標(y,x)を0とする
- (3-1-3)フィールドの座標(y,x+1)が1の場合は、移動不可であるため、何もしない
- (3-1)フィールド座標(y,x+1)の値を調べる
- (4)キーボードから、「←」キーを入力した場合
- (4-1)フィールド座標(y,x-1)の値を調べる
- (4-1-1)フィールドの座標(y,x-1)が3の場合は、GOALとなり、ゲームを終了する
- (4-1-2)フィールドの座標(y,x-1)が0の場合は、フィールドの座標(y+1,x)に2をセットする。また、元の座標(y,x)を0とする
- (4-1-3)フィールドの座標(y,x-1)が1の場合は、何もしない。
- (4-1)フィールド座標(y,x-1)の値を調べる
- (5)キーボードから、「q」キーを入力する場合
- プログラムを終了する
3.本問題の制限事項
本問題の制限事項は下記の通り。
- (1)配列field[10][10]には、リスト1に示した値以外を設定しないものとする
- (2)プログラムの可読性は、考慮しない
- (3)不正な値の入力を考慮しない
- (4)環境は、Visual Studio 2010コンソールアプリケーションで作成するものとする
Copyright © ITmedia, Inc. All Rights Reserved.