Listing of file='OTHELL.BAS;01' on disk='vmedia/othello-sector.ccvf'
1 REM OTHELLO - COMPUCOLOR II VERSION - 8K 2 REM GREGORY F. WHITTEN - COPYRIGHT 1978 3 CLEAR 50 10 DIM B(90),Z(90),X(7),W(80,1),S(2),G(2) 20 DIM B$(3),N$(2) 50 GOSUB 10000:GOSUB 11000:GOSUB 3000 60 N$(1)= "COMPUCOLOR":N$(2)= N$(1):G= 0 62 J= 17:GOSUB 1700:PLOT 23:PRINT "NUMBER OF":INPUT "PLAYERS(0-2):";N:N= INT (N) 64 IF N< 0OR N> 2THEN 62 66 IF N= 0THEN 70 68 FOR P= 1TO N:J= 8* P+ 9:GOSUB 1700:PLOT 16+ P:PRINT "WHAT IS YOUR":INPUT "NAME? ";N$(P):NEXT 70 FOR P= 1TO 2:PLOT 3,0,4* P+ 3,16+ P:PRINT MID$ (N$(P),1,10):NEXT 80 GOTO 105 100 IF N= 0THEN 105 101 J= 17:GOSUB 1700:PLOT 23:PRINT "ANOTHER":INPUT "GAME(Y/N): ";A$ 102 IF MID$ (A$,1,1)= "N"THEN 850 105 GOSUB 3100:IF N= 0THEN P= G- INT (G/ 2)* 2+ 1:GOTO 200 110 J= 17:GOSUB 1700:PLOT 17:PRINT "RED MOVES":PRINT "FIRST(Y/N): ";:PLOT 23 112 INPUT "";A$:P= 1:IF MID$ (A$,1,1)= "N"THEN P= 2 200 IF S(P)= 0THEN 800 250 J= 8* P+ 9:GOSUB 1700:PLOT 16+ P:IF P> NTHEN 500 300 INPUT "YOUR MOVE: ";A$ 301 IF MID$ (A$,1,1)= "Q"THEN 800 302 IF VAL (A$)< > 0THEN 350 310 GOSUB 1000:IF Z< > - 100THEN 340 320 P= 3- P:GOSUB 1000:IF Z> - 100THEN 200 330 J= 17:GOSUB 1700:PLOT 23:PRINT "NO MOVES":PRINT " POSSIBLE":GOTO 810 340 PLOT 3,0,8* P+ 13,22:PRINT "BAD MOVE":FOR I= 1TO 400:NEXT :GOTO 250 350 I= INT (VAL (A$)):IF I< 1OR I> 64THEN 340 360 I= I+ INT ((I- 1)/ 8)+ 9:IF B(I)THEN 340 370 GOTO 600 500 GOSUB 1000:IF Z> - 100THEN PRINT "MY MOVE IS"I- 8- INT (I/ 9):GOTO 600 510 PRINT "I CAN'T MOVE":P= 3- P:GOSUB 1000:IF Z= - 100THEN 330 520 GOTO 200 600 J= I:GOSUB 1500:F= 0:GOSUB 1100:J= I:IF WTHEN 650 610 GOSUB 1600:GOTO 340 650 PLOT 15,23,3,0,8* P+ 11:PRINT " FLIPS"W:PLOT 14,16+ P:GOSUB 1200 660 S(P)= S(P)+ W+ 1:S(3- P)= S(3- P)- W:GOSUB 1800 670 IF NTHEN FOR I= 1TO 200:NEXT 690 IF S(1)+ S(2)< 64THEN P= 3- P:GOTO 200 800 J= 17:GOSUB 1700 810 J= 25:GOSUB 1700 820 FOR P= 1TO 2:IF S(P)> S(3- P)THEN PLOT 16+ P:PRINT MID$ (N$(P),1,10)" WINS":G(P)= G(P)+ 1 825 NEXT 830 IF S(1)= S(2)THEN PLOT 22:PRINT "DRAW GAME":G(0)= G(0)+ 1 840 G= G+ 1:GOSUB 1900:GOTO 100 849 REM END OF GAME 850 PLOT 27,11,3,0,31:LOAD "MENU":RUN 999 REM SCAN MOVE 1000 Q= P- 1:Z= - 100:IF S(P)= 0THEN RETURN 1010 I= 8:FOR A= 1TO 8:I= I+ 1:FOR B= 1TO 8:I= I+ 1:IF Z(I)THEN 1060 1020 F= 1:GOSUB 1100:IF W= 0THEN 1060 1030 W= W+ W(I,Q):IF W< ZTHEN 1060 1040 IF W> ZTHEN Z= W:Y= I:X= 1:GOTO 1060 1050 X= X+ 1:IF X* RND (1)< 1THEN Y= I 1060 NEXT B:NEXT A 1070 I= Y:RETURN 1099 REM TEST MOVE 1100 W= 0:FOR K= 0TO 7:J= I:M= X(K):L= 0 1110 J= J+ M:IF B(J)= 0THEN 1170 1120 IF B(J)< > PTHEN L= L+ 1:GOTO 1110 1130 IF L= 0THEN 1170 1140 W= W+ L:IF FTHEN 1170 1150 J= I:FOR O= 1TO L:J= J+ M:GOSUB 1300:NEXT 1170 NEXT :RETURN 1199 REM MOVE PIECE 1200 Z(J)= 1:FOR K= 0TO 7:L= J+ X(K):Z(L)= B(L):NEXT 1299 REM FLIP PIECE 1300 B(J)= P 1399 REM DISPLAY PIECE 1400 PLOT 16+ P:GOTO 1510 1499 REM DISPLAY TMP PIECE 1500 PLOT 16+ P,30 1510 GOSUB 1650:PRINT C$:PLOT 14,29:RETURN 1599 REM CLEAR PIECE 1600 GOSUB 1650:PLOT 26,22:PRINT 8* U+ V- 8" " 1610 PLOT 3,6* V+ 12,4* U- 2,15,32,32,14:RETURN 1649 REM POSITION PIECE 1650 U= INT (J/ 9):V= J- 9* U:PLOT 15,3,6* V+ 12,4* U- 3:RETURN 1699 REM CLEAR 6 LINES 1700 GOSUB 1710:FOR A= 1TO 3:PRINT SPC( 16)"":NEXT 1710 PLOT 3,0,J:RETURN 1799 REM UPDATE SCORE 1800 FOR I= 1TO 2:PLOT 16+ I,3,10,4* I+ 2:PRINT S(I)" ":NEXT :RETURN 1899 REM UPDATE GAMES 1900 FOR I= 1TO 2:PLOT 3,5* I- 3,30,16+ I:PRINT G(I):NEXT 1910 PLOT 3,12,30,22:PRINT G(0):RETURN 2999 REM INITIALIZE 3000 PLOT 27,24,12,6,3,29,14:PRINT "O T H E L L O" 3010 PLOT 15,3,0,3,22:PRINT "COMPUCOLOR II" 3020 RESTORE 3020:DATA neeeeo,a b,a b,lm:FOR I= 0TO 3:READ B$(I):NEXT 3030 C$= "tu"+ CHR$ (10)+ CHR$ (26)+ CHR$ (26)+ "vw" 3040 DATA 1,-8,-9,-10,-1,8,9,10:FOR I= 0TO 7:READ X(I):NEXT 3050 PLOT 14 3098 RETURN 3099 REM INITIALIZE GAMES 3100 RESTORE 3100:DATA 6,-2,3,2,-2,-3,-1,-1,3,-1,1,0,2,-1,0,0 3110 FOR I= 1TO 4:FOR J= 1TO 4:K= 9* I+ J:READ W(K,0):L= K+ 9- 2* J:W(L,0)= W(K,0):NEXT :NEXT 3120 FOR I= 10TO 44:W(90- I,0)= W(I,0):NEXT 3130 FOR I= 10TO 80:W(I,1)= W(I,0):NEXT 3150 GOSUB 3200 3155 FOR I= 0TO 90:B(I)= 0:Z(I)= 1:NEXT 3160 FOR P= 1TO 2:J= 39+ P:GOSUB 1200:J= 51- P:GOSUB 1200:S(P)= 2:NEXT :GOSUB 1800 3198 RETURN 3199 REM DISPLAY BOARD 3200 PLOT 22,15,30 3210 FOR I= 0TO 7:FOR J= 0TO 3:PLOT 3,16,4* I+ J:FOR K= 0TO 7:PRINT B$(J);:NEXT :PRINT :NEXT :NEXT 3220 FOR I= 0TO 7:FOR J= 1TO 8:PLOT 3,6* J+ 11,4* I+ 1:PRINT 8* I+ J:NEXT :NEXT 3230 PLOT 14,29:RETURN 10000 PLOT 6,33,12,14,3,11,6,6,25 10010 PRINT "COMPUCOLOR PRESENTS THE GAME OF OTHELLO":PLOT 3,80,0 10020 FOR I= 1TO 1000:NEXT :PLOT 6,2,12:RETURN 11000 INPUT "WOULD YOU LIKE INSTRUCTIONS (Y/N)? ";A$ 11010 IF MID$ (A$,1,1)= "N"THEN RETURN 11020 PLOT 15,12 11030 PRINT "THE OBJECT OF OTHELLO IS TO OCCUPY THE MOST SQUARES AT THE END" 11040 PRINT "OF THE GAME.":PRINT 11050 PRINT "THE PLAY PROCEEDS BY OCCUPYING SQUARES IN TURN WHICH CAUSE THE" 11060 PRINT "OPPENENT'S SQUARES TO BE FLIPPED. OPPONENT'S SQUARES ARE" 11070 PRINT "FLIPPED IF THEY ARE IN A DIRECT LINE (VERTICAL, HORIZONTAL, OR" 11080 PRINT "DIAGONAL) BETWEEN A SQUARE OF YOUR COLOR AND THE SQUARE YOU" 11090 PRINT "JUST PLACED.":PRINT 11100 PRINT "EITHER 0,1, OR 2 PLAYERS CAN PLAY OTHELLO. WITH 0 PLAYERS THE" 11110 PRINT "COMPUTER PLAYS ITSELF. WITH 1 PLAYER THE COMPUTER PLAYS" 11120 PRINT "AGAINST YOU. WITH 2 PLAYERS TWO PEOPLE CAN PLAY EACH OTHER." 11130 PRINT 11140 PRINT "MOVES ARE ENTERED IN RESPONSE TO YOUR MOVE PROMPT. YOUR" 11150 PRINT "MOVE MUST CAUSE AT LEAST 1 OF YOUR OPPONENT'S SQUARES TO BE" 11160 PRINT "FLIPPED. IF YOU CANNOT MOVE, ENTER 0 INSTEAD OF THE NUMBER OF" 11170 PRINT "A SQUARE BETWEEN 1 AND 64. TO END THE CURRENT GAME, ENTER Q." 11180 PRINT "IF YOUR MOVE IS INVALID, THE COMPUTER WILL RESPOND BAD MOVE" 11190 PRINT "AND WILL ASK YOU FOR YOUR MOVE AGAIN. IF YOU HAVE A MOVE THAT" 11200 PRINT "WILL CAUSE AN OPPONENT'S SQUARE TO BE FLIPPED, YOU MUST MOVE" 11210 PRINT "AND NOT PASS.":PRINT :INPUT "ARE YOU READY TO PLAY (Y/N)? ";A$ 11220 IF MID$ (A$,1,1)= "N"THEN LOAD "MENU":RUN 11230 RETURN