バグ検出ドリル(10)“昔のバグ”は生命力が最強:山浦恒央の“くみこみ”な話(110)(2/4 ページ)
問題文:迷路探索プログラムの仕様、ヘッダファイル(リスト1)、プログラム(リスト2)を基にバグを摘出せよ。
迷路探索プログラムの仕様
本プログラムは、プレイヤーが入力したキーに応じて、現在地からゴールまでの迷路を探索するプログラムである。
本プログラムの詳細を下記に示す。
探索するフィールドの大きさは、縦10マス×横10マスとする。
各マス目の表現方法は、下記の数値に従う。
- 0:プレイヤーが移動可能なフィールド
- 1:プレイヤーが移動不可能なフィールド
- 2:プレイヤーの現在地
- 3:ゴール
フィールドの座標の範囲は(0,0)〜(9,9)とし、座標軸は下記の図1に従う。
図1 フィールドと座標軸の定義
プレイヤーの初期位置は(0,0)〜(9,9)でランダムに設定する(本プログラムでは、乱数で初期位置を決める)。
プレイヤーは、キーボードの入力によって、進行方向や行動を決定する。各キーボードの入力キーを表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コンソールアプリケーション(C++)で作成するものとする
Copyright © ITmedia, Inc. All Rights Reserved.