昨日、四方向スクロールゲームを作ったときに、ヘッドオン風はどうだろう、的なことを書きましたが、そんじゃあ、今宵はそのものズバリ、ヘッドオン風のゲームを作ってみようかと思います。
ヘッドオンは、パックマン同様、ドットイーター型のゲームです。迷路の中を、車がドットを食べていきます。邪魔をする車もいます。
迷路の生成は、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タグとみなされた)。現在は治っています。福野さん、ご指摘ありがとうございます。
コメント