いわゆるマイ●スイー●ーです。MSX-BASIC でどれ位作れるかと思いまして……。
最初に爆弾の数を入力し、ちょっと待つと画面いっぱいに . が表示されます。
上下左右に爆弾がある場合はその数が表示されます。
(斜めは対象外。ここが異なります)
爆弾に触れるとドッカーン!💣😫
カーソルキー・スペースの他、ポート1のジョイスティック対応です。
100 T=RND(-TIME)
110 DEFINT A-Z:DIM B(32,23)
120 SCREEN 1:KEY OFF:WIDTH 32
130 COLOR ,4:CLS:INPUT"BOOM";B
140 COLOR ,12:CLS
150 FOR I=1 TO B
160 LOCATE 0,0,0:PRINT"WAIT";I;
170 X=RND(1)*32:Y=RND(1)*23
180 B(X,Y)=255
190 IF X=0 GOTO 220
200 IF B(X-1,Y)=255 GOTO 220
210 B(X-1,Y)=B(X-1,Y)+1
220 IF X=31 GOTO 250
230 IF B(X+1,Y)=255 GOTO 250
240 B(X+1,Y)=B(X+1,Y)+1
250 IF Y=0 GOTO 280
260 IF B(X,Y-1)=255 GOTO 280
270 B(X,Y-1)=B(X,Y-1)+1
280 IF Y=22 GOTO 310
290 IF B(X,Y+1)=255 GOTO 310
300 B(X,Y+1)=B(X,Y+1)+1
310 NEXT I:LOCATE 0,0
320 FOR I=1 TO 736:PRINT".";:NEXT I
330 X=RND(1)*32:Y=RND(1)*23
340 IF B(X,Y)=255 GOTO 330
350 GOSUB 590
360 S=STICK(0)+STICK(1):XX=X:YY=X
370 X=X-(S=7)*(X>0)+(S=3)*(X<31)
380 Y=Y-(S=1)*(Y>0)+(S=5)*(Y<22)
390 IF XX=X AND YY=Y GOTO 410
400 LOCATE X,Y,1
410 IF STRIG(0)+STRIG(1)<>-1 GOTO 360
420 LOCATE ,,0
430 IF B(X,Y)=255 GOTO 510
440 IF VPEEK(&H1800+Y*32+X)<>46 GOTO 470
450 T=T+1:LOCATE 0,23,0
460 PRINT"SCORE ";T;
470 IF B(X,Y)>0 GOTO 490
480 GOSUB 590:GOTO 360
490 LOCATE X,Y:PRINT CHR$(&H30+B(X,Y));
500 GOTO 360
510 COLOR ,8:FOR X=0 TO 31
520 FOR Y=0 TO 23
530 IF B(X,Y)<>255 GOTO 550
540 LOCATE X,Y,0:PRINT"*";
550 NEXT Y:NEXT X
560 IF STRIG(0)+STRIG(1)<>-1 GOTO 560
570 IF STRIG(0)+STRIG(1)=-1 GOTO 130
580 GOTO 570
590 IF B(X,Y)=0 GOTO 620
600 LOCATE X,Y:PRINT CHR$(&H30+B(X,Y));
610 RETURN
620 LOCATE X,Y:PRINT " ";
630 RETURN
WebMSX では起動してから乱数を発生するタイミング(TIME の値)が
毎回同じになってしまうので、現在時刻の秒から乱数を生成しています。
(MSX1 では CLOCK-ID がないので除外しています)
105 IF PEEK(&H2D)=0 GOTO 110
106 GET TIME T$
107 R=VAL(RIGHT$(T$,2))
108 R=RND(-R)
