Compucolor.org – Virtual Media

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