Ichigo Fields

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

フルーツフィールドっていうゲームがあったんですよ。1986年のPiO 9月号に掲載され、PC-8801,PC-8001,FM-7,MZ-2500/2200/2000,X1,MSX/MSX2,PC-1251/55,そして、PC-1350の8機種で遊べました。

当時PC-8801mkIIユーザだったわたしは、PC8801版のみならず、PC-8001版も入力して、せっせと遊びました……受験生だったのに!

そんな、はまった、フルーツフィールドですが、今は、まあ、エミュレータ上で遊べますのでそれでもいいのですが、折角なので、IchigoJamでも遊べないか、トライしてみました……。一面分なら実装できました。

面データをIchigoROMのI2C領域に置くとかすれば、もっとたくさんの面を実装できるかもしれませんが、今はこれで良しとします。

1 CLS:CLV:CLP:W=~0:LET[0],W,W,W,W,W,W,W,W,W,W,W,W,#FFF,0,#E00,#F000,0,W,W,#543F,#152,0,0,#F050,W,W,W,#534F,W,W,W,W,W,W,W,W,W,W,W,W
2 FORX=0TO17:LCX,0:?CHR$(3):LCX,11:?CHR$(3):NEXT:FORY=1TO10:LC0,Y:?CHR$(3):LC17,Y:?CHR$(3):NEXT
3 X=0:Y=0:FORA=0TO9:FORB=0TO3:M=[A*4+B]:FORZ=0TO3:C=M>>(Z*4)&15:LC1+B*4+Z,1+A:?CHR$(!!C*(223+C-(C=15)*235+(C=5)*27)):R=R+(C=5):C=C-14:X=!C*(1+B*4+Z)+!!C*X:Y=!C*(1+A)+!!C*Y:NEXT:NEXT:NEXT
4 GSB9:LCX,Y:?CHR$(237):IF!RENDELSEK=INKEY():IF!KCONTELSEIFK=32BEEP:GOTO5ELSEH=(K=29)-(K=28):V=(K=31)-(K=30):LCX,Y:?CHR$(0):X=X+H:Y=Y+V:F=SCR(X,Y):IFF&&F<>255X=X-H:Y=Y-V:CONTELSEBEEP:R=R-(F=255):CONT
5 P=X+H:Q=Y+V:F=SCR(P,Q):IFF&~3<>224GOTO4
6 G=F&3:L=(G=1)-!G:W=(G=3)-(G=2):D=SCR(P+L,Q+W):C=!G*(H=-1)+(G=1)*(H=1)+(G=2)*(V=-1)+(G=3)*(V=1):IFABS(F-D)*(F&2=D&2)*C=1GOTO4
7 IFDIFCBEEP:LCP,Q:?CHR$(0):GOTO4ELSEGOTO4
8 LCP,Q:?CHR$(0):P=P+L:Q=Q+W:D=SCR(P+L,Q+W):IFDLCP,Q:?CHR$(F):GOTO4ELSECONT
9 LC0,12:?"ICHIGO FIELDS.":?"LEFT FRUITS ";R;". PHASE ";N+1;".":RTN

面データは[0]~[39]に入っています。1コマが1ニブル(4bit)で表現されています。

  • 0 空白
  • 1 ←
  • 2 →
  • 3 ↑
  • 4 ↓
  • 5 イチゴ
  • 14 REMくん
  • 15 壁

下位ニブルから順にX座標に対して+0, +1, +2, +3となります。「壁→イチゴ←」なら#152Fになります。4ワードで1行、全部で10行あるので、80バイト分のデータで一面分になります。配列的には2面分持てますが、データを書き込むコードがあふれてしまうので、一面分しか持てません。