100 REM TIC-TAC-TOE. USTED (X) VS. LA COMPUTADORA (O) 105 REM PARA TINY BASIC 110 GOTO 200 120 TABLERO ESTA EN LOCACION DE MEMORIA 0007-000F 130 . 0 IS EMPTY, 1 IS X. 3 TS O 140 I HAS CURRENT POSITION 150 G IS PEEK ROUTINE ADDRESS 160 P IS POKE ROUTINE ADDRESS 170 F=1 IF YOU PLAY FIRST 180 U IS NUMBER OF UNPLAYED SQUARES 190 Z=1 IF SOMEONE WON 200 REM 210 PRINT "TIC-TAC-TOE. USTED CONTRA TINY BASIC" 220 PRINT "USTED ES X. YO SOY O." 230 PRINT "USTED JUEGA TIPEANDO EL NUMERO DE UN CUADRO." 240 A=0 250 B=0 260 C=0 270 D=0 280 E=0 290 F=0 300 PRINT 310 PRINT "PRIMERO, "; 320 PRINT "POR FAVOR DIGAME DONDE DEBE ESTAR EL INICIO." 330 PRINT "EN DECIMAL"; 340 INPUT I 350 IF I/256*256=I GOTO 400 360 IF I/100*100=I GOTO 330 370 PRINT "NO. NO HEXADECIMAL. "; 380 GO TO 330 400 P=I+24 410 G=I+20 420 PRINT "ESO ES ";I/4096;(I-I/4096*4096)/256; 430 PRINT "00 EN HEXADECIMAL. GRACIAS." 440 GO TO 500 450 TO CONSERVE MEMORY, LINES 100-500 MAY BE RUN ONCE 460 THEN DELETED (CLEAR) BEFORE LOADING THE REST OF THE PROGRAM 500 REM---ON WITH THE SHOW... 1000 LET F=1 1010 PRINT 1020 PRINT "NEW GAME." 1100 LET I=7 1110 LET I=USR(P,I,0)*0+I+1 1120 IF I<16 GOTO 1110 1130 LET U=9 1140 LET Z=0 1150 IF F=0 THEN GOTO 4010 1160 GO TO 2010 1500 REM X GANA. 1510 LET Z=1 1520 LET F=0 2000 REM PRINT GAME STATE 2010 LET I=6 2100 PRINT 2110 LET I=I+1 2120 PRINT " "; 2130 GOTO USR (G,I)*20+2200 2200 PRINT I-6; 2210 GOTO 2300 2220 PRINT "X"; 2230 GOTO 2300 2260 PRINT "O"; 2300 IF I/3*3=I GOTO 2400 2310 PRINT " |"; 2320 GOTO 2110 2400 PRINT 2420 IF I=15 GOTO 3000 2430 PRINT "---+---+---" 2440 GOTO 2110 3000 IF Z=0 GOTO 3100 3010 REM THE GAME IS OVER. 3020 IF F=1 GOTO 3050 3030 PRINT "USTED GANA." 3040 GOTO 1010 3050 PRINT "YO GANO." 3060 GOTO 1010 3100 IF U>0 GOTO 3210 3110 PRINT "CAT'S GAME." 3120 LET F=1-F 3130 GOTO 1010 3200 REM INPUT NEXT PLAY. 3210 PRINT "USTED JUEGA"; 3220 INPUT I 3230 IF I>0 IF I<10 GOTO 3270 3240 PRINT "POR FAVOR TIPEE UN NUMERO ENTRE 1 y 9" 3250 PRINT "DONDE QUIERE PONER SU X" 3260 GOTO 3210 3270 IF USR (G,I+6)=0 GOTO 3310 3280 PRINT "ESE CASILLERO YA ESTA USADO." 3290 GOTO 3210 3300 REM CHECK IF X WON. 3310 LET U=USR(P,I+6,1)*0+U-1 3320 LET W=6100 3330 GOSUB W 3340 IF J>0 IF L*M*N=1 GOTO 1510 3350 LET W=W+100 3360 IF W<6500 GOTO 3330 3400 REM CHECK IF CATS GAME 3410 IF U=0 GOTO 2010 4000 REM FIND BEST O PLAY 4010 LET I=1 4020 LET T=-1 4290 REM EVALUATE I'TH SQUARE 4300 LET S=0 4310 IF USR(G,I+6)>0 GOTO 4480 4320 LET W=6100 4330 GOSUB W 4340 IF J=0 GOTO 4410 4350 LET J=L+M+N 4360 IF J=4 THEN GOTO 4410 4370 IF J=2 THEN LET S=S+20 4380 IF J=6 THEN LET S=S+100 4390 IF J=0 THEN LET S=S+2 4400 LET S=S+J 4410 LET W=W+100 4420 IF W<6500 GOTO 4330 4430 IF S(I-1)/4*4 GOTO 6440 6310 LET D=4 6320 REM AMBAS DIAGONALES PASAN POR EL CENTRO 6330 LET J=11 6340 GOTO 6500 6390 REM W=UP DIAGONAL 6400 LET D=2 6410 IF I>1 IF I<9 IF I=I/2*2+1 GOTO 6330 6430 REM NO HAY DIAGONAL EN ESTE CASILLERO 6440 LET J=0 6450 RETURN 6490 REM NOW WE KNOW CENTER OF THIS THREE AND +/- OFFSET 6500 LET L=USR(G,J-D) 6510 LET M=USR(G,J) 6520 LET N=USR(G,J+D) 6530 RETURN