マップを把握する(#1)

風来のシレンを遊ぶための重要な要素は色々あるが、まずはマップをきちんと把握するという事は避けて通れない。
いきなりストーリーダンジョンに挑むのは大変なので、『初心者の家』で必要最低限の知識を身に着けてから行くことにする。まずは問題1の「次へ進むには階段へ」。

f:id:ai_shiren:20201205145110p:plain  f:id:ai_shiren:20201205145440p:plain

メモリは読まないと制約を課したので、マップをビジュアルから読み取る方法を試す。画像認識等も使う予定なので実装はOpenCVC++

f:id:ai_shiren:20201205150053p:plain

画面上に補助線を引く。 (マップのみの黒背景はセレクトボタンを押してマップ表示のみにしたもの)

f:id:ai_shiren:20201205150436p:plain

なかなか良い感じに分割が出来た。今後、このクロスで囲まれた部分を1マスの単位として扱うようにする。

今はとりあえず雑に1マスの中心部の色をピクセル単位で読み、そのマスがどういう状況なのかを判定する。
今の所は、壁(黒)/通路(紫)/シレン(白)/敵(赤)/部屋(青)/階段(水色四角)のみしかないので以下の通りになる。

if (マス == "黒") {
  return 壁
} else if (マス == "紫") {
  return 通路
} else if (マス == "白") {
  return シレン
} else if (マス == "赤") {
  return 敵
} else if (マス == "青") {
  if (角のマス == "水色")
    return 階段
  else
    return 部屋
}
// のちに味方やアイテムの判定も必要になる

読み取った結果を部屋情報の2次元配列として読み込めば、マップ情報の取得が完了という事になる。

00000000000000000000
00000000000000000000
00011110000111119000
00011110000111111000
00011112225161116000
00011110000111111000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
# 0:壁/1:部屋/2:通路/5:シレン/6:敵/9:階段(数字は変わる予定)

6の敵(マムル)は置いといて、5のシレンが9の階段に続く道が計算できれば、この問題はクリアできると思います。
まだ一歩も進めておらず前途多難だ。