!***************************************************************************! ! ! ! TIC-TAC-TOE ! ! ! !***************************************************************************! !1.0 24-Oct-84 DFP written by D. Pallmann. MAP1 X(9), F, 6 !rows MAP1 Y(9), F, 6 !columns MAP1 A(3,3), F, 6 !game board MAP1 I, F, 6 !loop index MAP1 J, F, 6 !loop index MAP1 R, F, 6 !temporary row MAP1 C, F, 6 !temporary column MAP1 MOVE, F, 6 !move input by human MAP1 FLAG, F, 6 !processing flag MAP1 GAME, F, 6 !game number MAP1 MOVES, F, 6 !number of moves MAP1 HUMAN, F, 6 !human score MAP1 ALPHA, F, 6 !computer score INITIALIZE: FOR I = 1 TO 9 READ X(I), Y(I) NEXT I GAME = 0 HUMAN = 0 ALPHA = 0 NEW'GAME: GAME = GAME+1 MOVES = 0 FOR I = 1 TO 3 FOR J = 1 TO 3 A(I,J) = 0 NEXT J NEXT I SCREEN: PRINT TAB(-1,0); TAB(-1,12); PRINT TAB(1,34); "TIC-TAC-TOE"; PRINT TAB(-1,11); PRINT TAB(1,1); "GAME"; GAME; PRINT TAB(1,70); "HUMAN"; HUMAN; PRINT TAB(2,70); "ALPHA"; ALPHA; PRINT TAB(4,28); " | |" PRINT TAB(5,28); " | |" PRINT TAB(6,28); " | |" PRINT TAB(7,28); "-------+-------+-------" PRINT TAB(8,28); " | |" PRINT TAB(9,28); " | |" PRINT TAB(10,28); " | |" PRINT TAB(11,28); "-------+-------+-------" PRINT TAB(12,28); " | |" PRINT TAB(13,28); " | |" PRINT TAB(14,28); " | |" IF GAME/2=INT(GAME/2) THEN GOTO COMPUTER'MOVE HUMAN'MOVE: IF MOVES=9 THEN GOTO TIE PRINT TAB(17,5); TAB(-1,11); INPUT LINE "YOUR MOVE: "; MOVE PRINT TAB(17,5); TAB(-1,9); IF MOVE<1 OR MOVE>9 THEN GOTO HUMAN'MOVE R = X(MOVE) C = Y(MOVE) IF A(R,C)<>0 THEN GOTO HUMAN'MOVE A(R,C) = 1 MOVES = MOVES+1 PLOT'HUMAN'MOVE: PRINT TAB(-1,12); PRINT TAB(R*4,C*8+21); " X X"; PRINT TAB(R*4+1,C*8+21); " X"; PRINT TAB(R*4+2,C*8+21); " X X"; CHECK'FOR'HUMAN'WIN: FLAG = 0 FOR I = 1 TO 3 IF A(I,1)=1 AND A(I,2)=1 AND A(I,3)=1 THEN FLAG = 1 IF A(1,I)=1 AND A(2,I)=1 AND A(3,I)=1 THEN FLAG =1 NEXT I IF A(1,1)=1 AND A(2,2)=1 AND A(3,3)=1 THEN FLAG = 1 IF A(3,1)=1 AND A(2,2)=1 AND A(1,3)=1 THEN FLAG = 1 IF FLAG=1 THEN GOTO HUMAN'WIN COMPUTER'MOVE: IF MOVES=0 THEN R = INT(RND(0)*3)+1 : C = INT(RND(0)*3)+1 :& GOTO PLOT'COMPUTER'MOVE IF MOVES=9 THEN GOTO TIE FLAG = 0 CHECK'TO'SEE'IF'WE'CAN'WIN: FOR I = 1 TO 3 IF A(I,1)=0 AND A(I,2)=2 AND A(I,3)=2 THEN R = I : C = 1 : FLAG = 1 IF A(1,I)=0 AND A(2,I)=2 AND A(3,I)=2 THEN R = 1 : C = I : FLAG = 1 IF A(I,2)=0 AND A(I,1)=2 AND A(I,3)=2 THEN R = I : C = 2 : FLAG = 1 IF A(2,I)=0 AND A(1,I)=2 AND A(3,I)=2 THEN R = 2 : C = I : FLAG = 1 IF A(I,3)=0 AND A(I,1)=2 AND A(I,2)=2 THEN R = I : C = 3 : FLAG = 1 IF A(3,I)=0 AND A(1,I)=2 AND A(2,I)=2 THEN R = 3 : C = I : FLAG = 1 NEXT I IF A(1,1)=0 AND A(2,2)=2 AND A(3,3)=2 THEN R = 1 : C = 1 : FLAG = 1 IF A(2,2)=0 AND A(1,1)=2 AND A(3,3)=2 THEN R = 2 : C = 2 : FLAG = 1 IF A(3,3)=0 AND A(1,1)=2 AND A(2,2)=2 THEN R = 3 : C = 3 : FLAG = 1 IF A(3,1)=0 AND A(2,2)=2 AND A(1,3)=2 THEN R = 3 : C = 1 : FLAG = 1 IF A(2,2)=0 AND A(1,3)=2 AND A(3,1)=2 THEN R = 2 : C = 2 : FLAG = 1 IF A(1,3)=0 AND A(3,1)=2 AND A(2,2)=2 THEN R = 1 : C = 3 : FLAG = 1 IF FLAG=1 THEN GOTO PLOT'COMPUTER'MOVE CHECK'TO'SEE'IF'WE'CAN'PREVENT'HUMAN'FROM'WINNING: FOR I = 1 TO 3 IF A(I,1)=0 AND A(I,2)=1 AND A(I,3)=1 THEN R = I : C = 1 : FLAG = 1 IF A(1,I)=0 AND A(2,I)=1 AND A(3,I)=1 THEN R = 1 : C = I : FLAG = 1 IF A(I,2)=0 AND A(I,1)=1 AND A(I,3)=1 THEN R = I : C = 2 : FLAG = 1 IF A(2,I)=0 AND A(1,I)=1 AND A(3,I)=1 THEN R = 2 : C = I : FLAG = 1 IF A(I,3)=0 AND A(I,1)=1 AND A(I,2)=1 THEN R = I : C = 3 : FLAG = 1 IF A(3,I)=0 AND A(1,I)=1 AND A(2,I)=1 THEN R = 3 : C = I : FLAG = 1 NEXT I IF A(1,1)=0 AND A(2,2)=1 AND A(3,3)=1 THEN R = 1 : C = 1 : FLAG = 1 IF A(2,2)=0 AND A(1,1)=1 AND A(3,3)=1 THEN R = 2 : C = 2 : FLAG = 1 IF A(3,3)=0 AND A(1,1)=1 AND A(2,2)=1 THEN R = 3 : C = 3 : FLAG = 1 IF A(3,1)=0 AND A(2,2)=1 AND A(1,3)=1 THEN R = 3 : C = 1 : FLAG = 1 IF A(2,2)=0 AND A(1,3)=1 AND A(3,1)=1 THEN R = 2 : C = 2 : FLAG = 1 IF A(1,3)=0 AND A(3,1)=1 AND A(2,2)=1 THEN R = 1 : C = 3 : FLAG = 1 IF FLAG=1 THEN GOTO PLOT'COMPUTER'MOVE CHECK'TO'SEE'IF'WE'CAN'GET'A'GOOD'LOCATION: IF A(2,2)=0 THEN R = 2 : C = 2 : GOTO PLOT'COMPUTER'MOVE IF A(1,1)=0 THEN R = 1 : C = 1 : GOTO PLOT'COMPUTER'MOVE IF A(3,3)=0 THEN R = 3 : C = 3 : GOTO PLOT'COMPUTER'MOVE IF A(1,3)=0 THEN R = 1 : C = 3 : GOTO PLOT'COMPUTER'MOVE IF A(3,1)=0 THEN R = 3 : C = 1 : GOTO PLOT'COMPUTER'MOVE CHECK'TO'SEE'IF'WE'CAN'GO'ANYWHERE'AT'ALL: FOR I = 1 TO 3 FOR J = 1 TO 3 IF A(I,J)=0 THEN R = I : C = J : FLAG = 1 NEXT J NEXT I IF FLAG=0 THEN GOTO TIE PLOT'COMPUTER'MOVE: MOVES = MOVES+1 A(R,C) = 2 PRINT TAB(-1,12); PRINT TAB(R*4,C*8+21); " OOO"; PRINT TAB(R*4+1,C*8+21); " O O"; PRINT TAB(R*4+2,C*8+21); " OOO"; CHECK'FOR'COMPUTER'WIN: FLAG = 0 FOR I = 1 TO 3 IF A(I,1)=2 AND A(I,2)=2 AND A(I,3)=2 THEN FLAG = 1 IF A(1,I)=2 AND A(2,I)=2 AND A(3,I)=2 THEN FLAG =1 NEXT I IF A(1,1)=2 AND A(2,2)=2 AND A(3,3)=2 THEN FLAG = 1 IF A(3,1)=2 AND A(2,2)=2 AND A(1,3)=2 THEN FLAG = 1 IF FLAG=0 THEN GOTO HUMAN'MOVE COMPUTER'WIN: PRINT TAB(17,32); "*** I WIN ***" ALPHA = ALPHA+1 GOTO CONTINUE HUMAN'WIN: PRINT TAB(17,28); "*** CONGRATULATIONS ***" HUMAN = HUMAN+1 GOTO CONTINUE TIE: PRINT TAB(17,32); "*** A TIE ***" CONTINUE: PRINT TAB(19,25); "PRESS [RETURN] FOR ANOTHER GAME "; INPUT LINE I GOTO NEW'GAME DATA: DATA 3,1, 3,2, 3,3, 2,1, 2,2, 2,3, 1,1, 1,2, 1,3 END