ヘッドオン風

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

昨日、四方向スクロールゲームを作ったときに、ヘッドオン風はどうだろう、的なことを書きましたが、そんじゃあ、今宵はそのものズバリ、ヘッドオン風のゲームを作ってみようかと思います。

ヘッドオンは、パックマン同様、ドットイーター型のゲームです。迷路の中を、車がドットを食べていきます。邪魔をする車もいます。

迷路の生成は、1KBパックマンのやり方を参考にしています。ここまでの、わたしのゲームは、足し算インベーダにしても、四方向スクロールゲームにしても、速度との兼ね合いから、画面の狭い範囲を使ってきましたが、今回は、折角ですし、大きく使ってみることにします。

右のように、ほぼ全画面。ドットは299個もあり、集めるのになかなか歯ごたえがあるかと思います。矢印キーで自在に操作するのもいいのですが、ちょっと不自由さを加えるために、方向転換は、スペースキーを押すたびに左に90°向きを変えることにします。また壁にぶつかったときも左に90°向きを変えます。

この縛りで、お邪魔カーにぶつかることなく、ドットをすべて集めたらステージクリアです。

残りバイト数がほとんどないので、追加は困難。本当は、音や、ボーナスアイテム、もう少し利口なお邪魔カーなどを構想していたのですが、すべて断念しました。例によって、キャラ生成も含んでいますので、これを分離すれば、多少の余裕はできるかもしれません。

1 CLS:CLV:CLP:A=~0:B=189:C=231:POKE#700,60,153,A,165,36,B,219,B,119,34,B,C,C,B,34,119,B,219,B,36,165,A,153,60,51,68,B,C,C,B,68,238:FORI=0TO31:POKE#720+I,~PEEK(#700+I):NEXT
2 B=1:M=2:FORY=1TO11:F=Y%2:P=!F*B+!!F*A:A=A&~(!!F*M):B=B|!F*M:M=M<<1:FORX=0TO15:C=3+!(P&(1<<X))*43:LCX,Y:?CHR$(C):LC30-X,Y:?CHR$(C):LCX,22-Y:?CHR$(C):LC30-X,22-Y:?CHR$(C):NEXT:NEXT
3 FORI=2TO9:IFI%2LC15,I:?CHR$(0):LC15,22-I:?CHR$(0):NEXTELSELCI,11:?CHR$(0):LC30-I,11:?CHR$(0):NEXT
4 T=10:X=29:Y=2:D=1:C=299:LET[0],0,29,20,46,3,1,2,46,0,1,20,46:LCX,Y:?CHR$(224+D)
5 FORN=0TO2:O=N*4:E=([O]+!RND(9))&3:F=[O+1]:G=[O+2]:LCF,G:?CHR$([O+3])
6 H=F+(E=3)-(E=1):I=G+(E=2)-!E:Z=SCR(H,I):IFZ=3||Z&~3=228E=(E+1)&3:GOTO6
7 LET[O],E,H,I,Z:LCH,I:?CHR$(228+E):NEXT
8 IFT>TICK()GOTO8ELSECLT:LCX,Y:?CHR$(0):V=X:W=Y:K=INKEY():IFK=32:D=(D+1)&3
9 X=V+(D=3)-(D=1):Y=W+(D=2)-!D:F=SCR(X,Y):IFF=3D=(D+1)&3:GOTO9ELSEIFF&~3=228LC11,11:?"GAME OVER":ENDELSEIFF=46S=S+1:C=C-1:IF!CA=~0:LC11,11:?"NEXT STAGE":WAIT120:GOTO2
10 LCX,Y:?CHR$(224+D):LC0,0:?"SCR:";S:GOTO5

変数

  • A    面生成用(奇数ライン)/PCG定義用
  • B    面生成用(偶数ライン)/PCG定義用
  • C    ドットカウンター/面生成用/PCG生成用
  • D    自車移動方向(0上/1左/2下/3右)
  • E    お邪魔カー移動方向
  • F    自車当たり判定用/お邪魔カー現X座標
  • G    お邪魔カー現Y座標
  • H    お邪魔カー新X座標
  • I     お邪魔カー新Y座標/PCG作業用
  • K    キー
  • M    マップ生成用マスク
  • N    お邪魔カー番号(0~2)
  • O    お邪魔カーデータポインター
  • P    面生成用パターン
  • S    スコア
  • T    TICK閾値(10)
  • V    自車現X座標
  • W    自車現Y座標
  • X    自車新X座標
  • Y    自車新Y座標
  • Z    お邪魔カー当たり判定
  • [0]~[11]    お邪魔カーデーター
    [N*4]  移動方向/[N*4+1] X座標/[N*4+2] Y座標/[N*4+3] マップ上キャラ保存用

1行目はPCG定義。2行目はマップ生成です。偶数ラインと奇数ラインは上から下に行くにつれ、通路が増えていきます。この処理をMを使って行っています。3行目は通路への穴あけです。

4行目で変数を初期化しています。5~7行目はお邪魔カーの移動処理です。8~10行目が自車の移動と当たり判定になります。とにかく6バイトしか空きがないので、何かを追加するのは難しいかと思いますので、AS ISで遊んでください。

※2行目の途中から3行目まで、おかしくなっていました(<<の部分がHTMLタグとみなされた)。現在は治っています。福野さん、ご指摘ありがとうございます。