見出し画像

FX-702P

  この機種は高校生の時、秋葉原で購入した。いろいろとプログラミングして遊んだが最初に作ったゲームは「月面着陸LUNAR LANDING」だったと記憶している。ちょうどスペースシャトルが地上に着陸している映像を観ていて「BEAUTIFUL LANDING!」とアナウンサーが叫んだのが印象に残りゲームの着陸成功時に取り入れた。重力加速度を計算し、エネルギーの残量に気をつけながら逆噴射し自機を月面に着陸させるゲーム。実際には違うがイメージは次のような感じ。

 そしてスターウォーズからインスピレーションを受けて敵のHを照準(+)に合わせてビーム><を撃つというゲーム。タイトルは「STAR FIRE」だったかな。結構の自信作であった。

スクリーンショット 2020-09-19 午前11.46.43

 このゲームともう一つのゲームをマイクロカセットテープに納めて雑誌社に持ち込み採用されたのが「TRIWAY RACE」。三車線を頭に思い浮かべてライバルの車<IOIの座標を参考にして自分の車(I5Iを操作して時間内に走行距離を競うというゲームである。これらのゲームは高校生の時にプログラミングした。大学入試は惨敗で残念ながら代々木ゼミナールに通っていたが当時代々木にあった「工学社」の編集部に直接持ち込んだ。恥ずかしくて友人と編集部の扉の前で担当者の顔をあまり見れずに手渡した記憶がある。

 雑誌は、工学社1984年発行 I/O別冊 プログラム電卓 ゲーム3

画像2

画像3

 上記の映像はFX-702Pエミュレータに雑誌のリストを打ち込んだものであるが、このエミュレータは、SGNが認識されない、変数は$とA-Zのみ、↑は^を代用、πはPIを代用、等という制約があるため一部コードを改変してある。以下に改変前のコードを載せる。行番号2に乱数のサブルーチンを入れて呼び出しているのは若い番号のサブルーチンほど速くなるためである。

追記: 自分の記事とマニュアルを読んだら「DEFM 1」と最初に命令すると、変数が増えてA1〜A6、A(1〜6)が使えるようになった。

All programs: "TRIWAY RACE"

P0

1 GOTO 10
2 R=RAN#*3*SGN (COS (RAN#*π)):RET
10 WAIT 0:MODE 5
20 T=100:X=0:F=1
30 PRT "                     "
40 PRT "(IOI--< *** TRIWAY RACE ***"
45 $=" BEST RECORD ":GSB 900:PRT ####;H;"KM.   ";
48 PRT "------";N$;O$
50 $=" (((PUSH ANY KEY)))":GSB 900
60 FOR I=1 TO 50:A$=KEY:IF A$="";NEXT I:GOTO 600
70 PRT 
80 $="            (IOI              "
90 A4=0:A5=0:A6=0:A1=-2:A2=-6:A3=-10:S=3:Y=INT (RAN#*3)+1
100 PRT ##;CSR 4;A1;" ";A2;" ";A3;
105 PRT#;CSR 0;Y;MID(17-A(Y+3),14);"<I";S;"I";
110 IF T<0 THEN 500
120 A$=KEY:IF A$="↑";Y=Y-1:GOTO 300
130 IF A$="+";Y=Y+1:GOTO 320
140 IF A$="6";S=S+1:GOTO 340
150 IF A$="*";S=S-1:GOTO 360
155 PRT #;CSR 17;S;
160 GSB 2:A1=A1-5+R+S:A4=A1:IF A1<0;A4=0
165 IF A1>21;A1=-RAN#*20-2
170 GSB 2:A2=A2-5+R+S:A5=A2:IF A2<0;A5=0
175 IF A2>21;A2=-RAN#*20-2
180 GSB 2:A3=A3-5+R+S:A6=A3:IF A3<0;A6=0
185 IF A3>21;A3=-RAN#*20-2
190 IF A(Y)>14 THEN 450
195 IF A(Y+3)>14;A(Y+3)=0
200 T=T-1:X=X+S
210 IF X>600;IF F=1 THEN 280
270 GOTO 100
280 F=0:T=T+50:WAIT 50:PRT CSR 3;"BONUS TIME"
290 GSB 485:GOTO 100
300 IF Y<1 THEN 400
310 GOTO 190
320 IF Y>3 THEN 400
330 GOTO 190
340 IF S>9;S=9
350 GOTO 155
360 IF S<0;S=0
370 GOTO 155
400 PRT CSR 0;#;Y;"==============";:T=T-10:X=X-50
410 GSB 490:GOTO 482
450 PRT CSR 1;MID(2,16);
460 GSB 490:PRT CSR 15;"####";
470 FOR I=2 TO 17 STEP 3:PRT CSR 1;MID(I,14);:NEXT I
480 T=T-20:X=X-100
482 GSB 485:GOTO 90
485 WAIT 50:PRT CSR 0;"TIME ";###;T;" RECORD ";####;X
488 WAIT 0:RET
490 FOR I=1 TO 8:PRT CSR 15;"*#*#";CSR 15;"#*#*";:NEXT I:RET
500 $=" #### GAME OVER ####"
510 PRT :GSB 900:PRT :WAIT 50
520 PRT "YOUR RECORD ";####;X;"KM."
530 IF X>H THEN 550
540 GOTO 10
550 WAIT 10:FOR I=1 TO 3:PRT CSR 4;"             "
560 PRT CSR 4;"NEW RECORD !!":NEXT I
570 INP " INPUT YOUR NAME",$:H=X:IF LEN($)<=7;N$=$:O=0:GOTO 10
580 N$=MID(1,7):O$=MID(8,LEN($)-7):GOTO 10
600 PRT :$=" (↑)=RIGHT, (+)=LEFT":GSB 900
610 PRT :$="SPEED(6)=UP,(*)=DOWN":GSB 900
620 PRT :GOTO 10
900 FOR I=1 TO LEN($):FOR J=1 TO 5:NEXT J
910 PRT MID(I,1);:NEXT I:RET

この記事が気に入ったらサポートをしてみませんか?