10 REM * OTHELLO 11 REM * BY MARK JESKE 12 REM * TRANSLATED AND REVISED FOR 13 REM * THE COMMODORE 64 BY 14 REM * DONNA K. WOODY 20 GOSUB10000 30 GOTO1000 40 : 50 REM * VALID INPUT CHECK 60 N=0 70 IFB(I)<>0THEN180 80 FORJ=0TO7 90 K=I+O(J) 100 IFB(K)<>1THEN170 110 K=K+O(J) 120 IFB(K)=1THEN110 130 IFB(K)<>2THEN170 140 K=K-O(J) 150 IFK=ITHEN170 160 N=N+1:F(N)=K:GOTO140 170 NEXTJ 180 RETURN 188 : 189 REM * COMPUTER MOVE CHECK 190 N=0 200 IFB(I)<>0THEN320 210 FORJ=0TO7 220 K=I+O(J) 230 IFB(K)<>2THEN310 240 K=K+O(J) 250 IFB(K)=2THEN240 260 IFB(K)<>1THEN310 270 K=K-O(J) 280 IFK=ITHEN310 290 N=N+1:F(N)=K 300 GOTO270 310 NEXTJ 320 RETURN 338 : 339 REM * BEGIN COMPUTER MOVES 340 POKE781,19:POKE782,0:SYS65520 341 PRINT"MY PIECES - [157][157][157][157]"CP" ";TAB(20)"YOUR PIECES - [157][157][157][157]"OP" " 345 IF LEVEL=1THENGOTO600 350 IFOP+CP>51ANDLEVEL=2THENGOTO600 360 IFOP+CP>51ANDLEVEL=3THENGOTO700 370 FORL=1TO60 380 I=P(L) 390 GOSUB190 400 IFN>0THEN440 410 NEXTL 420 POKE781,20:POKE782,0:SYS65520:PRINT"I CANNOT MOVE." 430 GOTO590 440 POKE781,20:POKE782,0:SYS65520:PRINT"I MOVE TO "; 450 IFI>80ANDI<89THENPRINT"A";:GOTO530 460 IFI>70ANDI<79THENPRINT"B";:GOTO530 470 IFI>60ANDI<69THENPRINT"C";:GOTO530 480 IFI>50ANDI<59THENPRINT"D";:GOTO530 490 IFI>40ANDI<49THENPRINT"E";:GOTO530 500 IFI>30ANDI<39THENPRINT"F";:GOTO530 510 IFI>20ANDI<29THENPRINT"G";:GOTO530 520 IFI>10ANDI<19THENPRINT"H"; 530 PRINTI-(10*INT(I/10))" AND FLIP "N" OF YOUR" 535 POKE781,21:POKE782,0:SYS65520:PRINT"PIECES." 540 B(I)=1 550 FORJ=1TON 560 B(F(J))=1 570 NEXTJ 580 GOSUB1450 585 FORX=1TO100:NEXTX:POKE781,20:POKE782,0:SYS65520:FORX=1TO120:PRINT" ";:NEXT 590 GOTO1030 598 : 599 REM * LEVEL 1 & 2 LAST MOVES 600 X=0:Y=0 610 FORL=1TO60 620 I=P(L) 630 GOSUB190 640 IFN>XTHENX=N:Y=I 650 NEXTL 660 IFX=0THEN420 670 I=Y 680 GOSUB190 690 GOTO440 698 : 699 REM * LEVEL 3 LAST MOVES 700 X=0 710 FORL=0TO99:A(L)=B(L):NEXTL 720 FORL=1TO60 730 I=P(L):GOSUB190 740 IFN>0THEN780 750 NEXTL 760 IFX>0THEN930 770 GOTO930 780 IFX>9THEN930 790 X=X+1 800 R(X)=I:S(X)=N 810 B(I)=1 820 FORJ=1TON 830 B(F(J))=1 840 NEXTJ 850 Y=0 860 FORZ1=1TO60 870 I=P(Z1):GOSUB60 880 IFN>YTHENY=N 890 NEXTZ1 900 S(X)=S(X)-Y 910 FORK=0TO99:B(K)=A(K):NEXTK 920 GOTO750 930 FORL=0TO99:B(L)=A(L):NEXTL 940 IFX<1THEN420 950 Y=-99 960 FORL=1TOX 970 IFS(L)>YTHENY=1 980 NEXTL 990 I=R(Y):GOSUB190 991 GOTO440 998 : 999 REM * BOARD DISPLAY - USER IMPUT 1000 PRINTCHR$(147) 1010 GOSUB1720 1020 GOSUB1450 1030 POKE781,19:POKE782,0:SYS65520 1040 PRINT"MY PIECES - [157][157][157][157]"CP" ";TAB(20)"YOUR PIECES - [157][157][157][157]"OP" " 1050 FORL=1TO60 1060 I=P(L) 1070 GOSUB60 1080 IFN>0THEN1120 1090 NEXTL 1100 PRINT"YOU CANNOT MOVE." 1110 GOTO340 1120 POKE781,20:POKE782,0:SYS65520:PRINT"YOUR MOVE (L#)?[160]"; 1125 POKE198,0:WAIT198,1:GETX$ 1130 IFX$="L"THENI=90:GOTO1230 1140 IFX$="A"THENI=80:GOTO1230 1150 IFX$="B"THENI=70:GOTO1230 1160 IFX$="C"THENI=60:GOTO1230 1170 IFX$="D"THENI=50:GOTO1230 1180 IFX$="E"THENI=40:GOTO1230 1190 IFX$="F"THENI=30:GOTO1230 1200 IFX$="G"THENI=20:GOTO1230 1210 IFX$="H"THENI=10:GOTO1230 1220 GOTO1120 1230 PRINTX$; 1240 POKE198,0:WAIT198,1:GETX$ 1250 IFVAL(X$)<1ORVAL(X$)>8THEN1240 1260 IFI<90THEN1310 1270 LEVEL=VAL(X$) 1280 IFLEVEL>3THENLEVEL=3 1290 PRINTRIGHT$(X$,1);:PRINT" OKAY" 1300 GOTO1120 1310 I=I+VAL(X$) 1320 PRINTRIGHT$(X$,1) 1330 GOSUB60 1340 IFN>0THEN1370 1350 PRINT"ILLEGAL MOVE " 1360 POKE781,21:POKE782,0:SYS65520:GOTO1120 1370 PRINT"YOU FLIPPED "N" OF MY PIECES." 1380 B(I)=2 1390 FORL=1TON 1400 B(F(L))=2 1410 NEXTL 1420 GOSUB1450 1421 POKE781,20:POKE782,0:SYS65520:FORZZ=1TO120:PRINT" ";:NEXT 1425 GOTO340 1430 : 1440 REM * DISPLAY B() ON SCREEN 1450 CP=0:OP=0:X=34:Y=3 1455 POKE783,PEEK(783)AND254:POKE53272,21:POKE204,1:POKE19,0 1460 FORL=89TO11STEP-1 1470 IFB(L)=9THENGOTO1520 1480 IFB(L)=0THENGOTO1520 1490 IFB(L)=1THENPC$="[144][209]":CP=CP+1:GOTO1510 1500 OP=OP+1:PC$="[209][144]" 1510 POKE781,Y:POKE782,X:SYS65520:PRINTPC$ 1520 X=X-3 1530 IFX<7THENX=34:Y=Y+2:IFY>17THENY=3 1550 NEXTL 1560 IFOP+CP=64THEN12000 1570 IFOP=0ORCP=0THEN12000 1580 RETURN 1700 : 1710 REM * BOARD DISPLAY 1720 PRINTCHR$(147) 1730 PRINTTAB(10) "1 2 3 4 5 6 7 8" 1740 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1750 [153][163]7)"A SGN + + + + + + + + 1760 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1770 [153][163]7)"B SGN + + + + + + + + 1780 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1790 [153][163]7)"C SGN + + + + + + + + 1800 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1810 [153][163]7)"D SGN + + + + + + + + 1820 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1830 [153][163]7)"E SGN + + + + + + + + 1840 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1850 [153][163]7)"F SGN + + + + + + + + 1860 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1870 [153][163]7)"G SGN + + + + + + + + 1880 PRINTTAB(8)" [207][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208][183][183][208] 1890 [153][163]7)"H SGN + + + + + + + + 1900 PRINTTAB(8)" [183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]" 1910 RETURN 9998 : 9999 REM DIMENSION VARIABLES 10000 DIMP(60),B(99),O(7),F(20),R(10),S(10),A(99) 10005 POKE783,PEEK(783)AND254:POKE53272,21 10010 REM * B = BOARD ARRAY 10020 REM * P = SEQUENTIAL MOVES 10030 REM * O = MOVE DIRECTIONS 10040 REM * F = PIECES FLIPPED 10050 : 10060 REM * READ DATA VALUES 10070 FORL=0TO7 10080 READO(L) 10090 NEXTL 10100 FORL=0TO99 10110 READB(L) 10120 NEXTL 10130 FORL=1TO60 10140 READP(L) 10150 NEXTL 10152 FORL=1TO8:READV(L):NEXT 10154 FORL=1TO8:READH(L):NEXT 10160 : 10170 REM * DATA STATEMENTS 10180 DATA1,9,10,11,-1,-9 10181 DATA-10,-11 10182 DATA9,9,9,9,9,9,9,9,9,9 10183 DATA9,0,0,0,0,0,0,0,0,9 10190 DATA9,0,0,0,0,0,0,0,0,9 10191 DATA9,0,0,0,0,0,0,0,0,9 10192 DATA9,0,0,0,2,1,0,0,0,9 10200 DATA9,0,0,0,1,2,0,0,0,9 10201 DATA9,0,0,0,0,0,0,0,0,9 10202 DATA9,0,0,0,0,0,0,0,0,9 10203 DATA9,0,0,0,0,0,0,0,0,9 10210 DATA9,9,9,9,9,9,9,9,9,9 10211 DATA81,88,11,18,83,86 10220 DATA61,68,31,38,13,16,63,66,33,36,84,85,51,58,41,48,14,15 10230 DATA64,65,53,56,43,46,34,35,74,75,52,57,42,47,24,25,73,76 10240 DATA62,67,32,37,23,26,82,87,71,78,21,28,12,17,72,77,22,27 10242 DATA3,5,7,9,11,13,15,17 10244 DATA11,14,17,20,22,25,28,31 10250 : 10260 REM * SET COLORS 10270 POKE53281,7:POKE53280,12:PRINTCHR$(144) 10280 : 10290 REM * DISPLAY ROUTINE 10300 PRINTCHR$(147):POKE781,2:POKE782,15:SYS65520:PRINT"[152]WELCOME TO" 10310 POKE781,4:POKE782,13:SYS65520:PRINT"* * * * * * *" 10320 POKE781,6:POKE782,13:SYS65520:PRINT"* OTHELLO *" 10325 POKE781,8:POKE782,13:SYS65520:PRINT"* * * * * * *" 10330 POKE781,11:POKE782,15:SYS65520:PRINT"WRITTEN BY" 10340 POKE781,13:POKE782,15:SYS65520:PRINT"MARK JESKE" 10350 POKE781,17:POKE782,5:SYS65520:PRINT"[152]TRANSLATED FOR THE COMMODORE BY" 10360 POKE781,19:POKE782,13:SYS65520:PRINT"[154]DONNA K. WOODY" 10370 POKE781,23:POKE782,9:SYS65520:PRINT"[144]PRESS ANY KEY TO BEGIN" 10380 POKE198,0:WAIT198,1:GETA$ 10390 PRINTCHR$(147) 10400 POKE781,2:POKE782,0:SYS65520:PRINT"DO YOU NEED INSTRUCTIONS (Y/N)?[160]"; 10410 POKE198,0:WAIT198,1:GETA$ 10420 IFA$="Y"THEN 10470 10430 IFA$="N"THENPRINTCHR$(147):POKE53272,23:GOTO10640 10440 GOTO10400 10450 : 10460 REM * INSTRUCTIONS & LEVEL 10470 PRINTCHR$(147):POKE53272,23 10480 PRINT"[207][212][200][197][204][204][207] IS PLAYED ON AN 8 X 8 BOARD.":PRINT 10490 PRINT"[212]HE GAME'S OBJECT IS TO END UP WITH":PRINT 10500 PRINT"THE MOST PIECES. [217]OU ARE PLAYING WHITE":PRINT 10510 PRINT"AND THE COMPUTER IS BLACK. [212]HE PLAYERS":PRINT 10520 PRINT"TAKE TURNS PLACING PIECES ONTO THE":PRINT 10530 PRINT"BOARD, [215]ITH THE FOLLOWING RESTRICTIONS:":PRINT 10540 PRINT"(1) [212]HE SQUARE MUST BE EMPTY.":PRINT 10550 PRINT"(2) [212]HE SQUARE MUST BE ADJACENT TO AN" 10560 PRINT"OPPOSING PIECE.":PRINT 10570 PRINT"(3) [212]HE MOVE MUST TRAP AT LEAST ONE" 10580 PRINT"OPPOSING PIECE BETWEEN IT AND" 10590 PRINT"ANOTHER OF YOUR PIECES.":PRINT 10600 PRINT"[208][210][197][211][211] [210][197][212][213][210][206] [212][207] [195][207][206][212][201][206][213][197].";:POKE198,0:WAIT198,1:GETA$:PRINTCHR$(147) 10610 PRINT"[212]HE TRAPPED PIECES ARE THEN FLIPPED TO":PRINT 10620 PRINT"YOUR COLOR, AND PLAY CONTINUES UNTIL":PRINT 10630 PRINT"THE BOARD IS FULL.":PRINT:PRINT 10640 PRINT"[212]HE FOLLOWING SKILL LEVELS ARE":PRINT 10650 PRINT"AVAILABLE:":PRINT 10660 PRINT"1 - [194]EGINNER":PRINT 10670 PRINT"2 - [193]VERAGE PLAYER":PRINT 10680 PRINT"3 - [193]VERAGE TO ADVANCED PLAYER":PRINT:PRINT 10690 PRINT"[215][200][201][195][200] [204][197][214][197][204]? ";:POKE198,0:WAIT198,1:GETA$:LEVEL=VAL(A$) 10700 IFLEVEL<1ORLEVEL>3THENPRINTCHR$(147):GOTO10640 10710 PRINTCHR$(147) 10720 PRINT"[201]T IS POSSIBLE TO CHANGE THE SKILL":PRINT 10730 PRINT"LEVEL DURING THE GAME BY ENTERING AN [204]":PRINT 10740 PRINT"AND THE LEVEL NUMBER WHEN ASKED FOR":PRINT 10750 PRINT"YOUR MOVE.":PRINT:PRINT 10760 PRINT"[208][210][197][211][211] [210][197][212][213][210][206] [212][207] [195][207][206][212][201][206][213][197]. ";:POKE198,0:WAIT198,1:GETA$ 10770 POKE53272,21:PRINTCHR$(8):RETURN 11998 : 11999 REM * END GAME ROUTINE 12000 FORX=1TO200:NEXT 12010 PRINTCHR$(147) 12020 PRINT"THE GAME IS OVER.":PRINT 12030 PRINT"THE FINAL SCORE IS ME "CP" YOU "OP:PRINT 12040 IFCP=OPTHENPRINT"THE GAME IS A TIE." 12050 IFOP>CPOROP=CPTHENPRINT"AND YOU WIN!!!" 12060 IFCP>OPTHENPRINT"AND I WIN!!!" 12070 PRINT:PRINT:PRINT"THANK YOU FOR PLAYING." 12080 POKE781,15:POKE782,0:SYS65520 12090 PRINT"WOULD YOU LIKE TO PLAY AGAIN (Y/N)?[160]"; 12100 POKE198,0:WAIT198,1:GETA$ 12110 IFA$="N"THEN12200 12120 IFA$="Y"THENRUN 12130 GOTO12080 12200 REM END ROUTINE 12210 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 12220 POKE631,13:POKE632,13:POKE198,2:GOTO63000 63000 REM LINK BACK 63010 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 63020 POKE198,0:POKE631,13:POKE632,13:POKE198,2:END