0 CLR 50 REM COPYRIGHT 1991 - COMPUTE PUBLICATIONS INTL LTD - ALL RIGHTS RESERVED 100 GOSUB1750:GOSUB1210 110 GOSUB1530:GOSUB300 120 PRINT PL$(OP,PL);"'S MOVE":PRINT 130 ON (OP*2)+PL GOSUB420,590,590,420,420,420,590,590,590,690 140 GM$(MV)=BD$+" "+CHR$(R+64)+CHR$(N+48) 150 MV=MV+1:PL=ABS(PL-3) 160 GOSUB860:GOSUB300 170 IF EG=0 THEN120 180 NM=MV-1 190 REM 200 REM ANNOUNCE WINNER 210 REM 220 PRINT "AND THE WINNER IS..." 230 PRINT:PRINT PL$(OP,ABS(PL-3)) 240 GOSUB940 250 GET K$:IF OP=4 AND K$<>"_" THEN110 260 OP=0 270 PRINT " = PRESS RETURN TO CONTINUE ="; 280 GET K$:IF K$<>CHR$(13) THEN280 290 GOTO110 300 REM 310 REM DISPLAY BOARD 320 REM 330 PRINT CHR$(147) 340 PRINT:PRINT 350 FOR I=1 TO 4 360 N=VAL(MID$(BD$,I,1)) 370 PRINT CHR$(I+64);") ";LEFT$("[221][221][221][221][221][221][221]",N) 380 PRINT 390 NEXT I 400 PRINT 410 RETURN 420 REM 430 REM GET HUMAN'S MOVE 440 REM 450 PRINT "ROW: "; 460 GET K$:IF K$<"A" OR K$>"D" THEN460 470 R=ASC(K$)-64 480 X=VAL(MID$(BD$,R,1)) 490 IF VAL(BD$)=INT(10^(4-R)*X) THEN X=X-1 500 IF X=0 THEN460 510 PRINT K$:R=ASC(K$)-64 520 PRINT "NUMBER TO REMOVE: "; 530 GET K$:IF K$<"1" OR K$>CHR$(X+48) THEN530 540 PRINT K$:N=VAL(K$) 550 PRINT " = PRESS RETURN TO ACCEPT ="; 560 GET K$:IF K$="" THEN560 570 IF K$<>CHR$(13) THEN GOSUB300:PRINT PL$(OP,PL);"'S MOVE":PRINT:GOTO420 580 RETURN 590 REM 600 REM GET COMPUTER'S MOVE 610 REM 620 BD=VAL(BD$):MV$=WM$(BD) 630 IF MV$="" THEN690 640 R=ASC(MID$(MV$,1,1))-64:N=VAL(MID$(MV$,2,1)) 650 PRINT "ROW:";CHR$(64+R) 660 PRINT "NUMBER TO REMOVE:";N 670 IF OP<>4 THEN FOR I=1 TO 1000:NEXT I 680 RETURN 690 REM 700 REM GET RANDOM MOVE 710 REM 720 A$="" 730 FOR I=1 TO 4 740 R$=MID$(BD$,I,1) 750 IF R$<>"0" THEN A$=A$+CHR$(I+48) 760 NEXT I 770 IF LEN(A$)=1 THEN R=VAL(A$):GOTO790 780 R=VAL(MID$(A$,INT(RND(1)*LEN(A$))+1,1)) 790 X=VAL(MID$(BD$,R,1)) 800 IF VAL(BD$)=INT(10^(4-R)*X) THEN X=X-1 810 N=INT(RND(1)*X)+1 820 PRINT "ROW:";CHR$(64+R) 830 PRINT "NUMBER TO REMOVE:";N 840 IF OP<>4 THEN FOR I=1 TO 1000:NEXT I 850 RETURN 860 REM 870 REM EXECUTE MOVE AND CHECK FOR WIN 880 REM 890 CN=VAL(MID$(BD$,R,1)) 900 CN=CN-N 910 BD$=MID$(BD$,1,R-1)+CHR$(CN+48)+MID$(BD$,R+1,4) 920 IF BD$="1000" OR BD$="0100" OR BD$="0010" OR BD$="0001" THEN EG=1 930 RETURN 940 REM 950 REM LEARN FROM GAME 960 REM 970 REM REWARD WINNING MOVES 980 MV=MV-1:IF MV=0 THEN RETURN 990 BD=VAL(LEFT$(GM$(MV),4)) 1000 MV$=RIGHT$(GM$(MV),2) 1010 F=0:A$=WM$(BD):IF A$="" THEN A$=MV$:GOTO1080 1020 FOR I=1 TO LEN(A$) STEP 2 1030 IF MID$(A$,I,2)=MV$ THEN F=I 1040 NEXT I 1050 IF F=0 THEN A$=MV$+A$:GOTO1080 1060 IF F=1 THEN1080 1070 A$=LEFT$(A$,F-3)+MV$+MID$(A$,F-2,2)+MID$(A$,F+2) 1080 WM$(BD)=A$ 1090 REM PUNISH LOSING MOVES 1100 MV=MV-1:IF MV=0 THEN RETURN 1110 BD=VAL(LEFT$(GM$(MV),4)) 1120 MV$=RIGHT$(GM$(MV),2) 1130 F=0:A$=WM$(BD):IF A$="" THEN970 1140 FOR I=1 TO LEN(A$) STEP 2 1150 IF MID$(A$,I,2)=MV$ THEN F=I 1160 NEXT I 1170 IF F=0 THEN970 1180 IF F+1=LEN(A$) THEN WM$(BD)=LEFT$(WM$(BD),F-1):GOTO970 1190 WM$(BD)=LEFT$(A$,F-1)+MID$(A$,F+2,2)+MV$+MID$(A$,F+4) 1200 GOTO970 1210 REM 1220 REM LOAD EXPERINCE 1230 REM 1240 PRINT CHR$(147) 1250 PRINT "LOAD PREVIOUS GAME EXPERIENCE? "; 1260 GET K$:IF K$<>"Y" AND K$<>"N" THEN1260 1270 IF K$="N" THEN PRINT "NO":FOR I=1 TO 500:NEXT I:GOTO1350 1280 PRINT "YES":PRINT:INPUT "FILENAME";A$:IF A$="" THEN1350 1290 OPEN 15,8,15 1300 OPEN 1,8,2,A$+".AI,S,R" 1310 INPUT#15,E,E$ 1320 IF E THENPRINT"* ";E$;" *":FOR I=1TO2500:NEXT I:CLOSE1:CLOSE15:GOTO1210 1330 INPUT#1,BD:INPUT#1,MV$:WM$(BD)=MV$:IF ST=0 THEN1330 1340 CLOSE 1:CLOSE 15 1350 RETURN 1360 REM 1370 REM SAVE EXPERIENCE 1380 REM 1390 PRINT CHR$(147) 1400 PRINT "SAVE GAME EXPERIENCE? "; 1410 GET K$:IF K$<>"Y" AND K$<>"N" THEN1410 1420 IF K$="N" THEN PRINT "NO":GOTO1520 1430 PRINT "YES":PRINT:INPUT "FILENAME";A$:IF A$="" THEN1520 1440 OPEN 15,8,15,"S0:"+A$+".AI" 1450 OPEN 1,8,2,A$+".AI,S,W" 1460 INPUT#15,E,E$ 1470 IF E THENPRINT"* ";E$;" *":FOR I=1TO2500:NEXT I:CLOSE1:CLOSE15:GOTO1360 1480 FOR I=1 TO 1357 1490 IF WM$(I)<>"" THEN PRINT#1,I:PRINT#1,WM$(I) 1500 NEXT I 1510 CLOSE 1:CLOSE 15 1520 RETURN 1530 REM 1540 REM PREPARE FOR NEW GAME 1550 REM 1560 BD$="1357" 1570 FOR I=1 TO NM:GM$(I)="":NEXT I 1580 MV=1 1590 EG=0 1600 IF OP=4 THEN WF=ABS(WF-3):PL=WF:GOTO1740 1610 PL=1 1620 WF=1 1630 PRINT CHR$(147);" 1-3-5-7 " 1640 PRINT 1650 PRINT:PRINT " 1) HUMAN MOVES FIRST" 1660 PRINT:PRINT " 2) COMPUTER MOVES FIRST" 1670 PRINT:PRINT " 3) HUMAN VS HUMAN" 1680 PRINT:PRINT " 4) COMPUTER VS COMPUTER" 1690 PRINT:PRINT " 5) AUTO-LEARN MODE" 1700 PRINT:PRINT " 6) QUIT" 1710 GET K$:IF K$<"1" OR K$>"6" THEN1710 1720 IF K$="6" THEN GOSUB1360:PRINT:PRINT "THANKS FOR PLAYING":END 1730 OP=VAL(K$)-1 1740 RETURN 1750 REM 1760 REM INITIALIZE PROGRAM 1770 REM 1780 X=RND(-TI) 1790 DIM WM$(1357) 1800 DIM GM$(15) 1810 DIM PL$(4,2) 1820 RESTORE 1830 FOR OP=0 TO 4:FOR PL=1 TO 2:READ PL$(OP,PL):NEXT PL:NEXT OP 1840 RETURN 1850 DATA THE HUMAN,THE COMPUTER 1860 DATA THE COMPUTER,THE HUMAN 1870 DATA HUMAN1,HUMAN2 1880 DATA COMPUTER1,COMPUTER2 1890 DATA THE COMPUTER,MR. RANDOM