OXO


The classic game, played against the computer. But in our version the computer can be beaten!

   10 REM NOUGHTS AND CROSSES @1982 BY MICHAE
L BEWS
   20 REM CONVERTED TO BBC MICRO BY C.R.TANNE
R
   30 DIM a$(9),a(9):d=0:h=0:m=0:n=0:t=0
   40 *FX9,2
   50 *FX10,2
   60 MODE 1:VDU 28,4,27,35,4,19,0,4,0,0,0,23
,224,-1,-1,-1,-1,-1,-1,-1,-1,23,225,24,126,10
2,195,195,102,126,24,23,227,129,195,102,60,24
,60,102,195,23;8202;0;0;0;
   70 Y$=CHR$(224)+"     "+CHR$(224)+"     "+
CHR$(224)+"     "+CHR$(224)
   80 Z$=STRING$(19,CHR$(224))
   90 GOTO 470
  100 VDU 19,1,1,0,0,0,19,2,2,0,0,0
  110 SOUND 1,-15,t*4,1:t=t+1:a$(n)=CHR$(a+22
6):a(n)=SGN(a):a=-a:IF a<0 THEN PRINT TAB(30,
10);" ";
  120 FOR x=0 TO 2:FOR y=1 TO 3:z=x*3+y
  130     IF a$(z)=CHR$(225) THEN COLOUR 2:GO
TO 150
  140     IF a$(z)=CHR$(227) THEN COLOUR 1 EL
SE COLOUR 3
  150 PRINT TAB(3+6*y,5+5*x);a$(z):NEXT y:NEX
T x
  160 FOR x=0 TO 2:IF ABS(a(3*x+1)+a(3*x+2)+a
(3*x+3))=3 OR ABS(a(x+1)+a(x+4)+a(x+7))=3 THE
N x=2:NEXT:GOTO 540
  170 IF x>1 THEN GOTO 190
  180 IF ABS(a(5)+a(5+2*(x+1))+a(5-2*(x+1)))=
3 THEN x=2:NEXT:GOTO 540
  190 NEXT x:IF t=9 THEN GOTO 340
  200 IF a<0 THEN GOTO 420
  210 IF t>0 THEN GOTO 240
  220 n=1+2*INT(RND(4)):IF n=5 THEN GOTO 220
  230 GOTO 100
  240 k=2:n=0
  250 FOR x=0 TO 2:IF a(3*x+1)+a(3*x+2)+a(3*x
+3)=k THEN T=x:x=2:NEXT:x=T:GOTO 350
  260 IF a(x+1)+a(x+4)+a(x+7)=k THEN T=x:x=2:
NEXT:x=T:GOTO 370
  270 IF x=2 THEN GOTO 290
  280 IF a(5)+a(5+2*(x+1))+a(5-2*(x+1))=k THE
N T=x:x=2:NEXT:x=T:GOTO 390
  290 NEXT x:k=-k:IF k<0 THEN GOTO 250
  300 FOR x=1 TO 40:n=1+2*INT(RND(4)):IF n<>5
 AND a(n)=0 THEN x=40:NEXT:GOTO 100
  310 NEXT x
  320 FOR x=1 TO 9:IF a(x)=0 THEN n=x:x=9:NEX
T:GOTO 100
  330 NEXT x
  340 COLOUR 3:PRINT TAB(13,19);"DRAW";:d=d+1
:FOR x=20 TO 1 STEP -1:SOUND 1,-15,x,1:TIME=0
:REPEAT UNTIL TIME>4:NEXT x:GOTO 560
  350 FOR y=3 TO 1 STEP -1:IF a(3*x+y)=0 THEN
 n=3*x+y:y=1:NEXT:GOTO 100
  360 NEXT y
  370 FOR y=3 TO 1 STEP -1:IF a(x+y*3-2)=0 TH
EN n=x+y*3-2:y=1:NEXT:GOTO 100
  380 NEXT y
  390 IF a(5)=0 THEN n=5:GOTO 100
  400 IF a(5+2*(x+1))=0 THEN n=5+2*(x+1):GOTO
 100
  410 IF a(5-2*(x+1))=0 THEN n=5-2*(x+1):GOTO
 100
  420 x$=INKEY$(0):IF x$="" OR VAL(x$)<1 OR V
AL(x$)>9 THEN GOTO 420
  430 n=VAL(x$)
  440 COLOUR 3:PRINT TAB(25,11);"       ";TAB
(26,10);"You ";n;:IF a$(n)>"9" THEN PRINT TAB
(26,11);"AGAIN!";:SOUND 1,-15,100,1:GOTO 420
  450 PRINT TAB(8,20);"               "
  460 GOTO 100
  470 COLOUR 3:PRINT TAB(7,0);"NOUGHTS & CROS
SES"'TAB(7);"-----------------"
  480 FOR x=1 TO 9:a$(x)=STR$(x):NEXT x
  490 PRINT:FOR X=1 TO 3:PRINT TAB(6);Z$;TAB(
6);Y$;TAB(6);Y$;TAB(6);Y$;TAB(6);Y$:NEXT X:PR
INT TAB(6);Z$
  500 PRINT TAB(0,2);"I am";TAB(22);"You are"
;TAB(5,2);:COLOUR 1:PRINT CHR$(227);TAB(31,2)
;:COLOUR 2:PRINT CHR$(225);
  510 z=RND(1):a=(1 AND z<.5)+(-1 AND z>=.5)
  520 COLOUR 3:p$="Me":IF a>0 THEN p$="You"
  530 PRINT TAB(8,20);p$;" to go first";:GOTO
 100
  540 IF a<0 THEN p$=" I win":VDU 19,1,11,0,0
,0:m=m+1 ELSE p$="You win":VDU 19,2,11,0,0,0:
h=h+1
  550 COLOUR 3:PRINT TAB(12,19);p$:FOR y=1 TO
 4:FOR x=1 TO 10:SOUND 1,-15,X*10+150,1:TIME=
0:REPEAT UNTIL TIME>4:NEXT x:NEXT y
  560 PRINT TAB(0,20);"Score: You ";h;"   Me 
";m;"    Draw ";d;TAB(3,21)"Press any key to 
start";
  570 *FX15,1
  580 IF INKEY$(1000)="" THEN GOTO 580
  590 FOR x=1 TO 9:a(x)=0:NEXT x
  600 n=0:t=0:CLS:GOTO 470