Listing of file='TICTAC' on disk='vmedia/games.wvd.zip'
# Sector 381, program filename = 'TICTAC' 0000 GOTO 105 0001 DEFFN'01"DEFFN'" 0002 DEFFN'00"LIST S 100,9999" 0003 DEFFN'02"GOSUB'" 0004 DEFFN'03"MAT" 0005 DEFFN'04"INPUT" 0006 DEFFN'05"REWIND" 0007 DEFFN'06"DATA" 0008 DEFFN'07"LOAD" 0009 DEFFN'08"SAVE" 0010 DEFFN'09"GOTO" 0011 DEFFN'10"SELECT" 0012 DEFFN'11"FOR" 0013 DEFFN'12"TO" 0014 DEFFN'13"STEP" 0015 DEFFN'14"NEXT" 0016 DEFFN'15"CLEAR P100" 0017 DEFFN'16"RENUMBER" 0018 DEFFN'17"RND(" 0019 DEFFN'18"ABS(" 0020 DEFFN'19"SGN(" 0021 DEFFN'20"INT(" 0022 DEFFN'21"SKIP" 0023 DEFFN'22"PLOT<" 0024 DEFFN'23"HEX(" 0025 DEFFN'24"RETURN" 0026 DEFFN'25"END" 0027 DEFFN'26"STOP" 0028 DEFFN'27"PRINT USING" 0029 DEFFN'28"READ" 0030 DEFFN'29"TRACE" 0031 DEFFN'30 0032 PRINT HEX(03) : RETURN 0033 DEFFN'31"CLEAR V" 0100 REM ****** THIS IS THE GAME OF TIC TAC TOE ****** 0105 DIM B(3,3),P(8),P1(3,8),I1(9),J1(9),O(9),N$,A$1,P3(8,2) 0110 DIM D$(3,3)3,B$(3,3)3,H$(3)18,H1$(3)32 0115 REM ****** INITIALIZE ARRAYS ****** 0120 GOSUB '139 0125 REM ****** TEACH ****** 0130 GOSUB '101(N$,F1) 0135 REM ****** BEGIN THE GAME ****** 0140 GOSUB '198 0145 REM ****** INPUT OPPONENTS MOVE ****** 0150 GOSUB '130(L) 0155 B(I,J)=X2 0160 M=M+1 : IF M<2 THEN 350 : GOTO 195 0165 IF M>4 THEN 220 0170 GOSUB '111 : A$="0" : INPUT "IS THAT WHERE YOU MEANT TO PLAY",A$ 0175 IF A$="0" THEN 220 : IF A$="Y" THEN 220 0180 I=I1(L) : J=J1(L) : B(I,J)=0 : M=M-1 0185 GOTO 150 0190 REM ****** COMPUTE PATH VALUES ****** 0195 GOSUB '140 0200 REM ****** DID HE WIN? ****** 0205 GOSUB '150(3*X2,K) : IF K=0 THEN 165 0210 GOSUB '199(3) 0215 REM ****** CAN I WIN? ****** 0220 GOSUB '150(2*X1,K) : IF K=0 THEN 234 0225 GOSUB '206(I,J,K) : B(I,J)=X1 : GOSUB '199(2) 0230 REM ****** CAN HE WIN? ****** 0234 IF M>4 THEN 260 0235 GOSUB '150(2*X2,K) : IF K=0 THEN 250 0240 GOSUB '206(I,J,K) : B(I,J)=X1 : GOTO 335 0245 REM ****** COUNT ZEROES FOR CAT'S GAME ****** 0250 GOSUB '204(N) 0255 IF N<2 THEN 260 : GOTO 270 0260 GOSUB '199(1) 0265 REM ****** CAN I SCORE-LOCK HIM ****** 0270 IF M>4 THEN 306 : PRINT : PRINT "I'M THINKING. DON'T RUSH ME ";N$ 0271 GOSUB '201(I,J,X1,Z) : IF I=0 THEN 280 0272 PRINT "I'VE GOT YOU NOW ";N$ : GOTO 325 0275 REM ****** CAN HE SCORE-LOCK ME ****** 0280 GOSUB '201(I,J,X2,Z) : IF I=0 THEN 305 0285 F=RND(F*10) : IF F>F9 THEN 290 0286 PRINT "HERE COMES YOUR CHANCE. I'LL CLOSE MY EYES ";N$ 0287 GOTO 320 0290 IF P(1)+P(2) =0 THEN 295 : GOTO 325 0295 IF B(1,2)<>0 THEN 325 : I=1 : J=2 : GOTO 325 0300 REM ****** FIND AN OFFENSIVE MOVE ****** 0305 PRINT : PRINT "HMMMMM" 0306 IF M<3 THEN 320 0310 GOSUB '203(I,J,Z) : IF Z=0 THEN 320 : GOTO 325 0315 REM ****** PRIORITY MOVE LOGIC ****** 0320 GOSUB '205(I,J) 0325 B(I,J)=X1 0330 REM ****** COUNT ZEROES FOR CAT'S GAME ****** 0335 GOSUB '204(N) 0340 IF N>1 THEN 150 : GOSUB '199(1) 0345 REM ****** FIRST MOVE LOGIC ****** 0350 IF L=5 THEN 320 0355 I,J=2 : GOTO 325 0360 F=RND(F*30) : IF F>F9 THEN 320 0365 I=1 : J=2 : GOTO 325 0370 REM *************************************************** 0375 REM ****** MOVE INPUT ROUTINE ******* 0380 DEFFN'130(L) 0385 GOSUB '111 0390 INPUT "YOUR MOVE",L 0395 IF L=100 THEN 480 0400 IF L<100 THEN 420 0405 A$="0" : INPUT "YOU WANT ANOTHER GAME, RIGHT",A$ 0410 IF A$="0"THEN 485 : IF A$="Y"THEN 485 0415 GOTO 435 0420 IF L<1 THEN 435 0425 IF L>9 THEN 435 0430 GOTO 450 0435 PRINT "ILLEGAL BLOCK NUMBER. TRY AGAIN." 0440 INPUT L 0445 GOTO 395 0450 I=I1(L) : J=J1(L) 0455 IF B(I,J)=0 THEN 475 0460 PRINT "THAT'S CHEATING. THAT BLOCK IS TAKEN." 0465 INPUT "TRY AGAIN",L 0470 GOTO 395 0475 RETURN 0480 GOSUB '199(0) 0485 GOSUB '198 0490 REM ****** END DEFFN'130 ****** 0495 REM ****** NEW GAME ROUTINE ****** 0500 DEFFN'198 0505 X1=1 : X2=-1 : M=0 0510 MAT B=ZER 0515 F=RND(10*F) : IF F<.5 THEN 150 : M=M+1 0520 F=RND(10*F) : IF F <.5 THEN 535 0525 IF F<.8 THEN 530 : B(1,2)=X1 : GOTO 150 0530 B(1,1)=X1 : GOTO 150 0535 B(2,2)=X1 : GOTO 150 0540 REM ****** END DEFFN'198 0545 REM ****** PATH VALUE ROUTINE ****** 0550 DEFFN'140 0555 FOR K=1 TO 8 0560 P(K)=0 0565 FOR K1=1 TO 3 0570 P2=P1(K1,K) 0575 I=I1(P2) : J=J1(P2) 0580 P(K)=P(K)+B(I,J) 0585 NEXT K1 0590 NEXT K 0595 RETURN 0600 REM ****** END DEFFN'140 0605 REM ****** WIN OR LOSE TEST ROUTINE ****** 0610 DEFFN'150 (X,K) 0615 FOR K=1 TO 8 0620 IF P(K)=X THEN 635 0625 NEXT K 0630 K=0 0635 RETURN 0640 REM ****** END OF DEFFN'150 ****** 0645 REM ****** END OF GAME ROUTINE ****** 0650 DEFFN'199(H) : IF H=0 THEN 675 0655 GOSUB '111 : PRINT H$(H),N$ 0660 PRINT H1$(H); : A$="0" : INPUT A$ 0665 IF A$="0" THEN 670 : IF A$="Y" THEN 670 : GOTO 675 0670 GOSUB '198 0675 PRINT : PRINT : PRINT "TO PLAY TIC TAC TOE, KEY IN RUN & RETURN" 0680 STOP 0685 REM ****** END OF DEFFN'199 ****** 0690 REM ****** DISPLAY ROUTINE ******* 0695 DEFFN'111 0700 GOSUB '30 : PRINT : MAT PRINT B$ : PRINT 0705 FOR I=1 TO 3 : FOR J=1 TO 3 : B=B(I,J) : IF B=-1 THEN 710 : IF B=1 THEN 715 : D$(I,J)=" - " : GOTO 720 0710 D$(I,J)=" X " : GOTO 720 0715 D$(I,J)=" O " 0720 NEXT J : NEXT I 0725 MAT PRINT D$ 0730 RETURN 0735 REM ****** END DEFFN'111 ****** 0740 REM ***** FINDS INTERSECTING PATHS = X ****** 0745 DEFFN'201 (I,J,X,Z) 0750 FOR K=1 TO 8 0755 IF P(K)=X THEN 760 : GOTO 800 0760 FOR K1=1 TO 8 : IF K1=K THEN 795 0765 I=0 0770 IF P3(K,1)=K1 THEN 795 : IF P3(K,2)=K1 THEN 795 0775 IF P(K1)=X THEN 780 : GOTO 795 0780 GOSUB '202(K,K1,I,J) 0785 IF B(I,J)=0 THEN 805 0790 I=0 0795 NEXT K1 0800 NEXT K 0805 RETURN 0810 REM ***** END DEFFN'201 ****** 0815 REM ***** FINDS COMMON POINT OF PATHS K & K1 ****** 0820 DEFFN'202(K,K1,I,J) 0825 IF K=K1 THEN 855 0830 FOR L1=1 TO 3 0835 P=P1(L1,K) 0840 FOR L2=1 TO 3 0845 IF P1(L2,K1)=P THEN 860 0850 NEXT L2 : NEXT L1 0855 PRINT "ERROR IN DEFFN'202. K=K1 OR NO INTERSECTION." : STOP 0860 I=I1(P) : J=J1(P) 0865 RETURN 0870 REM ***** END DEFFN'202 0875 REM ***** FINDS OFFENSIVE MOVE ****** 0880 DEFFN'203(I,J,Z) 0885 Z=0 : FOR K= 1 TO 8 : IF P(K)=X1 THEN 890 : GOTO 900 0890 FOR K1 = 1 TO 3 : P1=P1(K1,K) : I=I1(P1) : J=J1(P1) 0895 IF B(I,J)=0 THEN 905 : NEXT K1 0900 NEXT K : GOTO 910 0905 Z=1 0910 RETURN 0915 REM ***** END DEFFN'203 0920 REM ****** COUNT ZEROES ROUTINE ****** 0925 DEFFN'204 (N) 0930 N=0 : FOR I=1 TO 3 : FOR J=1 TO 3 0935 IF B(I,J)=0 THEN 940 : GOTO 945 0940 N=N+1 0945 NEXT J : NEXT I 0950 RETURN 0955 REM ****** END DEFFN'204 ****** 0960 REM ****** PRIORITY MOVE ROUTINE ****** 0965 DEFFN'205 (I,J) 0970 IF F9=0 THEN 990 0975 F=RND(F*30) : G=INT(10*F) 0980 IF G<1 THEN 975 : IF G>9 THEN 975 0985 I=I1(G) : J=J1(G) : IF B(I,J)=0 THEN 1010 : GOTO 975 0990 FOR K=1 TO 9 : O1=O(K) 0995 I=I1(O1) : J=J1(O1) 1000 IF B(I,J)=0 THEN 1010 : NEXT K 1005 PRINT "ERROR IN DEFFN'205" : GOSUB '199(0) 1010 RETURN 1015 REM ****** END DEFFN'205 ****** 1020 REM ****** OPEN BLOCK ON GIVEN PATH ROUTINE ****** 1025 DEFFN'206(I,J,K) 1030 FOR K1=1 TO 3 : P2=P1(K1,K) : I=I1(P2) : J=J1(P2) 1035 IF B(I,J)=0 THEN 1045 : NEXT K1 1040 PRINT "ERROR IN DEFFN' 206" : GOSUB '199(0) 1045 RETURN 1050 REM ****** END DEFFN'206 ****** 1055 REM ****** INITIALIZATION ROUTINE ******* 1060 DEFFN'139 1065 H$(1)="CAT'S GAME " : H$(2)="HA! I WIN " 1070 H$(3)="I LET YOU WIN " : H1$(1)="WANT TO PLAY AGAIN" 1075 H1$(2)="I'LL GIVE YOU ANOTHER CHANCE, OK" 1080 H1$(3)="WANT TO GO DOUBLE OR NOTHING" 1085 B$(1,1)=" 1 " : B$(2,1)=" 4 " : B$(3,1)=" 7 " 1090 B$(1,2)=" 2 " : B$(2,2)=" 5 " : B$(3,2)=" 8 " 1095 B$(1,3)=" 3 " : B$(2,3)=" 6 " : B$(3,3)=" 9 " 1100 I1(1),I1(2),I1(3)=1 : I1(4),I1(5),I1(6)=2 : I1(7),I1(8),I1(9)=3 1105 J1(1),J1(4),J1(7)=1 : J1(2),J1(5),J1(8)=2 : J1(3),J1(6),J1(9)=3 1110 MAT P3=ZER 1115 P3(7,1)=8 : P3(7,2)=3 : P3(8,1)=7 : P3(8,2)=3 : P3(3,1)=7 : P3(3,2)=8 1120 P3(4,1)=5 : P3(4,2)=6 : P3(5,1)=4 : P3(5,2)=6 : P3(6,1)=4 : P3(6,2)=5 1125 O(1)=5 : O(2)=1 : O(3)=9 : O(4)=7 : O(5)=3 : O(6)=2 : O(7)=8 : O(8)=6 : O(9) =4 1130 P1(1,7)=1 : P1(2,7)=2 : P1(3,7)=3 : P1(1,8)=4 : P1(2,8)=5 : P1(3,8)=6 1135 P1(1,3)=7 : P1(2,3)=8 : P1(3,3)=9 : P1(1,4)=1 : P1(2,4)=4 : P1(3,4)=7 1140 P1(1,5)=2 : P1(2,5)=5 : P1(3,5)=8 : P1(1,6)=3 : P1(2,6)=6 : P1(3,6)=9 1145 P1(1,1)=1 : P1(2,1)=5 : P1(3,1)=9 : P1(1,2)=3 : P1(2,2)=5 : P1(3,2)=7 1150 RETURN 1155 REM ******* END DEFFN'139 ********** 1160 REM ****** TEACHER ROUTINE ****** 1165 DEFFN'101(N$,F1) 1170 DIM A$1 1175 PRINT HEX(03) : SELECT P3 1180 A$="0" : INPUT "HELLO. MY NAME IS WALLY WANG. WHAT'S YOUR NAME",N$ 1185 PRINT "HELLO ";N$; 1190 INPUT ". DO YOU WANT TO PLAY TIC TAC TOE",A$ 1195 IF A$="0" THEN 1205 1200 IF A$="Y" THEN 1205 : PRINT "THEN GET LOST. THAT'S THE ONLY GAME I KNOW." : GOTO 1375 1205 A$="0" : INPUT "ME TOO. DO YOU KNOW HOW TO PLAY",A$ 1210 IF A$="Y" THEN 1330 : IF A$="0" THEN 1330 1215 IF A$="N" THEN 1220 : PRINT "NO YOU DON'T. I'LL EXPLAIN." : GOTO 1225 1220 PRINT "THEN I'LL EXPLAIN IT TO YOU, ";N$ : PRINT "I'LL GO SLOW SINCE YOU'RE OBVIOUSLY NOT TOO BRIGHT." 1225 PRINT "FROM NOW ON, JUST HIT RETURN FOR YES." : A$="0" 1230 INPUT "DO YOU UNDERSTAND",A$ 1235 IF A$="0"THEN 1245 : A$="0" : INPUT "YOU DON'T UNDERSTAND. HIT RETURN FOR YES.",A$ 1240 IF A$="0" THEN 1245 : GOSUB '30 : PRINT "IF YOU CAN'T WORK MY BUTTONS, YOU'RE TOO DUMB TO PLAY WITH ME,";N$ ; : GOTO 1375 1245 A$="0" : PRINT "FOR NO, KEY IN ANYTHING EXCEPT 0 OR A WORD BEGINNING WITH Y AND PU SH RETURN." 1250 INPUT "IS YOUR NAME RICHARD NIXON",A$ : IF A$="0"THEN 1255 : IF A$="Y"THEN 1255 : GOTO 1260 1255 PRINT "YES? THEN YOU'RE A DONCE OR A LIAR, OR BOTH." : GOTO 1245 1260 PRINT "ACTUALLY, FOR A YES OR NO RESPONSE, ONLY THE FIRST CHARACTER IS EX AMINED. I WILL EXCEPT A Y OR 0 FOR YES. ANYTHING ELSE IS NO." 1265 A$="0" : INPUT "DO YOU KNOW HOW TO INPUT YOUR CHOICE",A$ 1270 IF A$="0"THEN 1330 : IF A$="Y"THEN 1330 : PRINT "OK." 1275 L=0 : FOR I=1TO 3 : FOR J=1TO 3 : L=L+1 : B(I,J)=L : NEXT J : NEXT I 1280 MAT PRINT B; : A$="0" 1285 INPUT "THE BLOCKS ARE NUMBERED AS ABOVE. OK",A$ 1290 IF A$="0" THEN 1300 1295 IF A$="Y" THEN 1300 : PRINT "ARE YOU THAT DUMB, ";N$;"?" 1300 A$="0" : INPUT "YOURS ARE X, MINE ARE O. OK",A$ 1305 MAT B=ZER : GOSUB '111 1310 INPUT "NOW, PUT AN X IN THE CENTER BY KEYING IN THE BLOCK NO. & RETURN",L 1315 IF L=5 THEN 1320 : PRINT "YOU ARE REALLY DUMB, ";N$; : GOTO 1310 1320 PRINT "GOOD FOR YOU. YOU CAN END A GAME IN THE MIDDLE BY INPUTING A BL OCK NO. > 100. A 100 WILL STOP THE PROGRAM." 1325 A$="0" 1330 INPUT "ARE YOU READY TO PLAY",A$ 1335 IF A$="0" THEN 1360 : IF A$="Y" THEN 1360 1340 A$="0" : INPUT "DO YOU WANT ME TO REPEAT THE INSTRUCTIONS ",A$ 1345 IF A$="0" THEN 1260 : IF A$="Y" THEN 1260 : A$="0" 1350 INPUT "DO YOU STILL WANT TO PLAY ",A$ 1355 IF A$="0" THEN 1325 : IF A$="Y" THEN 1325 : GOTO 1375 1360 A$="0" : INPUT "ARE YOU A POOR LOSER",A$ : IF A$="0" THEN 1365 : IF A$="Y" THEN 1365 : F9=0 : GOTO 1370 1365 F9=.5 : PRINT "OK, ";N$;", I'LL LET YOU WIN SOME" : INPUT A$ 1370 SELECT P0 : GOTO 1385 1375 SELECT P0 : GOSUB '199(0) 1380 SELECT P0 1385 RETURN 1390 REM ****** END DEFFN'101 ******* 1395 SELECT P2 1400 FOR I=1 TO 25 1405 F=RND(F*10) 1410 G=INT(F*10) 1415 PRINT I,F,G 1420 NEXT I 1425 SELECT P0