敵アルゴリズムを変更してみる

  • 投稿日:
  • by
  • カテゴリ:

このパックマン風ゲームは少ないステップ数で動くように工夫されているのですが、現状の敵の動きが、自分に近づくように設計されているため、自分の位置によっては、右のように、はまり込んで、動けなくなってしまうことがあります。

まあ、普通は、自分を動かすので、このままでも悪くないのでしょうが、折角だから、こういう場面でも自由に動ける奴を作ってみましょう。

単純なコンセプトとして、乱数を使おうと思います。右か左か、上か下かを、神様の言う通りで、決めていくってわけです。

IchigoJam版は、6~7行目が敵のアルゴリズムを記述している場所なのですが、Y座標側はともかく、X座標側に当たる6行目が、自キャラの描画処理なんかと混ざってて、ややこしいので、N-BASIC版で改造を実証して、IchigoJamに落とし込む方向で考えてみましょうか。

N-BASIC版では600行でX座標を、630行でY座標を決めています。敵キャラはIで番号管理され、I=0~3なので、0番目だけ気まぐれさんにしていきましょうか。

600 IF I=0 THEN MO(I,0)=(MO(I,0)-(RND(1)<.5)*2-1)AND 15 ELSE MO(I,0)=MO(I,0)-(X>EX)*2-1
...
630 IF I=0 THEN MO(I,1)=MO(I,1)-(RND(1)<.5)*2-1 ELSE MO(I,1)=MO(I,1)-(Y>EY)*2-1

下線部が追加部分になります。基本的に、[0,1)の乱数で、方向を決めています。自分との位置関係に代わる部分です。X側だけ、AND 15する処理があるのは、ワープトンネルに突っ込む可能性があるためです。オリジナルのアルゴリズムでは、自キャラの位置を追うだけなので、ワープトンネルに入ることはないのですが、気まぐれさんは、気まぐれにワープトンネルに突入するので、この処理がいります。

さて、このアルゴリズムはとりあえず、うまく動いたので、これをIchigoJamに落とし込みます。

6 LCA,B:?" ":LCX,Y:?CHR$(232+C&1):LC20,0:?"SCR ";S:I=C&3:J=I+4:LC[I],[J]:?CHR$([I+8]):[J+8]=[I]:[I+16]=[J]:[I]=([I]+((I=0)*(RND(8)<4)+(I<>0)*(X>[I]))*2-1)&15:F=SCR([I],[J]):IFP||F=3||F=224[I]=[J+8]
7 [J]=[J]+((I=0)*(RND(8)<4)+(I<>0)*(Y>[J]))*2-1:F=SCR([I],[J]):IFP||F=3||F=224[J]=[I+16]

同様に下線部が変更部分です。後ろに文が続いているので、[I]と[J]の決定を、IF文にすることはできませんから、(I=0)や(I<>0)の値で、計算値を採用/不採用しています。

実はこれ、まだ、IchigoJamに食わせてないので、本当に動くかどうかわからないのですけれどね。

ステップ数が許すなら、遠くでは気まぐれだけど、近づいたら追いかけてくるとか、逆に、近くまでは追ってくるけれど、近くなったら気まぐれになるとか、組み合わせたロジックを持たせても面白いかも。

とりあえず、スクショのために安産地帯に逃げ込んでいたパックマンは、これを書いている間に気まぐれさんにつかまってGAME OVERしてましたw