REM REVERSI BY CCLX33

DIM global MAP(9,9),STEP1(60)

GLOBAL DOT,ENAMY,OK,SELF,FINISH

TOUCHSCREEN

Q$="111881883113611638836886411451154884588533366663344335536446655624422552744775572332266273377667122117718228877822277772"

PLAYER=1
DOT=3
GOSUB NEWGAME


DO
  IF TOUCH THEN
    X1=TOUCH.X\14+1
    Y1=TOUCH.Y\14+1
    IF X1<9 AND Y1<9 THEN
      IF MAP(X1,Y1)=DOT THEN
        CALL SET1(X1,Y1)
        GOSUB COMPUTER
      END IF
    END IF
    IF X1>9 AND Y1=1 THEN GOSUB COMPUTER
    IF X1>9 AND Y1=3 THEN GOSUB NEWGAME
  END IF
LOOP



SUB CHECK2(X,Y)
OK=0
IF MAP(X,Y)=SELF THEN EXIT SUB
FOR J=-1 TO 1
  FOR K=-1 TO 1
    IF MAP(X+J,Y+K)=ENAMY THEN
      GOSUB CHECK3
      IF OK=1 THEN
        J=1
        K=1
      END IF
    END IF
  NEXT k
NEXT j
END SUB

CHECK3:
FOR L=2 TO 7
  A2=MAP(X+J*L,Y+K*L)
  IF A2=0 OR A2=DOT THEN L=7
  IF A2=SELF THEN
    OK=1
    L=7
  END IF
NEXT L
RETURN



CLEARDOT:
FOR X=1 TO 8
  FOR Y=1 TO 8
    IF MAP(X,Y)=DOT THEN CALL DRAW1(X,Y,0)
  NEXT Y
NEXT X
RETURN



CHGPLAYER:
PLAYER=3-PLAYER
locate 0,15
IF PLAYER=2 THEN
  print "2 players"
else
  print "1 player"
end if
RETURN




COMPUTER:
COMP1:
REPEAT
  IF CN=64 THEN
    FINISH=1
    gosub COUNT1
    RETURN
  END IF
  WAIT 25
  GOSUB NEXTPLAYER
  N=1
  IF PASS1=2 THEN
    N=2
  ELSE
    FOR I1=1 TO 119 STEP 2
      X=VAL(MID$(Q$,I1,1))
      Y=VAL(MID$(Q$,I1+1,1))
      IF MAP(X,Y)=DOT THEN
        call SET1(X,Y)
        I1=119
      END IF
    NEXT I1
  END IF
  GOSUB NEXTPLAYER
UNTIL NOT (PASS1=1 AND N=1)

IF PASS1=1 AND N=2 THEN
  FINISH=1
  GOSUB COUNT1
END IF
RETURN



COUNT1:
B=0
W=0
FOR Y=1 TO 8
  FOR X=1 TO 8
    IF MAP(X,Y)=1 THEN B=B+1
    IF MAP(X,Y)=2 THEN W=W+1
  NEXT X
NEXT Y

LOCATE 0,15
PRINT "B=";B,"W=";W
IF FINISH=1 THEN
  LOCATE 0,14
  IF W<B THEN print "BLACK WIN"
  IF B<W THEN print "WHITE WIN"
  IF B=W THEN print "EQUAL"
END IF
RETURN



SUB DRAW1(X,Y,A1)
  if a1=0 then pic=14 else pic=a1*2
  I=(Y-1)*8+X-1
  SPRITE.A I,(,,,,1)
  SPRITE I,X*14-14,Y*14-14,pic
  MAP(X,Y)=A1
END SUB



FLIP:
WAIT 7
FOR Y=1 TO 8
  FOR X=1 TO 8
    A1=MAP(X,Y)
    IF A1>4 THEN CALL DRAW1(X,Y,11-A1)
  NEXT X
NEXT Y
WAIT 7

FOR Y=1 TO 8
 FOR X=1 TO 8
  A1=MAP(X,Y)
  IF A1>4 THEN CALL DRAW1(X,Y,A1-4)
 NEXT X
NEXT Y
RETURN





NEWGAME:
CLS
FOR Y=1 TO 8
  FOR X=1 TO 8
    CALL DRAW1(X,Y,0)
  NEXT X
NEXT Y
CALL DRAW1(4,4,2)
CALL DRAW1(5,5,2)
CALL DRAW1(4,5,1)
CALL DRAW1(5,4,1)
CH=0
DOT=3
SELF=1
ENAMY=2
CN=4
FINISH=0
PASS1=0
GOSUB SETDOT
LOCATE 15,0
PRINT "PASS"
LOCATE 15,3
PRINT "NEW"
RETURN




NEXTPLAYER:
 ENAMY=3-ENAMY
 SELF=3-SELF
 gosub CLEARDOT
 DOT=7-DOT
 gosub SETDOT
 GOSUB SHOWPASS
RETURN





SUB SET1(X,Y)
LOCATE 0,14
PRINT X,Y
CALL DRAW1(X,Y,SELF)
FOR J=-1 TO 1
  FOR K=-1 TO 1
    IF MAP(X+J,Y+K)=ENAMY THEN GOSUB EAT
  NEXT K
NEXT J
CN=CN+1
GOSUB FLIP
GOSUB COUNT1
END SUB



EAT:
FOR L=2 TO 7
  A2=MAP(X+J*L,Y+K*L)
  IF A2=0 OR A2=DOT THEN L=7
  IF A2=SELF THEN
    GOSUB EATLINE
    L=7
  end if
NEXT L
RETURN

EATLINE:
FOR M=1 TO L-1
  X2=X+J*M
  Y2=Y+K*M
  CALL DRAW1(X2,Y2,ENAMY+4)
NEXT M
RETURN





SETDOT:
CH=1
C=0
PASS1=0
FOR Y=1 TO 8
  FOR X=1 TO 8
    IF MAP(X,Y)=0 THEN
      CALL CHECK2(X,Y)
      IF OK=1 THEN
        CALL DRAW1(X,Y,DOT)
        C=C+1
      END IF
    END IF
  NEXT X
NEXT Y
CH=0
IF C=0 THEN PASS1=SELF
RETURN





SHOWPASS:
LOCATE 0,14
IF CN=64 THEN PRINT "END"
IF PASS1=1 THEN PRINT "BLACK PASS"
IF PASS1=2 THEN PRINT "WHITE PASS"
RETURN



#1:MAIN PALETTES
053F390000383400003C0C00003F3C00
003F2A15003F2A15003F2A15003F2A15

#2:MAIN CHARACTERS
00000000000000000000000000000000
00000000000000000000000000000000
FF80878F9FBFBFBF00FFFFFFFFFFFFFF
FC0484C4E4F4F4F400F8F8F8F8F8F8F8
FF80878F9FBFBFBF00FFF8F0E0C0C0C0
FC0484C4E4F4F4F400F8783818080808
FF8080808080838300FFFFFFFFFFFFFF
FC0404040404040400F8F8F8F8F8F8F8
FF8080808080838300FFFFFFFFFFFCFC
FC0404040404040400F8F8F8F8F8F8F8
FF8080808F9FBFBF00FFFFFFFFFFFFFF
FC040404C4E4F4F400F8F8F8F8F8F8F8
FF8080808F9FBFBF00FFFFFFF0E0C0C0
FC040404C4E4F4F400F8F8F838180808
FF8080808080808000FFFFFFFFFFFFFF
FC0404040404040400F8F8F8F8F8F8F8
00000000000000000000000000000000
00000000000000000000000000000000
BF9F8F8780FF0000FFFFFFFFFFFF0000
F4E4C48404FC0000F8F8F8F8F8F80000
BF9F8F8780FF0000C0E0F0F8FFFF0000
F4E4C48404FC000008183878F8F80000
8080808080FF0000FFFFFFFFFFFF0000
0404040404FC0000F8F8F8F8F8F80000
8080808080FF0000FFFFFFFFFFFF0000
0404040404FC0000F8F8F8F8F8F80000
9F8F808080FF0000FFFFFFFFFFFF0000
E4C4040404FC0000F8F8F8F8F8F80000
9F8F808080FF0000E0F0FFFFFFFF0000
E4C4040404FC00001838F8F8F8F80000
8080808080FF0000FFFFFFFFFFFF0000
0404040404FC0000F8F8F8F8F8F80000

