PIC24Fでパックマンもどき(モンスターのアルゴリズム考察編)

PIC24FとNokia128x128カラーLCDで作るパックマンもどき。
今回はモンスターのアルゴリズムを考察します。

モンスターの動きで知ってることと言えばゲームデモのキャラ紹介にある、

OIKAKE-------"AKABEI"
MACHIBUSE---"PINKEY"
KIMAGURE----"AOSKE"
OTOBOKE-----"GUZUTA"


ぐらいです。

アカベイが素直に追いかけてくるのは経験上知っています。
ピンキーの待ち伏せもなんとなく分かります。
でもアオスケの気まぐれって何?追いかけたり、追いかけなかったり?
グズタはおとぼけかい?愚図なのかい?大体、何でこいつだけ名前に色が付かないの?

分からない事はネットで検索です・・・

はい、同じように悩んだ先人さまを見つけました。
この方はエクセルでオリジナルそっくりなパックマンを作っています。
素晴らしい!!

こちらのサイトで分かったことは、

まずモンスターには追跡モードと休息モードがある。

(1)アカベイ
  追跡モード:パックマンを最短距離で追跡
  休息モード:画面右上付近を動き回る
(2)ピンキー
  追跡モード:パックマンの進行方向の3つ先のマスに向かい待ち伏せする
  休息モード:画面左上付近を動き回る
(3)アオスケ
  追跡モード:アカベイとパックマンを中心する点対象のマスを目指す
  休息モード:画面右下付近を動き回る
(4)グズタ
  追跡モード:パックマンから半径約130ドット外ではアカベイと同じ追跡方法、
          半径内ではパックマンの移動に関係なく動く
  休息モード:画面左下付近を動き回る


そう言われて見れば確かにそんな感じで動いていたかもしれません。
またサイトにも書かれていますが、上記動作なら共通の移動ルーチンで目標座標を切り替えるだけで各モンスターの個性的な動作が実現可能かもしれません。

貴重な情報ありがとうございました!!


あとは細かい移動判定です
例えば下図の場合、パックマン(目標地点)のX,Y座標と自分(アカベイ)のX,Y座標から上または右に進めばパックマンに近づけることが分かります。

では、上と右のどちらに進むのか?


画像


30年近く前のゲームなのでハードは貧弱、複雑なアルゴリズムは作れないはずです。

想像するに、
①Y軸方向優先(上記例では上に進む)
②X軸方向優先(上記例では右に進む)
③X,Yの距離を比較し遠い方向に進む(上記例では右に進む)
④X,Yの距離を比較し近い方向に進む(上記例では上に進む)


てなもんでしょうか?
しかし正解は考えても分かりません。オリジナルで確認してみましょう。

早速確認しました。

下図はゲーム開始直後のアカベイの移動ルートです。

画像


休息モードらしく画面右上辺りをうろつきます。
しかし、何故(A)地点で上に行かないのでしょうか?
目標座標は画面右上のはずなので自分のY座標と比較して上に行くと思うのですが・・・

そして(B)地点では左に曲がります。
ここでは直進も左も目標地点から遠ざかる方向です。
進める方向が遠ざかる方向しかない場合は直進より曲がる方が優先なのでしょうか?

(C)地点では上に曲がります。
どうやら目標地点は、この交差点より上のようです。
パワーエサが目標地点か?

それにしても(A)地点での行動がわかりません。
なぜ目標地点から遠ざかる方向に進むのでしょうか?
この時の目標地点は画面右上ではない?
上に進むより左に進む方が優先順位が高い?

もう少しアカベエの動きを観察します。
下図は先ほどの休息モードから追跡モードへ切り替え直後です。
モード切替で向きを反転(左向き→右向き)しています。

画像


移動の軌跡を見るとX軸合わせ優先のアルゴリズムのようです。
横方向に曲がることができ、且つパックマンに近づける場合は必ず曲がっています。


では少しイジワルをします。
X軸合わせでは不利な位置にパックマンを待機させます。

画像


(D)地点ではモンスターが賢くないことが分かります。
下には行かず、愚直にX軸をあわせようとしています。

(E)地点では何故上に行かないのでしょうか?
捕まえる気がないんですか?

そして(F)地点では上に行きます。
(F)地点は先ほどの(A)地点の条件に近いと思うのですが、(A)地点では上に行かず、(F)地点では上に行く・・・

その後、アカベイはTの字を描くようにパックマンの下をグルグル回り続けます。
そのうち、休息モードに切替わり画面右上に帰って行きますが、再度追跡モードでやって来ても同じようにパックマンの下を回り続けます。

実はパックマンのいる場所、安全地帯のようです。
他のモンスターもアカベイと同様に永遠に同じ移動パターンを繰り返します。
ただし1面のパックマン2機目限定のようです。

パックマンに安全地帯があったとは、自分的には大発見です!!

まぁ役にも立たない大発見は置いておいて・・・

アカベイのアルゴリズムはX方向は座標比較で左右移動を判定するようですが、Y方向は良くわかりません。
もう少し考えてみますが、完全移植を狙っているわけではないので適当なところで切り上げます。

今回はここまで。
ぜんぜん電子工作してないし・・・

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 2

なるほど(納得、参考になった、ヘー)
面白い

この記事へのコメント

  • nekosan

    konyaさん。こんにちは。
    各モンスターの性格まで再現しようと
    してるんですね!

    ちなみに、(A)でアカベイが上に移動
    しないのは、面の開始時だけでなく、
    さらにはアカベイだけでなく、すべての
    モンスターが終始上にあがって来ません。

    面が進んでパワー餌が効かなくなると、
    こういうロジックの盲点(?)をついて
    追跡を巻くことをよく利用します。

    (E)も同様なのですが、私の記憶が
    確かなら、グズタだけは上に上がって
    くることがあったように思います。
    それ以外のモンスターはあがってこれ
    ません。

    そうそう。「EXCELで…」のサイト
    は以前眺めたことがあるのですが、
    自宅にEXCELが無いので、サクッと
    眺めて終ってしまったのですが、

    >まずモンスターには追跡モード
    >と休息モードがある。

    っていうのを今日初めて知って、
    あぁ、そうかも知れないなぁ、と
    納得しました。

    20年位前に読んだ「ALL
    ABOUT NAMCO」という
    本に色々詳しく書かれていたような
    気がしますが、既に絶版で…
    2008年04月20日 14:12
  • nekosan

    補足です。
    (A)も(E)も、モンスターが
    入ってこないのは”下から”だけで、
    ”上から”は普通に襲ってきます。
    2008年04月20日 14:14
  • Konya

    情報ありがとうございます!!
    つまりモンスターにとって一方通行の場所があるということでしょうか?
    (A)(E)は上から下の一方通行で、(C)(F)は一方通行ではない。
    あぁ「ALL ABOUT NAMCO」が読みたい。
    オークションで・・・  ¥50,000!!
    オイオイ・・・

    完全再現する気はないので適当なところで妥協し、完成を目指します。
    2008年04月20日 19:44
  • nekosan

    >一方通行の場所があるということでしょうか?

    そうですね。一方通行ってこと
    です。
    ただ、(E)は以前グズタが
    あがって来てしまったことが
    あったと記憶してます。
    どういう条件の時にあがって
    くるのかはよく判りません。

    逆に、AとE以外にはそういう
    例外は無かったと思います。

    あといくつかロジック的に
    特殊なことを思い出すと…

    ・一定の時間経過でモンスター
     が反転する
    ・パックマンの位置に関わらず、
     モンスターが家から出る時は
     左に歩き出す

    あたりでしょうか?

    いずれにせよPICには64KB
    とという物理的な壁があるので、
    「まず動く」って状態にしてから
    追加していくと様にしたほうが
    気楽な気もします。

    http://www.aurora.dti.ne.jp/~rap/g.pac.top.html
    動きのロジックなどは、この
    ページが参考になるかもしれ
    ません。

    ちなみに子供の頃は、ここにも
    載っている「芸術的1600点
    パターン」が大好きでした。
    2008年04月20日 20:28
  • Konya

    nekosanさんの情報とご紹介のサイトはとても参考になりました。
    ありがとうございました。
    解析はこの辺にしてモンスターを動かします。

    また、私もこのパターンを使っていました。
    良く出来たパターンですよね。
    2008年04月21日 21:42

この記事へのトラックバック