home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG003.ARK / TTT.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  7KB  |  302 lines

  1.     REM---------------------------------------------------------
  2.     REM        T  I  C       T  A  C       T  O  E
  3.     REM
  4.     REM---------------------------------------------------------
  5.  
  6.     REM        JUNE 7, 1977
  7.  
  8.     PRINT:PRINT:PRINT:PRINT
  9.     PRINT TAB(10);"WHAT IS YOUR NAME  ";
  10.     INPUT NAME$
  11.     PRINT:PRINT
  12.     PRINT TAB(10);"WELCOME, ";NAME$;", TO. . ."
  13.     PRINT:PRINT:PRINT
  14.     RANDOMIZE
  15.     PRINT TAB(10);"  T I C     T A C     T O E"
  16.     PRINT TAB(10);"-----------------------------"
  17.     PRINT:PRINT:PRINT
  18.     DIM C(11)
  19.     DIM D(11)
  20.         FOR K = 1 TO 11
  21.         READ C(K), D(K)
  22.         NEXT K
  23. 3744    REM
  24.     PRINT TAB(10);"DO YOU NEED INSTRUCTIONS, ";NAME$;
  25.     INPUT ANS$
  26.     IF LEFT$(ANS$,1)="N" THEN GOTO 1200
  27.     IF LEFT$(ANS$,1)<>"Y" THEN \
  28.         PRINT TAB(10);"I DON'T UNDERSTAND YOU, PLEASE TRY AGAIN." :\
  29.         GOTO 3744
  30.     PRINT:PRINT
  31.     PRINT TAB(10);"TO ENTER YOUR MOVE YOU MUST TYPE IN THE ROW"
  32.     PRINT TAB(10);"AND COLUMN NUMBER OF THE SQUARE THAT YOU WISH"
  33.     PRINT TAB(10);"TO FILL.  THE NUMBERS MUST BE SEPARATED WITH A"
  34.     PRINT TAB(10);"COMMA.  I WILL MARK THOSE SQUARES WITH THE"
  35.     PRINT TAB(10);"WORD: 'YOU'.  WHEN I FILL A SQUARE, I WILL PUT"
  36.     PRINT TAB(10);"THE WORD: 'ME' IN IT.  REMEMBER THAT ROWS ARE"
  37.     PRINT TAB(10);"HORIZONTAL AND COLUMNS ARE VERTICAL."
  38.     PRINT
  39.     PRINT TAB(10);"      GOOD LUCK!"
  40.     PRINT
  41. 1200    REM---
  42.     PRINT
  43.     PRINT
  44.     PRINT TAB(15);"     *     *"
  45.     PRINT TAB(15);" 1,1 * 1,2 * 1,3"
  46.     PRINT TAB(15);"     *     *"
  47.     PRINT TAB(15);"*****************"
  48.     PRINT TAB(15);"     *     *"
  49.     PRINT TAB(15);" 2,1 * 2,2 * 2,3"
  50.     PRINT TAB(15);"     *     *"
  51.     PRINT TAB(15);"*****************"
  52.     PRINT TAB(15);"     *     *"
  53.     PRINT TAB(15);" 3,1 * 3,2 * 3,3"
  54.     PRINT TAB(15);"     *     *"
  55.     PRINT:PRINT:PRINT
  56.     DIM B(9)
  57.     DIM A(3,3)
  58. 250    PRINT
  59.     PRINT TAB(10);"HERE WE GO. . ."
  60.     PRINT:PRINT
  61.         FOR J = 1 TO 3
  62.             FOR I = 1 TO 3
  63.             LET A(I,J) = 0
  64.             NEXT I
  65.         LET I = I - 1
  66.         NEXT J
  67.     LET J = J - 1
  68.     LET Z = 0
  69. 330    REM
  70.     PRINT TAB(5);"WHAT IS YOUR MOVE  ";
  71.     INPUT R,CX
  72.     PRINT
  73.     IF R<1 OR R>3 THEN \
  74.         PRINT TAB(7);"ROW IS INVALID NUMBER.  TRY AGAIN." :\
  75.         GOTO 330
  76.     IF CX<0 OR CX>3 THEN \
  77.         PRINT TAB(7);"COLUMN IS INVALID NUMBER.  TRY AGAIN." :\
  78.         GOTO 330
  79.     IF A(R,CX) <> 0 THEN \
  80.         PRINT TAB(7);"THAT SQUARE IS ALREADY TAKEN.  TRY AGAIN." :\
  81.         GOTO 330
  82.     LET A(R,CX) = -1
  83.     GOSUB 1660
  84.         IF Z = 1 THEN GOTO 2070
  85.         REMARK MACHINE MOVE ......
  86.         GOSUB 1100
  87.         REMARK TEST FOR WIN ......
  88.         GOSUB 1660
  89.     IF Z = 0 THEN 650
  90.     REM PRINT GAME BOARD
  91. 490    PRINT
  92.         FOR K = 1 TO 3
  93.         LET BX = A(K,1)
  94.         LET DX = A(K,2)
  95.         LET F = A(K,3)
  96.         GOSUB 840
  97.         IF K > 2 THEN 570
  98.         PRINT TAB(5);"***************"
  99. 570        NEXT K
  100.     LET K = K - 1
  101.     PRINT
  102.     IF Z <> 0 THEN 2070
  103.     GO TO 330
  104. 650    LET T2 = 0
  105.         FOR J = 1 TO 3
  106.             FOR I = 1 TO 3
  107.             IF A(I,J) <> 0 THEN 700
  108.             LET T2 = T2 + 1
  109. 700            NEXT I
  110.         LET I = I - 1
  111.         NEXT J
  112.     LET J = J - 1
  113.     IF T2 > 0 THEN 750
  114. 730    GOSUB 1340
  115.     GO TO 490
  116. 750    IF T2 > 1 THEN 490
  117.         FOR J = 1 TO 8
  118.         IF B(J) = -2 THEN 800
  119.         NEXT J
  120.     LET J = J - 1
  121.     GO TO 730
  122. 800    GOSUB 2000
  123.     GO TO 490
  124.     REM PRINT TIC-TAC-TOE BOARD ROW....
  125.     REM
  126. 840    IF BX <> 0 THEN 910
  127.     PRINT TAB(5);
  128.     PRINT "    * ";
  129. 860    IF DX <> 0 THEN 940
  130.     PRINT "    * ";
  131. 880    IF F <> 0 THEN 970
  132.     PRINT "  "
  133. 900    GO TO 1070
  134. 910    IF BX > 0 THEN 1000
  135.     PRINT TAB(5);
  136.     PRINT "YOU * ";
  137.     GO TO 860
  138. 940    IF DX > 0 THEN 1020
  139.     PRINT "YOU * ";
  140.     GO TO 880
  141. 970    IF F > 0 THEN 1040
  142.     PRINT "YOU"
  143.     GO TO 900
  144. 1000    REM
  145.     PRINT TAB(5);
  146.         PRINT "ME  * ";
  147.     GO TO 860
  148. 1020    PRINT "ME  * ";
  149.     GO TO 880
  150. 1040    PRINT "ME "
  151.     GO TO 900
  152.     REM PRINT LEGENDS..
  153. 1070    PRINT TAB(5);"    *     * "
  154.     RETURN
  155.     REM PROGRAM TO MAKE MOVE FOR THE MACHINE....
  156. 1100    LET M=INT(3.33*RND)
  157. 1110    LET N = INT(3.33333*RND)
  158.     IF M = 0 THEN 1100
  159.     IF M > 3 THEN 1100
  160.     IF N = 0 THEN 1110
  161.     IF N > 3 THEN 1110
  162.     LET C(2) = M
  163.     LET D(2) = N
  164.     LET C(3) = N
  165.     LET D(3) = M
  166.         FOR I = 1 TO 8
  167.         IF B(I) > 1 THEN 1370
  168.         NEXT I
  169.     LET I = I - 1
  170.         FOR I = 1 TO 8
  171.         IF B(I) < -1 THEN 1370
  172.         NEXT I
  173.     LET I = I - 1
  174.     IF R+CX = 0 THEN 1550
  175.         FOR K = 1 TO 11
  176.         LET I = C(K)
  177.         LET J = D(K)
  178.         IF A(I,J) <> 0 THEN 1330
  179.         LET A(I,J) = 1
  180.         GO TO 1360
  181. 1330        NEXT K
  182.     LET K = K - 1
  183. 1340    REM-----TIE
  184.     PRINT:PRINT:PRINT
  185.     PRINT TAB(15);"TIE GAME!"
  186.     PRINT:PRINT
  187.     LET Z = 3
  188. 1360    RETURN
  189. 1370    IF I > 3 THEN 1440
  190.         FOR J = 1 TO 3
  191.         IF A(I,J) = 0 THEN 1420
  192.         NEXT J
  193.     LET J = J - 1
  194.     GO TO 1360
  195. 1420    LET A(I,J) = 1
  196.     GO TO 1360
  197. 1440    IF I > 6 THEN 1510
  198.         FOR J = 1 TO 3
  199.         IF A(J,I-3) = 0 THEN 1490
  200.         NEXT J
  201.     LET J = J - 1
  202.     GO TO 1360
  203. 1490    LET A(J,I-3) = 1
  204.     GO TO 1360
  205. 1510    IF I > 7 THEN 1550
  206.         FOR J = 1 TO 3
  207.         IF A(J,J) = 0 THEN 1590
  208.         NEXT J
  209.     LET J = J - 1
  210. 1550    IF A(1,3) = 0 THEN 1610
  211.     IF A(3,1) = 0 THEN 1630
  212.     LET A(2,2) = 1
  213.     GO TO 1360
  214. 1590    LET A(J,J) = 1
  215.     GO TO 1360
  216. 1610    LET A(1,3) = 1
  217.     GO TO 1360
  218. 1630    LET A(3,1) = 1
  219.     GO TO 1360
  220.     REM PROGRAM TO TEST FOR GAME WINNER ....
  221. 1660    LET T1 = 0
  222.         FOR J = 1 TO 9
  223.         LET B(J) = 0
  224.         NEXT J
  225.     LET J = J - 1
  226.         FOR J = 1 TO 3
  227.             FOR I = 1 TO 3
  228.             IF A(J,1) <> A(J,I) THEN 1750
  229.             NEXT I
  230.         LET I = I - 1
  231.         LET T1 = A(J,I)
  232. 1750        NEXT J
  233.     LET J = J - 1
  234.         FOR J = 1 TO 3
  235.             FOR I = 1 TO 3
  236.             IF A(1,J) <> A(I,J) THEN 1810
  237.             NEXT I
  238.         LET I = I - 1
  239.         LET T1 = A(I,J)
  240. 1810        NEXT J
  241.     LET J = J - 1
  242.     IF A(1,1) = A(3,3) THEN 1930
  243. 1830    IF A(3,1) = A(1,3) THEN 1970
  244. 1840    IF T1 <> 0 THEN 1990
  245. 1850        FOR J = 1 TO 3
  246.             FOR I = 1 TO 3
  247.             LET B(J) = B(J) + A(J,I)
  248.             LET B(J+3) = B(J+3)+A(I,J)
  249.             NEXT I
  250.         LET I = I - 1
  251.         NEXT J
  252.     LET J = J - 1
  253.     LET B(7) = A(1,1) + A(2,2) + A(3,3)
  254.     RETURN
  255. 1930    IF A(2,2) = A(3,3) THEN 1950
  256.     GO TO 1830
  257. 1950    LET T1 = A(2,2)
  258.     GO TO 1840
  259. 1970    IF A(2,2) = A(1,3) THEN 1950
  260.     GO TO 1840
  261. 1990    IF T1 > 0 THEN 2030
  262. 2000    REM-----PLAYER WINS
  263.     PRINT:PRINT:PRINT
  264.     PRINT TAB(15);CHR$(7);"YOU ARE THE WINNER!!"
  265.     PRINT TAB(15);"----------------------"
  266.     PRINT:PRINT
  267.     LET Z = 1
  268.     GO TO 1850
  269. 2030    REM-----COMPUTER WINS
  270.     PRINT:PRINT:PRINT
  271.     PRINT TAB(15);"I WIN THIS GAME!  NICE TRY."
  272.     PRINT:PRINT
  273.     LET Z = 2
  274.     GO TO 1850
  275.     REM END OF TEST WINNER PROGRAM....
  276. 2070    REM-----ONE MORE TIME?
  277.     PRINT:PRINT
  278.     IF Z=1 THEN \
  279.         PRINT TAB(15);"GOOD GAME!  ";NAME$:\
  280.         PRINT TAB(15);"WANT TO TRY TO BEAT ME AGAIN"; :\
  281.         GOTO 2083
  282.     IF Z=2 THEN \
  283.         PRINT TAB(15);"WOULD YOU LIKE ANOTHER CHANCE TO WIN"; :\
  284.         GOTO 2083
  285.     IF Z=3 THEN \
  286.         PRINT TAB(15);"WANT TO TRY ONE MORE"; :\
  287.         GOTO 2083
  288. 2083    REM
  289.     INPUT ANS$
  290.     IF LEFT$(ANS$,1)="Y" THEN \
  291.         GOTO 250
  292.     IF LEFT$(ANS$,1)<>"N" THEN \
  293.         PRINT TAB(15);"I CAN'T FIGURE OUT WHAT YOU SAID." :\
  294.         PRINT TAB(15);"ENTER YES OR NO, PLEASE." :\
  295.         GOTO 2083
  296.     PRINT:PRINT:PRINT
  297.     PRINT TAB(20);"THANKS FOR PLAYING WITH ME, ";NAME$
  298.     PRINT:PRINT
  299.     STOP
  300.     data    2,2,0,0,0,0,1,1,3,3,1,3,3,1,1,2,3,2,2,3,2,1
  301.     END
  302.