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 W4 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