100 REM ******************
110 REM *                *
120 REM *    MELTDOWN    *
130 REM *                *
140 REM * By Robin Nixon *
150 REM *                *
160 REM * (c) Computing  *
170 REM *     with the   *
180 REM *     Amstrad    *
190 REM *                *
200 REM ******************
210 REM
220 MODE 1
230 DEFINT a-z
240 DIM a(9,9):tt=32:x=0:y=0:bflag=0
250 savescr=&8000:restscr=&800C:gcol=&8018
260 INK 0,10:INK 1,26:INK 2,0:INK 3,2:BORDER 10
270 IF HIMEM=&3FFF THEN GOTO 290
280 MEMORY &3FFF
290 GOSUB 770
300 IF PEEK(&8024)=1 THEN GOTO 330
310 GOSUB 460
320 CALL savescr
330 IF PEEK(&8024)=1 THEN INK 1,10:INK 2,10:INK 3,10:CALL restscr:INK 1,26:INK 2,0:INK 3,2
340 POKE &8024,1
350 p=1:LOCATE 1,1:PEN 1:PAPER 2:PRINT"WHITE TO PLAY"
360 PAPER 0:LOCATE 1,3:PRINT "   ":LOCATE 1,3
370 GOSUB 1360
380 IF SGN(a(x,y))<>SGN(p) AND a(x,y)<>0 THEN GOTO 350
390 GOSUB 1140
400 p=-1:LOCATE 1,1:PEN 3:PAPER 2:PRINT"BLUE TO PLAY"
410 PAPER 0:LOCATE 1,3:PRINT STRING$(3," "):LOCATE 1,3
420 GOSUB 1360
430 IF SGN(a(x,y))<>SGN(p) AND a(x,y)<>0 THEN GOTO 400
440 GOSUB 1140
450 GOTO 350
460 PEN 2:PAPER 3:LOCATE 31,1:PRINT" MELTDOWN ";
470 LOCATE 31,2:PRINT"By R.Nixon";
480 PLOT 1000,1000,2
490 FOR x=2 TO 320 STEP 2
500 MOVE x,198+x*0.5:DRAW x,200-x*0.5
510 MOVE 638-x,198+x*0.5:DRAW 638-x,200-x*0.5
520 NEXT
530 PLOT 1000,1000,1
540 y=0
550 FOR x=0 TO 320 STEP tt
560 MOVE x,200-y:DRAW x+318,358-y
570 MOVE 638-x,200-y:DRAW 320-x,358-y
580 y=y+16
590 NEXT
600 FOR y=196 TO 166 STEP -2
610 PLOT 0,y,3:DRAW 318,y-158
620 PLOT 638,y,2:DRAW 320,y-158
630 NEXT
640 PLOT 0,196,1:DRAW 0,164:DRAW 318,6
650 MOVE 320,6:DRAW 638,164:DRAW 638,196
660 MOVE 318,6:DRAW 318,38
670 MOVE 320,6:DRAW 320,38
680 y=0
690 FOR x=0 TO 288 STEP tt
700 PEN 1:PAPER 3:CALL gcol
710 MOVE x+4,182-y:TAG:PRINT CHR$(x/tt+65);:TAGOFF
720 PEN 3:PAPER 2:CALL gcol
730 MOVE x+332,y+38:TAG:PRINT CHR$(x/tt+48);:TAGOFF
740 y=y+16
750 NEXT
760 RETURN
770 RESTORE 830
780 FOR x=&8000 TO &8023
790 READ a:POKE x,a:NEXT
800 REM
810 REM ** Save screen
820 REM
830 DATA &01,&00,&40
840 DATA &11,&00,&40
850 DATA &21,&00,&c0
860 DATA &ED,&B0
870 DATA &C9
880 REM
890 REM ** Restore screen
900 REM
910 DATA &01,&00,&40
920 DATA &11,&00,&c0
930 DATA &21,&00,&40
940 DATA &ED,&B0
950 DATA &C9
960 REM
970 REM ** Set graphic pen & paper
980 REM
990 DATA &CD,&93,&BB
1000 DATA &CD,&DE,&BB
1010 DATA &CD,&99,&BB
1020 DATA &C3,&E4,&BB
1030 RETURN
1040 PAPER 2
1050 IF a(x1,y1)<0 THEN PEN 3
1060 IF a(x1,y1)>0 THEN PEN 1
1070 IF a(x1,y1)=0 THEN PEN 2
1080 CALL gcol
1090 MOVE x1*tt+y1*tt+24,y1*16-x1*16+206
1100 a$=CHR$(ABS(a(x1,y1))+48):IF a$="4" THEN a$=CHR$(231):GOTO 1120
1110 IF a$>"4" THEN a$=CHR$(238)
1120 TAG:PRINT a$;:TAGOFF
1130 RETURN
1140 PAPER 0:LOCATE 1,1:PRINT STRING$(13," ")
1150 LOCATE 1,3:PRINT STRING$(3," ")
1160 a(x,y)=a(x,y)+p:x1=x:y1=y:SOUND 4,(p+1)*300+100,5:GOSUB 1040
1170 IF ABS(a(x,y))<4 THEN GOTO 1270
1180 ww=0:bw=0
1190 FOR j=0 TO 9:FOR k=0 TO 9
1200 ab=ABS(a(j,k)):IF ab>4 THEN a(j,k)=0:ab=0:x1=j:y1=k:GOSUB 1470:GOSUB 1040
1210 IF ab>3 THEN bflag=1:GOSUB 1280
1220 IF a(j,k)>0 THEN ww=1
1230 IF a(j,k)<0 THEN bw=1
1240 NEXT k,j
1250 IF ww+bw<2 THEN GOSUB 1500
1260 IF bflag=1 THEN bflag=0:GOTO 1180
1270 RETURN
1280 a(j,k)=p:x1=j:y1=k:GOSUB 1040
1290 FOR n=30 TO 70 STEP 21
1300 SOUND 4,n,2:NEXT
1310 IF j-1>=0 THEN a(j-1,k)=a(j-1,k)+p:x1=j-1:y1=k:GOSUB 1040:IF a(j-1,k)*p<0 THEN a(j-1,k)=0:GOSUB 1040
1320 IF j+1<=9 THEN a(j+1,k)=a(j+1,k)+p:x1=j+1:y1=k:GOSUB 1040:IF a(j+1,k)*p<0 THEN a(j+1,k)=0:GOSUB 1040
1330 IF k-1>=0 THEN a(j,k-1)=a(j,k-1)+p:x1=j:y1=k-1:GOSUB 1040:IF a(j,k-1)*p<0 THEN a(j,k-1)=0:GOSUB 1040
1340 IF k+1<=9 THEN a(j,k+1)=a(j,k+1)+p:x1=j:y1=k+1:GOSUB 1040:IF a(j,k+1)*p<0 THEN a(j,k+1)=0:GOSUB 1040
1350 RETURN
1360 dd=0:aa=0:PRINT CHR$(143);CHR$(8);
1370 i$=UPPER$(INKEY$):IF i$<"0" OR i$>"9" AND i$<"A" OR i$>"J" AND i$<CHR$(127) OR i$>CHR$(127) THEN GOTO 1370
1380 IF dd+aa<1 AND i$=CHR$(127) THEN GOTO 1370
1390 IF i$=CHR$(127) THEN PRINT " ";CHR$(8);CHR$(8);CHR$(143);CHR$(8);:aa=0:dd=0:GOTO 1370
1400 IF aa=1 AND i$>="A" AND i$<="J" THEN GOTO 1370
1410 IF dd=1 AND i$>="0" AND i$<="9" THEN GOTO 1370
1420 IF aa=0 AND i$>="A" AND i$<="J" THEN aa=1:x=ASC(i$)-65
1430 IF dd=0 AND i$>="0" AND i$<="9" THEN dd=1:y=VAL(i$)
1440 PRINT i$;CHR$(143);CHR$(8)
1450 IF dd+aa<2 THEN GOTO 1370
1460 RETURN
1470 FOR n=50 TO 15 STEP -7:SOUND 4,n,2:NEXT
1480 FOR n=30 TO 70 STEP 7:SOUND 4,n,2:NEXT
1490 RETURN
1500 PAPER 2:LOCATE 1,1:IF ww=1 THEN PEN 1:PRINT"WHITE WINS!" ELSE PEN 3:PRINT"BLUE  WINS!"
1510 PEN 2:PAPER 1:LOCATE 1,3:PRINT "Press SPACE"
1520 PRINT "  to play  "
1530 FOR j=500 TO 0 STEP -17:SOUND 4,j,3:NEXT
1540 WHILE INKEY$<>"":WEND:WHILE INKEY$<>" ":WEND
1550 RUN