検索
連載

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

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第10回では、生命力最強という“昔のバグ”がテーマです。前回の第9回で扱った迷路探索プログラムの改造版からバグを見つけ出してください!

Share
Tweet
LINE
Hatena

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.

ページトップに戻る