INTEGER B(12,12),P(12,12) INTEGER R,YES,C,DOT,R1,M,OO,XX,F,A INTEGER C1,R2,C2,C3,C4,R3,R4,AA COMMON B,P,R,C,DOT,R1,M,OO,XX,F,A,C1,C2,R2,C3,C4,R3,R4,ICRT,AA DATA YES,DOT,OO,XX/'YES','.','O','X'/ C C C SEED TO RANDOM NUMBER GENERATOR C C WRITE(7,9000) 9000 FORMAT(' DO YOU WANT TO SEE THE GAME ON THE LINE PRINTER??',5X,$) READ(5,9001) ICRT 9001 FORMAT(A2) IF(ICRT.EQ.YES) WRITE(6,9002) 9002 FORMAT('1') IX=0 IY=0 DO 100 I=1,12 DO 100 J=1,12 B(I,J)=DOT 100 CONTINUE R1=0 M=1 50 CALL BOARD IF(R1.EQ.0) GO TO 80 B(R1,C1)=OO 80 DO 81 I=1,12 DO 81 J=1,12 P(I,J)=0 81 CONTINUE 91 WRITE(7,90) R,C,M IF(ICRT.EQ.YES) WRITE(6,90) R,C,M 90 FORMAT(' COMPUTER MOVED TO ',I2,',',I2, 1 ' ENTER ROW,COL FOR MOVE #',I5,'.',5X,$) READ(5,11) R,C 11 FORMAT(2I5) IF(R.LT.1.OR.R.GT.12) GO TO 91 IF(C.LT.1.OR.C.GT.12) GO TO 91 IF(B(R,C).EQ.DOT) GO TO 210 WRITE(7,190) 190 FORMAT(' SPACE OCCUPIED') GO TO 91 210 B(R,C)=XX F=XX A=OO CALL FOUR F=OO A=XX CALL FOUR CALL MOVE(IX,IY) IF(AA.NE.0) GO TO 330 CALL BOARD WRITE(7,310) IF(ICRT.EQ.YES) WRITE(6,310) 310 FORMAT(' A DRAW') STOP 'G0--A DRAW' 330 R=R2 R1=R2 C=C2 C1=C2 M=M+1 B(R,C)=OO GO TO 50 3900 CONTINUE END SUBROUTINE MOVE(IX,IY) INTEGER B(12,12),P(12,12) INTEGER R,YES,C,DOT,R1,M,OO,XX,F,A INTEGER C1,R2,C2,C3,C4,R3,R4,AA COMMON B,P,R,C,DOT,R1,M,OO,XX,F,A,C1,C2,R2,C3,C4,R3,R4,ICRT,AA DATA YES,DOT,OO,XX/'YES','.','O','X'/ AA=0 DO 100 R=1,12 DO 101 C=1,12 IF(P(R,C).LT.AA) GO TO 101 IF(P(R,C).GT.AA) GO TO 1300 YFL=RAN(IX,IY) IF(YFL.LT.0.5) GO TO 101 1300 R2=R C2=C AA=P(R,C) 101 CONTINUE 100 CONTINUE RETURN END SUBROUTINE BOARD INTEGER B(12,12),P(12,12) INTEGER R,YES,C,DOT,R1,M,OO,XX,F,A INTEGER C1,R2,C2,C3,C4,R3,R4,AA COMMON B,P,R,C,DOT,R1,M,OO,XX,F,A,C1,C2,R2,C3,C4,R3,R4,ICRT,AA DATA YES,DOT,OO,XX/'YES','.','O','X'/ WRITE(7,100) IF(ICRT.EQ.YES) WRITE(6,100) 100 FORMAT(' 1 2 3 4 5 6 7 8 9 10 11 12') DO 200 I=1,12 WRITE(7,101) I,(B(I,J),J=1,12) IF(ICRT.EQ.YES) WRITE(6,101) I,(B(I,J),J=1,12) 101 FORMAT(I3,1X,(12(A1,2X))) 200 CONTINUE RETURN END SUBROUTINE FOUR INTEGER B(12,12),P(12,12) INTEGER R,YES,C,DOT,R1,M,OO,XX,F,A INTEGER C1,R2,C2,C3,C4,R3,R4,AA COMMON B,P,R,C,DOT,R1,M,OO,XX,F,A,C1,C2,R2,C3,C4,R3,R4,ICRT,AA DATA YES,DOT,OO,XX/'YES','.','O','X'/ DO 100 R=1,12 DO 101 C=1,12 IF(B(R,C).EQ.A) GO TO 101 C3=1 R3=0 CALL SIX R3=1 CALL SIX R3=-1 CALL SIX C3=0 CALL SIX R3=1 CALL SIX C3=-1 CALL SIX R3=-1 CALL SIX R3=0 CALL SIX 101 CONTINUE 100 CONTINUE RETURN END SUBROUTINE SIX INTEGER B(12,12),P(12,12) INTEGER R,YES,C,DOT,R1,M,OO,XX,F,A INTEGER C1,R2,C2,C3,C4,R3,R4,AA COMMON B,P,R,C,DOT,R1,M,OO,XX,F,A,C1,C2,R2,C3,C4,R3,R4,ICRT,AA DATA YES,DOT,OO,XX/'YES','.','O','X'/ IF(R.LT.5.AND.R3.EQ.-1) GO TO 1090 IF(R.GT.8.AND.R3.EQ.1) GO TO 1090 IF(C.LT.5.AND.C3.EQ.-1) GO TO 1090 IF(C.GT.8.AND.C3.EQ.1) GO TO 1090 N=0 R4=R C4=C DO 700 I=1,5 IF(R4.GT.12.OR.C4.GT.12) GO TO 1090 IF(R4.LT.1.OR.C4.LT.1) GO TO 1090 IF(B(R4,C4).EQ.A) GO TO 1090 IF(B(R4,C4).NE.F) GO TO 760 N=N+1 760 IF(I.EQ.5) GO TO 700 R4=R4+R3 C4=C4+C3 700 CONTINUE I=5 IF(N.EQ.0) GO TO 1090 IF(N.NE.5) GO TO 890 CALL BOARD IF(F.EQ.OO) GO TO 870 WRITE(7,850) IF(ICRT.EQ.YES) WRITE(6,850) 850 FORMAT(' YOU WIN') STOP 'GO-YOU WIN' 870 WRITE(7,871) IF(ICRT.EQ.YES) WRITE(6,871) 871 FORMAT(' I WIN') STOP 'GO-I WIN' 890 IF(B(R4,C4).NE.DOT) GO TO 1040 IF(N.NE.4) GO TO 970 IF(F.EQ.XX) GO TO 950 B(R4,C4)=OO CALL BOARD GO TO 870 950 P(R4,C4)=999 GO TO 1040 970 IF(N.NE.3) GO TO 1000 P(R4,C4)=P(R4,C4)+51 GO TO 1040 1000 IF(N.NE.2) GO TO 1030 1010 P(R4,C4)=P(R4,C4)+14 1020 GO TO 1040 1030 P(R4,C4)=P(R4,C4)+1 1040 I=I-1 IF(I.EQ.0) GO TO 1090 R4=R4-R3 C4=C4-C3 GO TO 890 1090 RETURN END