バグ検出ドリル(10)“昔のバグ”は生命力が最強山浦恒央の“くみこみ”な話(110)(2/4 ページ)

» 2018年09月20日 10時00分 公開

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に従う。

図1 図1 フィールドと座標軸の定義

2.1.4 プログラム開始地点

 プレイヤーの初期位置は(0,0)〜(9,9)でランダムに設定する(本プログラムでは、乱数で初期位置を決める)。

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の場合は、移動不可であるため、何もしない
  • (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の場合は、何もしない
  • (5)キーボードから、「q」キーを入力する場合
    • プログラムを終了する

3.本問題の制限事項

 本問題の制限事項は下記の通り。

  • (1)配列field[10][10]には、リスト1に示した値以外を設定しないものとする
  • (2)プログラムの可読性は、考慮しない
  • (3)不正な値の入力を考慮しない
  • (4)環境は、Visual Studio 2010コンソールアプリケーション(C++)で作成するものとする

Copyright © ITmedia, Inc. All Rights Reserved.