キャラクターを変えてみよう

  • 投稿日:
  • by

最初の版のインベーダーは単純に数字を表示していただけなので、いささか地味でした。そこで、簡単な改造としいて、キャラクターを変更してみたいと思います。

とはいえ、ゲームの性質上、数字が分からなくなるようなのはダメです。また、残りステップ数も少ないので、簡単なのがいいです。

ということで、数字を丸数字に変えてみましょう。といっても、IchigoJamが丸数字を持っているわけではありません。プログラムで生成するのです。

1~9の数字は#31~#39で持っています。そして#E9に●があります。この二つを合成して、#E1~#E9に展開して、利用します。

以下のようになります。

1 CLS:CLV:X=5:Y=20:T=120:CLP:FORI=1TO9:FORJ=0TO7:A=PEEK(#748+J):B=PEEK(#180+I*8+J):POKE#700+I*8+J,A^(A&B):NEXT:NEXT
2 CLT:FORC=0TO27:A=C/4+3:LC1+(C%4)*2+A%2,A:?CHR$(#E0+RND(8)+1):NEXT:C=C+1
3 K=INKEY():D=(K=29)-(K=28)
4 LCV,2:?CHR$(0):LCQ,1:?CHR$(0):LCM,N:?CHR$(0)
5 LCX,Y:?CHR$(0):X=X+D:IFX<0X=0ELSEIFX>9X=9
6 IFK=32&&!NN=Y:M=X:BEEP
7 IFTICK()>TCLT:SCROLL2:IFSCR(1,Y)+SCR(2,Y)+SCR(3,Y)+SCR(4,Y)+SCR(5,Y)+SCR(6,Y)+SCR(7,Y)+SCR(8,Y)LC0,23:?"SCR:";S;LC1,10:?"GAME OVER":LC0,0:PLAY">AAA8AA8<C>B8BA8A+G8A":END
8 IFUU=U+1-8*(U=8):V=V+(U=8):U=U*(V<10):IFULCV,2:?CHR$(#F1)
9 IFWW=W+1-4*(W=4):Q=Q-(W=4):W=W*(Q>=0):IFWLCQ,1:?CHR$(#FF)
10 IFNN=N-1:F=SCR(M,N):IFF>224&&F<234BEEP:S=S+F-224:LCM,N:?CHR$(0):N=0:C=C-1:IF!CT=T-5*(T>60):GOTO2ELSEIFS%10=0IFUQ=!W*9+!!W*Q:W=!W+!!W*WELSEU=1:V=0
11 IFF=#F1ORF=#FFS=S+50+50*(F=#FF):LCM,N:?CHR$(0):U=U*(F=#FF):W=W*(F=#F1):N=0:PLAY"L32EDC"
12 F=0:LCX,Y:?CHR$(#F0):IFNLCM,N:?CHR$(#F2)
13 LC0,23:?"SCR:";S;:WAIT1:GOTO3

変更部には下線を入れてあります。1行目、2行目と、10行目だけです。

変更部について説明します。

CLP:FORI=1TO9:FORJ=0TO7:A=PEEK(#748+J):B=PEEK(#180+I*8+J):POKE#700+I*8+J,A^(A&B):NEXT:NEXT

ここが胆です。CLPでキャラクタを初期化して、#E9の●のパターンを、上から8bit読んでAに、数字のフォントを読んでBにいれて、A^(A&B)で合成します。A&Bで、丸からはみ出す部分を捨てます。マスク作業ですね。そして、AとXORを取って、丸のなかの数字を抜きます。これを1~9の順で繰り返します。最後9のときは#E9つまり●自身をつぶしてしまいますが、構いません。

そして、2行目の面の生成で、

?CHR$(#E0+RND(8)+1)

として、#E0へオフセットしてやります。

最後に10行目の当たり判定と得点処理を修正します。

IFF>224&&F<234BEEP:S=S+F-224

このとき、判定に16進表記をつかうと動きません。(IFF>#E0&&F<#EABEEP)これは、後半の"#EABEEP"がおかしな解釈になってしまうためのようです。まあ、10進数にすれば問題ないので、そういうものだと思うことにします。

※もう少し真面目に書くと、F<#EABEEPは F<#EABE EPのように解釈されるようです。#EABE=-5442なので、IFF>#E0&&F<#EABEは成立しません。残ったEPはSyntax Errorなのですが、実行されないためエラーにもなりません。こういうからくりだったわけです。F<234BEEPと書けば、混同されないので動きます。試してませんが F<#EA BEEPのように空白を置いても動くかと思います。

これでいくらか、ゲームっぽい画面になりましたか?