バグ検出ドリル(9)デバッグの基本的な心構えは「人を見たら泥棒と思え」:山浦恒央の“くみこみ”な話(109)(2/4 ページ)
問題文:迷路探索プログラムの仕様、ヘッダファイル(リスト1)、プログラム(リスト2)からどんなバグがあるか推察せよ。
迷路探索プログラムの仕様
本プログラムは、プレイヤーがキーボードから入力したキーに応じて、現在地からゴールまで迷路を探索するプログラムである。
本プログラムの詳細を下記に示す。
探索するフィールドの大きさは、縦10マス×横10マスとする。
各マス目の表現方法は、下記の数値に従う。
- 0:プレイヤーが移動可能なフィールド
- 1:プレイヤーが移動不可能なフィールド
- 2:プレイヤーの現在地
- 3:ゴール
フィールドの座標の範囲は(0,0)〜(9,9)とし、座標軸は下記の図1に従う。
図1 フィールドと座標軸の定義
プログラム開始地点は、座標(1,1)から開始する。
プレイヤーは、キーボードの入力によって、進行方向や行動を決定する。各キーボードの入力キーを表1に示す。
キーボード入力キー |
進行方向 |
↑ |
上方向 |
↓ |
下方向 |
← |
左方向 |
→ |
右方向 |
q |
プログラム終了 |
表1 キーボード入力キーと進行方向の対応 |
現在地を(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の場合は、移動不可であるため、何もしない。
- (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の場合は、移動不可であるため、何もしない
- (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の場合は、移動不可であるため、何もしない
- (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の場合は、何もしない。
本問題の制限事項は下記の通り。
- (1)配列field[10][10]には、リスト1に示した値以外を設定しないものとする
- (2)プログラムの可読性は、考慮しない
- (3)不正な値の入力を考慮しない
- (4)環境は、Visual Studio 2010コンソールアプリケーションで作成するものとする
Copyright © ITmedia, Inc. All Rights Reserved.