Random demo
Random game
Random software
Entry name:
 Othello 
Publisher/Developer:

BELLCOM - Public Domain Library
(Software library)
  • Category:

    Games
  • Maximum players:

    1
  • Programming language:

    Atari BASIC
Othello Othello Othello Othello Othello Othello Othello Othello Othello
Listing 1
3 Q0=0:​Q1=1:​Q2=2:​Q4=4:​Q5=3:​Q6=6:​Q7=7:​Q9=9:​Q10=10:​Q11=11:​Q12=12:​Q14=14:​Q15=3000:​Q17=5:​Q18=15:​Q31=31:​Q35=35:​Q40=40:​Q42=42:​Q44=44
4 Q45=45:​Q50=50:​Q54=54:​Q55=55:​Q70=70:​Q72=72:​Q77=77:​Q88=88:​Q101=101:​Q102=3100:​Q120=120:​Q200=3200:​Q255=255:​Q401=3400:​Q501=8500
5 Q740=3740:​Q755=755:​Q764=764
35 DIM BOARD(Q101),​P(Q101),​PIE(Q1),​YESNO$(Q2),​LEGAL(Q9)
40 GRAPHICS Q2:​? #Q6:​? #Q6:​? #Q6:​? #Q6:​? #Q6;" OTHELLO"
50 ? "DO YOU WANT INSTRUCTIONS (Y/N)";
51 IF PEEK(Q764)=Q35 THEN ?:​?:​GOTO 500
52 IF PEEK(Q764)=43 THEN GOTO Q55
53 GOTO 51
55 GRAPHICS Q0
60 ? "REVERSI is a game played on an 8 by 8 board by two players who alternately place pieces to capture other ";
70 ? "pieces."
90 ? "Capturing is done by pinching your opponent's pieces between your own. A player must capture pieces if ";
100 ? " possible."
120 ? "When players have no more captures,​ the game ends. The player with more pieces wins."
130 ? "Choosing the location of your move is done by using the curser keys ";:​FOR X=28 TO Q31:​? CHR$(27);CHR$(X);:​NEXT X
150 ? " when you are happy,​ press the space bar and the computer will put your piece on that location."
160 ? "If you are not sure about how to play,​when asked how many human players,​ reply 0(zero) and you can ";
170 ? "watch the computer play itself"
180 ? "If you cannot move,​ or you wish the computer to move for you,​ press 'N' and the move will be made."
500 POKE Q764,​Q255:​? "HOW MANY HUMAN PLAYERS (0-2)";
510 IF PEEK(Q764)=Q255 THEN 510
520 IF PEEK(Q764)=Q50 THEN PLAYERS=Q0:​? "0"
530 IF PEEK(Q764)=Q31 THEN PLAYERS=Q1:​? "1"
540 IF PEEK(Q764)=30 THEN PLAYERS=Q2:​? "2"
600 ? "STAND BY....."
620 DATA 0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​7,​2,​6,​6,​6,​6,​2,​7,​0,​0,​2,​1,​3,​3,​3,​3,​1,​2,​0,​0,​6,​3,​4,​4,​4,​4,​3,​6,​0
624 DATA 0,​6,​3,​4,​4,​4,​4,​3,​6,​0,​0,​6,​3,​4,​4,​4,​4,​3,​6,​0,​0,​6,​3,​4,​4,​4,​4,​3,​6,​0
628 DATA 0,​2,​1,​3,​3,​3,​3,​1,​2,​0,​0,​7,​2,​6,​6,​6,​6,​2,​7,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
630 FOR X=Q0 TO 99:​READ Y:​P(X)=Y:​NEXT X
640 DATA -10,​-9,​1,​11,​10,​9,​-1,​-11,​0
650 FOR X=Q1 TO Q9:​READ Y:​LEGAL(X)=Y:​NEXT X:​DRAWCELL=8000:​DRAWCELLP=8100:​GRID=8400:​KEYREAD=Q501:​AUTOPLAY=3700
910 LET ONE=Q1:​ZERO=Q0:​PIE(ZERO)=Q2:​PIE(ONE)=Q2
2000 GRAPHICS Q7:​SETCOLOR Q1,​Q4,​8:​SETCOLOR Q2,​Q12,​Q10:​POKE 752,​Q1:​? "";:​SETCOLOR Q5,​Q4,​Q4:​GOSUB GRID
2030 P=Q1:​CELL=Q44:​GOSUB DRAWCELLP:​CELL=Q55:​GOSUB DRAWCELLP:​P=Q2:​CELL=Q45:​GOSUB DRAWCELLP:​CELL=Q54:​GOSUB DRAWCELLP
2100 FOR I=Q11 TO Q88:​BOARD(I)=ZERO:​NEXT I
2110 FOR I=ZERO TO Q9:​BOARD(I)=-Q1:​BOARD(I+90)=-Q1:​BOARD(I*Q10)=-Q1:​BOARD(I*Q10+Q9)=-Q1:​NEXT I
2120 BOARD(Q44)=Q1:​BOARD(Q55)=Q1:​BOARD(Q45)=Q2:​BOARD(Q54)=Q2:​CURC=Q2:​CURX=26:​CURY=Q70:​GOSUB DRAWCELL
2210 CURC=Q5:​CURX=129:​CURY=Q70:​GOSUB DRAWCELL
3000 IF PIE(ZERO)+PIE(ONE)=64 OR PIE(ONE)=ZERO OR PIE(ZERO)=ZERO THEN 4000
3005 POKE Q77,​Q0:​? "";" ";PIE(ONE),​,​,​" ";PIE(ZERO):​IF CURP=ZERO THEN ? " "
3007 IF CURP=ONE THEN ? " "
3010 SETCOLOR Q1+CURP,​Q4,​Q0:​SOUND Q0,​Q255,​Q10,​Q10:​FOR Y=Q1 TO Q40:​NEXT Y:​SETCOLOR Q1+CURP,​Q4,​Q14:​SOUND Q0,​Q0,​Q0,​Q0
3020 SETCOLOR Q1,​Q4,​Q4:​SETCOLOR Q2,​Q12,​Q10:​IF CURP=ZERO THEN SETCOLOR Q0,​Q4,​Q4
3023 IF CURP=ONE THEN SETCOLOR Q0,​Q12,​Q10
3025 IF PLAYERS=ZERO OR PLAYERS=ONE AND CURP=ONE THEN GOTO AUTOPLAY
3030 CURCELL=Q44:​CURX=ZERO:​CURY=ZERO:​GOTO Q200
3100 GOSUB KEYREAD:​IF DC=ZERO THEN GOTO Q401
3107 CURCELL=CURCELL+DC:​IF BOARD(CURCELL)=ZERO THEN GOTO Q200
3120 IF BOARD(CURCELL)<ZERO THEN CURCELL=CURCELL-DC:​GOTO Q102
3200 COLOR SHADE:​PLOT CURX,​CURY:​DRAWTO CURX+Q2,​CURY:​PLOT CURX,​CURY+ONE:​DRAWTO CURX+Q2,​CURY+ONE
3310 CURY=INT(CURCELL/Q10):​CURX=CURCELL-Q10*CURY:​CURX=Q44+Q10*(CURX-Q1):​CURY=Q4+Q9*(CURY-Q1):​LOCATE CURX,​CURY,​SHADE
3340 COLOR SHADE+ONE:​PLOT CURX,​CURY:​DRAWTO CURX+Q2,​CURY:​PLOT CURX,​CURY+ONE:​DRAWTO CURX+Q2,​CURY+ONE
3350 SOUND Q0,​Q50,​Q10,​Q10:​FOR X=Q1 TO 20:​NEXT X:​SOUND Q0,​Q0,​Q0,​Q0:​GOTO Q102
3400 IF BOARD(CURCELL)<>Q0 THEN GOTO Q200
3450 CELL=CURCELL:​P=CURP+Q1:​GOSUB DRAWCELLP:​CURP=ONE-CURP:​PIE(CURP)=PIE(CURP)+ONE:​BOARD(CURCELL)=ONE-CURP+Q1
3480 CURC=ONE-CURP+Q2:​GOSUB DRAWCELL:​TOTAL=ZERO:​PLAY=ZERO
3520 PLAY=PLAY+ONE:​INCR=LEGAL(PLAY):​IF INCR<>Q0 THEN GOSUB 3600:​GOTO 3520
3580 IF TOTAL=ZERO THEN CURP=Q1-CURP:​BOARD(CURCELL)=Q0:​CURC=Q0:​GOSUB DRAWCELL:​GOTO Q200
3590 GOTO Q15
3600 SPOT=Q0:​PIECES=Q0
3610 SPOT=SPOT+INCR:​IF BOARD(CURCELL+SPOT)=ONE+CURP THEN PIECES=PIECES+ONE:​GOTO 3610
3620 IF BOARD(CURCELL+SPOT)<>BOARD(CURCELL) OR PIECES=Q0 THEN RETURN
3630 SPOT=SPOT-INCR
3640 CURY=INT((CURCELL+SPOT)/Q10):​CURX=CURCELL+SPOT-Q10*CURY:​BOARD(CURCELL+SPOT)=BOARD(CURCELL)
3645 PIE(CURP)=PIE(CURP)+ONE:​PIE(ONE-CURP)=PIE(ONE-CURP)-ONE:​CURX=Q42+Q10*(CURX-Q1):​CURY=Q2+Q9*(CURY-Q1)
3660 P=ONE:​GOSUB DRAWCELL:​SPOT=SPOT-INCR:​TOTAL=TOTAL+ONE:​IF SPOT=ZERO THEN RETURN
3680 GOTO 3640
3700 MAX=ZERO:​FOR CURCELL=Q11 TO Q88:​IF BOARD(CURCELL)<>ZERO THEN GOTO Q740
3711 PLAY=ZERO:​POKE Q755,​Q5
3712 PLAY=PLAY+ONE:​INCR=LEGAL(PLAY):​IF INCR=ZERO THEN GOTO Q740
3713 IF BOARD(CURCELL+INCR)=Q1 OR BOARD(CURCELL+INCR)=Q2 THEN 3720
3715 GOTO 3712
3720 TOTAL=ZERO:​PLAY=ZERO
3725 PLAY=PLAY+ONE:​INCR=LEGAL(PLAY):​IF INCR<>Q0 THEN GOSUB 3800:​GOTO 3725
3728 IF TOTAL>ZERO THEN TOTAL=TOTAL+P(CURCELL)
3730 IF TOTAL>MAX THEN CNEW=CURCELL:​MAX=TOTAL
3735 IF TOTAL=MAX AND RND(ZERO)>0.5 THEN CNEW=CURCELL
3740 POKE Q755,​Q2:​NEXT CURCELL:​CURCELL=CNEW:​IF MAX=ZERO THEN CURP=ONE-CURP:​GOTO Q15
3750 GOTO Q401
3800 SPOT=ZERO:​PIECES=ZERO
3810 SPOT=SPOT+INCR:​IF BOARD(CURCELL+SPOT)=Q2-CURP THEN PIECES=PIECES+ONE:​GOTO 3810
3820 IF BOARD(CURCELL+SPOT)<>ONE+CURP OR PIECES=ZERO THEN RETURN
3830 SPOT=SPOT-INCR
3840 SPOT=SPOT-INCR:​TOTAL=TOTAL+P(CURCELL+SPOT):​IF SPOT=ZERO THEN RETURN
3850 GOTO 3840
4000 POKE Q77,​Q0:​? "";" ";PIE(ONE),​,​,​" ";PIE(ZERO):​IF PIE(ZERO)<PIE(ONE) THEN ? " ":​?
4007 IF PIE(ZERO)>PIE(ONE) THEN ? " ":​?
4008 IF PIE(ZERO)=PIE(ONE) THEN ? "TIE GAME!!":​GOTO 4030
4010 ? "THE WINNER WAS PLAYER #";:​IF PIE(ONE)>PIE(ZERO) THEN ? ONE
4020 IF PIE(ONE)<PIE(ZERO) THEN ? Q2
4030 POKE Q764,​Q255:​? "ANOTHER GAME";:​INPUT YESNO$:​IF YESNO$(Q1,​Q1)="Y" THEN RUN
4040 GRAPHICS Q0:​?:​? "CALLING MENU.....":​RUN "D:​MENU"
8000 COLOR CURC:​PLOT CURX+Q2,​CURY:​DRAWTO CURX+Q4,​CURY:​PLOT CURX+Q1,​CURY+Q1:​DRAWTO CURX+Q17,​CURY+Q1
8040 PLOT CURX,​CURY+Q2:​DRAWTO CURX+Q6,​CURY+Q2:​PLOT CURX,​CURY+Q5:​DRAWTO CURX+Q6,​CURY+Q5
8060 PLOT CURX+Q1,​CURY+Q4:​DRAWTO CURX+Q17,​CURY+Q4:​PLOT CURX+Q2,​CURY+Q17:​DRAWTO CURX+Q4,​CURY+Q17:​IF P=Q0 THEN RETURN
8080 FOR I=Q10 TO 200 STEP Q10:​SOUND Q0,​I,​Q0,​Q18:​NEXT I:​FOR I=Q18 TO Q0 STEP 0.25:​SOUND Q0,​210,​Q0,​I:​NEXT I
8090 SOUND Q0,​Q0,​Q0,​Q0:​RETURN
8100 REM
8110 CURC=P+Q1:​CURY=INT(CELL/Q10):​CURX=CELL-Q10*CURY:​CURX=Q42+Q10*(CURX-Q1):​CURY=Q2+Q9*(CURY-Q1):​GOTO DRAWCELL
8400 COLOR Q1:​FOR Y=Q0 TO Q72 STEP Q9:​SOUND Q0,​Y,​Q10,​Q10:​PLOT Q40,​Y:​DRAWTO Q120,​Y:​NEXT Y
8430 FOR X=Q40 TO Q120 STEP Q10:​SOUND Q0,​100+X,​Q10,​Q10:​PLOT X,​Q0:​DRAWTO X,​Q72:​NEXT X:​SOUND Q0,​Q0,​Q0,​Q0:​RETURN
8500 POKE Q764,​Q0:​DC=ZERO
8520 P=PEEK(Q764):​IF P=Q6 THEN DC=-Q1
8522 IF STICK(Q0)=Q11 THEN DC=-Q1
8530 IF P=Q7 THEN DC=Q1
8532 IF STICK(Q0)=Q7 THEN DC=Q1
8540 IF P=Q18 THEN DC=Q10
8542 IF STICK(Q0)=13 THEN DC=Q10
8550 IF P=Q14 THEN DC=-Q10
8552 IF STICK(Q0)=Q14 THEN DC=-Q10
8560 IF P=33 THEN RETURN
8562 IF STRIG(Q0)=Q0 THEN RETURN
8565 IF P=21 THEN GOSUB 5000:​GOTO Q501
8567 IF P=Q35 THEN COLOR SHADE:​PLOT CURX,​CURY:​DRAWTO CURX+Q2,​CURY:​PLOT CURX,​CURY+ONE:​DRAWTO CURX+Q2,​CURY+ONE:​GOTO 370
8570 IF DC=ZERO THEN 8520
8590 RETURN	

This is non-commercial site, its content is based on Atari 8-bit home computer contents and references.
If you feel your rights are violated by showing/using any part of contents of your product represented on this page, please contact me immediatelly so I can remove it!