さて、IchigoDyhookを入手したので、何か動くプログラムを一つはセーブしておきたいところ。とりあえず、こちらでみかけた、1KBでパックマン風ゲームを入力してました。
AhSki!の細密充填リストのようなコードを間違えないように写していきます。キーボードがしっかりしているので、それほど苦労しないで完了。
実行してみます。が、これ難しい。そして、みっちりとしたコードは、手を入れると壊してしまいそうで、難易度の調整すら難しそうです。2KB程度のメモリしかないIchigoJamならではの制約ですね。
それじゃあ、メモリが潤沢にあれば、もう少しいじりやすくなるのか? と、とりあえず、PC-8001+PCG8100の環境(つまりは、エミュレータ)に移植してみました。それが、この画面。
これは、QUASI88で実行していますが、PasocoMini PC-8001でも勿論動きます。オリジナルと同じキャラクターになるようにPCGにキャラクターをロードする部分が頭にあります。あとは、コードを詰め込まない形で記述していきます。24KBとおよそ12倍のメモリが使えるN-BASICなればこそです。可読性は比べ物にならないくらい良くなりました。さあ、これで難易度の調整が......と、思ったら、QUASI88では、ちょうどいい難易度でした。どうも、IchigoJamはキーが押されっぱなしになってしまう感じで、操作できないのが難易度を高めているようです。結論からいうと、ちょっとWAIT入れてやればいい感じにできました。
10 IFQ<146P+P-!!P:C=C+1:WAIT1:GOTO3
WAITの数値は大きくするほど遅くできますが、キーへの反応も悪くなります。1(=1/60s)位でちょうどいいように思いました。
なお、N-BASIC版のコードはこんなです。
100 DEFINT A-Z
110 DEFFNSC(SX,SY)=PEEK(&Hf300+SX*2+SY*120)
120 WIDTH 40,25:PRINTCHR$(12)
130 DATA e0,3c,7e,99,bd,99,ff,ff,99
140 DATA 83,55,aa,55,aa,55,aa,55,aa
150 DATA e8,3c,66,c3,81,81,c3,66,3c
160 DATA e9,3c,7e,ff,ff,ff,ff,7e,3c
170 DATA eb,18,24,42,81,bd,bd,bd,7e
180 DATA ff,04,3c,2f,56,6a,d6,ac,f0
190 FOR C=1 TO 6
200 READ CH$:CH=VAL("&H"+CH$)
210 FOR I=0 TO 7
220 READ D$:D=VAL("&H"+D$)
230 A=CH*8+I:AL=A MOD 256:AH=INT(A/256)
240 OUT 0,D:OUT 1,AL:OUT 2,(AH OR &H10):OUT 2,AH
250 NEXT I
260 NEXT C
270 DATA 00,DE,52,52,FE,50,DE,42,FA,0A
280 DIM M(9)
290 FOR I=0 TO 9
300 READ D$:M(I)=VAL("&H"+D$)
310 NEXT I
320 FOR G=0 TO 79
330 X=G MOD 8:Y=INT(G/8)
340 A=&H83:IF(M(Y)AND(2^X))<>0THEN A=&H2e
350 LOCATE X,Y:PRINTCHR$(A)
360 LOCATE 15-X,Y:PRINTCHR$(A)
370 LOCATE X,20-Y:PRINTCHR$(A)
380 LOCATE 15-X,20-Y:PRINTCHR$(A)
390 NEXT G
400 LOCATE 1,2:PRINTCHR$(&Hff)
410 LOCATE 14,18:PRINTCHR$(&Hff)
420 DIM MO(3,2)
430 FOR M=0 TO 3
440 MO(M,0)=7+M:MO(M,1)=10:MO(M,2)=0
450 NEXT M
460 X=3:Y=10
470 K$=INKEY$
480 IF K$=CHR$(&H1b) OR K$=CHR$(3) THEN STOP
490 PH=H:PV=V:PX=X:PY=Y
500 IF K$<>""THENH=(K$="h")-(K$="k"):V=(K$="u")-(K$="j")
510 IF FNSC(X+H,Y+V)=&H83 THEN H=PH:V=PV
520 X=(X+H)AND 15:Y=Y+V:Z=FNSC(X,Y)
530 IF Z=&H83 THEN X=PX:Y=PY
540 LOCATE PX,PY:PRINT " "
550 LOCATE X,Y:PRINTCHR$(&He8+(C MOD 2))
560 LOCATE 20,0:PRINT "SCR ";S
570 I=C MOD 4
580 LOCATE MO(I,0),MO(I,1):PRINTCHR$(MO(I,2))
590 EX=MO(I,0):EY=MO(I,1)
600 MO(I,0)=MO(I,0)-(X>EX)*2-1
610 F=FNSC(MO(I,0),MO(I,1))
620 IF P OR F=&H83 OR F=&He0 THEN MO(I,0)=EX
630 MO(I,1)=MO(I,1)-(Y>EY)*2-1
640 F=FNSC(MO(I,0),MO(I,1))
650 IF P OR F=&H83 OR F=&He0 THEN MO(I,1)=EY
660 MO(I,2)=FNSC(MO(I,0),MO(I,1))
670 LOCATE MO(I,0),MO(I,1):PRINTCHR$(&Heb+(P=0)*11)
680 FOR G=0 TO 3
690 IF X=MO(G,0)AND Y=MO(G,1) THEN IF P THEN S=S+R:R=R+R:MO(G,0)=8:MO(G,1)=10:Q=Q-(MO(G,2)=&H2e):MO(G,2)=0 ELSE 740
700 NEXT G
710 IF Z=&H2e THEN S=S+10:Q=Q+1 ELSE IF Z=&Hff THEN P=20:R=200
720 IF Q<146 THEN P=P+(P<>0):C=C+1:GOTO 470
730 END
740 PRINTCHR$(12);"GAME OVER ";S:END
コメント