TOUCHSCREEN REM THIS GAME WAS INSPIRED BY THE HTTP://WWW.MATHEMATISCHE-BASTELEIEN.DE/SOLITAIRE.HTM REM AUTO-IT VERSION FROM: HTTPS://WWW.AUTOITSCRIPT.COM/FORUM/TOPIC/203697-DANS-MISC-SCRIPTS/?TAB=COMMENTS#COMMENT-1471041 REM LOWRES-NX VERSION BY DAN - 16.02.2021 REM VARIABLE DEFINITIONS: DIM GLOBAL GAMETYPE$(17,2) DIM GLOBAL UNDOBUFFER$(100) DIM GLOBAL GAMEFIELD$(8,8) GAME=1 GLOBAL PARAM, PARAM$, APPNAME$, GAME GLOBAL MARBLE, MARBLECOUNT GLOBAL VSOUND Global HaveMoves HaveMoves=0 VSOUND=1 OX=-1 OY=-1 MX=-1 MY=-1 PARAM=0 PARAM$="" APPNAME$="" APPNAME01$="" GAMETYPE$(00,0) = "" GAMETYPE$(01,0) = "STANDARD" GAMETYPE$(02,0) = "PYRAMID 16" GAMETYPE$(03,0) = "PYRAMID 9" GAMETYPE$(04,0) = "MIRROR" GAMETYPE$(05,0) = "GREEK CROSS" GAMETYPE$(06,0) = "LATIN CROSS" GAMETYPE$(07,0) = "SHIP" GAMETYPE$(08,0) = "SUBMARINE" GAMETYPE$(09,0) = "Y-PENTOMINO" GAMETYPE$(10,0) = "T-PENTOMINO" GAMETYPE$(11,0) = "V-PENTOMINO" GAMETYPE$(12,0) = "P-PENTOMINO" GAMETYPE$(13,0) = "L-PENTOMINO" GAMETYPE$(14,0) = "O-PENTOMINO" GAMETYPE$(15,0) = "UNDO" GAMETYPE$(00,1) = "000000000000000000000000000000000" GAMETYPE$(01,1) = "111111111111111101111111111111111" GAMETYPE$(02,1) = "000010001110001111101111111000000" GAMETYPE$(03,1) = "000010001110001111100000000000000" GAMETYPE$(04,1) = "000000001110000111000011100010000" GAMETYPE$(05,1) = "000010000100001111100001000010000" GAMETYPE$(06,1) = "000000000100000111000001000010000" GAMETYPE$(07,1) = "000000001100001111000000000000000" GAMETYPE$(08,1) = "000000000100001111100000000000000" GAMETYPE$(09,1) = "000000000100000011000000100001000" GAMETYPE$(10,1) = "000000000000000111000001000010000" GAMETYPE$(11,1) = "000000000000000011100001000010000" GAMETYPE$(12,1) = "000000000110000011000001000000000" GAMETYPE$(13,1) = "000000000100000010000001100000000" GAMETYPE$(14,1) = "000000000000000011000001100000000" GAMETYPE$(15,1) = "000000000000000000000000000000000" GOSUB INTROSCREEN GOSUB CHOOSEGAME CALL DRAWBOARD DO IF TAP THEN BG 0 PAL 1 GOSUB CHECKTAP CALL DRAWBOARD END IF PAL 1 LOCATE 0,10 ' PRINT MX," " LOCATE 0,11 ' PRINT MY," " LOCATE 0,14 PRINT APPNAME01$ LOCATE 0,15 PRINT APPNAME$ WAIT VBL LOOP END INTROSCREEN: BG 1 QUIT=0 CLS 0 CLS 1 PAL 4 REM DRAW PEG FOR X=0 TO 2 CELL 8+X,0,10+X CELL 8+X,1,26+X NEXT X REM DRAW SOLITAIRE FOR X=0 TO 8 CELL 5+X,2,39+X CELL 5+X,3,55+X NEXT X LOCATE 0,4 PAL 6 PRINT " WRITTEN BY DAN" PRINT " **************" PRINT PAL 1 PRINT "INSTRUCTIONS:" PAL 4 PRINT "MOVE BY JUMPING" PRINT "OVER THE MARBLES." PRINT "YOU CAN MOVE ONLY" PRINT "UP/DOWN, LEFT/RIGHT" PRINT "AIM IS TO HAVE ONE" PRINT "MARBLE LEFT ON THE" PRINT "BOARD." PRINT "USING TOUCH CONTROL" PAL 5 TEXT 15,3,"V1.1" TEXT 0,0,"START" WHILE QUIT=0 IF TAP THEN MX=TOUCH.X MY=TOUCH.Y IF MX>=0 AND MX<=40 AND MY>=0 AND MY<=8 THEN QUIT=1 END IF WAIT VBL WEND RETURN CHECKTAP: REM CALCULATE THE STARTING POSITION OF THE TAP MX=TOUCH.X MY=TOUCH.Y TX=INT((MX+8)/16)-1 TY=INT((MY/16)+1) REM CHECK THE GAMEFIELD BOUNDS Z = 0 IF TX>=1 AND TX<=7 AND TY>=1 AND TY<= 7 THEN IF TY < 3 OR TY > 5 THEN IF TX >= 3 AND TX <= 5 THEN Z = 1 END IF ELSE Z = 1 END IF END IF IF Z=1 THEN GOSUB CHECKBUTTONS REM UNDO BUTTON IF MX>=0 AND MX<39 AND MY>=0 AND MY<16 THEN IF OX > -1 THEN GAMEFIELD$(OX,OY)="1" OX=-1 OY=-1 END IF CALL UNDO APPNAME01$=" " END IF REM CHOOSE GAME BUTTON IF MX>=112 AND MX<159 AND MY>=0 AND MY<16 THEN GOSUB CHOOSEGAME OX=-1 OY=-1 CALL DRAWBOARD UNDOBUFFER$(0)="0" END IF RETURN CHECKBUTTONS: TMP$ = GAMEFIELD$(TX,TY) IF TMP$ = "0" THEN CALL JUMP(TX, TY, OX, OY) IF PARAM = 1 THEN OX = -1 OY = -1 END IF CALL Checkmoves IF HaveMoves=0 then APPNAME01$="GAME OVER - NO MOVES" CALL GETBOARD TMPTXT$ = PARAM$ CALL STRINGFIND(TMPTXT$, "1") IF PARAM = 1 THEN APPNAME01$="WELL DONE! GAME OVER" ELSE IF OX = -1 THEN OX = TX OY = TY GAMEFIELD$(OX,OY)="2" ELSE GAMEFIELD$(OX,OY)="1" OX = TX OY = TY GAMEFIELD$(OX,OY)="2" END IF END IF RETURN CHOOSEGAME: CLS SPRITE VIEW OFF BG 1 PRIO 1 QUIT=0 WHILE QUIT=0 FOR X=1 TO 14 PAL 4 LOCATE 4,X-1 IF GAME=X THEN PAL 1 PRINT GAMETYPE$(X,0) NEXT X TX=TOUCH.X TY=TOUCH.Y TG=INT(TY/8) IF TG>= 0 AND TG<=13 AND TX>4*8 THEN IF TX<=((4*8)+(LEN(GAMETYPE$(TG+1,0))*8)) THEN GAME=TG+1 END IF PAL 5 TEXT 0,15, "START ABOUT" IF TAP THEN IF TY>=121 AND TY<=128 THEN IF TX>=0 AND TX<=40 THEN QUIT=1 IF TX>=120 AND TX<=158 THEN QUIT=2 IF TX>=48 AND TX<=112 THEN VSOUND=-VSOUND END IF END IF IF VSOUND=-1 THEN PAL 7 TXTSOUND$="NO SOUND" ELSE PAL 3 TXTSOUND$="SOUND ON" END IF TEXT 6,15,TXTSOUND$ PAL 4 WAIT VBL WEND IF QUIT=2 THEN QUIT=0 GOSUB INTROSCREEN GOTO CHOOSEGAME END IF CLS BG 0 PRIO 0 SPRITE VIEW ON CALL BOARDSETUP(GAME) APPNAME01$="" RETURN SUB STRINGFIND(TXT$, S$) NR = 0 FOR X = 1 TO LEN(TXT$) IF MID$(TXT$, X, 1) = S$ THEN NR = NR + 1 NEXT X PARAM=NR END SUB SUB JUMP(X, Y, OX, OY) TMPX = ABS(OX - X) TMPY = ABS(OY - Y) DIR = 0 PARAM=0 IF TMPX = 0 AND TMPY = 2 THEN IF (OY-Y)>0 THEN DIR=Y+1 ELSE DIR=Y-1 END IF IF GAMEFIELD$(X,DIR) = "1" THEN IF VSOUND=1 then PLAY 0,45,10 WAIT 5 END IF CALL UNDOADD GAMEFIELD$(X,Y)="1" GAMEFIELD$(X,DIR)="0" GAMEFIELD$(OX,OY)="0" PARAM=1 EXIT SUB END IF ELSE IF TMPY = 0 AND TMPX = 2 THEN IF (OX-X)>0 THEN DIR=X+1 ELSE DIR=X-1 END IF IF GAMEFIELD$(DIR,Y) = "1" THEN IF VSOUND=1 then PLAY 0,44,10 WAIT 5 END IF CALL UNDOADD GAMEFIELD$(X,Y)="1" GAMEFIELD$(DIR,Y)="0" GAMEFIELD$(OX,OY)="0" PARAM=1 EXIT SUB END IF END IF PARAM=0 END SUB SUB DRAWBOARD BG 1 PRIO 1 PAL 0 BG COPY 0,0,32,16 TO 0,0 REM UNDO TEXT SPRITE 1,4,4,117 SPRITE 2,12,4,110 SPRITE 3,20,4,100 SPRITE 4,28,4,111 REM MENUE TEXT SPRITE 5,120,4,101 SPRITE 6,128,4,120 SPRITE 7,136,4,105 SPRITE 8,144,4,116 BG 0 PRIO 0 PAL 5 NR=0 MARBLECOUNT=0 TEXT 0,2,UNDOBUFFER$(0)+" " PAL 2 FOR Y = 1 TO 7 FOR X = 1 TO 7 Z = 0 IF Y < 3 OR Y > 5 THEN IF X >= 3 AND X <= 5 THEN Z = 1 ELSE Z = 1 END IF IF Z = 1 THEN IF GAMEFIELD$(X,Y)="0" THEN NR=1 IF GAMEFIELD$(X,Y)="1" THEN NR=3 IF GAMEFIELD$(X,Y)="2" THEN NR=5 CELL INT((15+(X*16))/8),INT((-16+(Y*16))/8),NR CELL INT((23+(X*16))/8),INT((-16+(Y*16))/8),NR+1 CELL INT((15+(X*16))/8),INT((-8+(Y*16))/8),NR+16 CELL INT((23+(X*16))/8),INT((-8+(Y*16))/8),NR+17 IF NR=3 OR NR=5 THEN MARBLECOUNT=MARBLECOUNT+1 END IF NEXT X NEXT Y PAL 5 TEXT 13,10, "MARBLES" TEXT 14,11,STR$(MARBLECOUNT)+" " TEXT 16,11,"/"+STR$(MARBLE) END SUB SUB GETBOARD PARAM$="" TMPTXT$ = "" TMPTXT1$ = "" FOR Y = 1 TO 7 FOR X = 1 TO 7 Z = 0 IF Y < 3 OR Y > 5 THEN IF X >= 3 AND X <= 5 THEN Z = 1 ELSE Z = 1 END IF IF Z = 1 THEN TMPTXT1$ = GAMEFIELD$(X,Y) IF TMPTXT1$="2" THEN TMPTXT1$="1" TMPTXT$ = TMPTXT$ + TMPTXT1$ END IF NEXT X NEXT Y PARAM$=TMPTXT$ END SUB SUB BOARDSETUP(A) W = 0 Z=0 IF A<16 THEN MARBLE=0 TMPTXT$ = "" IF A < 16 THEN APPNAME$ = "GAME: "+ GAMETYPE$(A,0) UNDOBUFFER$(0) = "0" END IF FOR Y = 1 TO 7 FOR X = 1 TO 7 Z = 0 TMPTXT$ = " " IF Y <3 OR Y > 5 THEN IF X >= 3 AND X <= 5 THEN Z = 1 ELSE Z = 1 END IF IF Z = 1 THEN W = W + 1 TMPTXT$ = MID$(GAMETYPE$(A,1), W, 1) GAMEFIELD$(X,Y)= TMPTXT$ IF A<16 AND TMPTXT$="1" THEN MARBLE=MARBLE+1 END IF NEXT X NEXT Y END SUB SUB UNDOADD IF VAL(UNDOBUFFER$(0)) < 99 THEN UNDOBUFFER$(0) = STR$(VAL(UNDOBUFFER$(0))+1) CALL GETBOARD UNDOBUFFER$(VAL(UNDOBUFFER$(0))) = PARAM$ END IF END SUB SUB UNDO IF VAL(UNDOBUFFER$(0)) >= 1 THEN TMPTXT$ = UNDOBUFFER$(VAL(UNDOBUFFER$(0))) UNDOBUFFER$(0) = STR$(VAL(UNDOBUFFER$(0)) - 1) GAMETYPE$(16,1) = TMPTXT$ CALL BOARDSETUP(16) IF VSOUND=1 then PLAY 0,84,5 WAIT 5 END IF ELSE IF VSOUND=1 then PLAY 0,80,5 WAIT 5 END IF END IF END SUB SUB Checkmoves hasmoves=0 getnr=0 HaveMoves=0 For Y = 1 To 7 For X = 1 To 5 getnr=0 Z = 0 If Y <3 Or Y > 5 Then If X = 3 Then Z = 1 Else Z = 1 End If If Z = 1 Then If GAMEFIELD$(x,y)<>"0" Then getnr=getnr+4 If GAMEFIELD$(x+1,y)<>"0" Then getnr=getnr+2 If GAMEFIELD$(x+2,y)<>"0" Then getnr=getnr+1 End If If getnr=6 Or getnr=3 Then hasmoves=hasmoves+1 Next X Next Y For X = 1 To 7 For Y = 1 To 5 getnr=0 Z = 0 If X <3 Or X > 5 Then If Y = 3 Then Z = 1 Else Z = 1 End If If Z = 1 Then If GAMEFIELD$(x,y)<>"0" Then getnr=getnr+4 If GAMEFIELD$(x,y+1)<>"0" Then getnr=getnr+2 If GAMEFIELD$(x,y+2)<>"0" Then getnr=getnr+1 End If If getnr=6 Or getnr=3 Then hasmoves=hasmoves+1 Next Y Next X If hasmoves>0 Then HaveMoves=1 End Sub #1:MAIN PALETTES 06152A3F0038340000002A15000C0800 003F3C00002C0C003026220000302000 #2:MAIN CHARACTERS 00000000000000000000000000000000 0000000000000000007F7F7F7F7F7F7F 000000000000000000FEFEFEFEFEFEFE 0000000003070F0F007F7F7F7C797377 00000000C0E0F0F000FEFEFE3E9ECEEE 000003070F1F1E1C007F7C7B776C696B 0000C0E0F0F8783800FE3EDEEE3696D6 FF80808080808080007F7F7F7F7F7F7F FF0000000000000000FFFFFFFFFFFFFF FF0101010101010100FFFFFFFFFFFFFF FF10101010303F300000000000000000 80C060202060C0F80000000000000000 0000000000007CC60000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000007F7F7F7F7F7F7F00 0000000000000000FEFEFEFEFEFEFE00 0F0F0703000000007773797C7F7F7F00 F0F0E0C000000000EECE9E3EFEFEFE00 1C1E1F0F070300006B696C777B7C7F00 3878F8F0E0C00000D69636EEDE3EFE00 80808080808080FF7F7F7F7F7F7F7FFF 00000000000000FFFFFFFFFFFFFFFFFF 01010101010101FFFFFFFFFFFFFFFFFF 21616141C18000000000000000000000 9C0CF8008CF000030000000000000000 8286CE7E040C18F00000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 1F7FE1C060301C060000000000000000 008080800000000F0000000000000000 000000000C0602820000000000000000 00000002020000020000000000000000 0000001030FC20200000000000000000 000000000000003E0000000000000000 00000000404000000000000000000000 0000000000006E7A0000000000000000 000000000000003E0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0203038387CE7E3C0000000000000000 183020202020301F0000000000000000 C2422224242466C30000000000000000 0604040C081858980000000000000000 2020604060301E000000000000000000 6242428282C37F010000000000000000 4040404060203E000000000000000000 736060606040C0800000000000000000 22427E406020390E0000000000000000 00000000000000000000000000000000 00181C1C1C0C180C00000404040C000C 006C7E36120000000000121212000000 00247E3F367E3F120000001B12001B12 00083E3F1E3F1F040000000710011704 0062753A142E57230000113204081123 001C3E3A7E773A1D00000A021013001D 00181C3C180000000000040C18000000 000C1E3C38180C060000060C08000006 0030180C0E1E3C180000000002060C18 0000241A7E3F2C120000000200270812 0000181C7E3F1C0C000000040027040C 00000000181C3C180000000000040C18 000000007E3F000000000000003F0000 0000000000181C0C000000000000040C 00060F1E3C787020000003060C183020 003C7E7F777F3F1E000018110119031E 00183C1C1C1C7E3F000004040404003F 003C7E3F1E3C7E3F00001833060C003F 003C7E3F06673F1E000018330001031E 0066777F3F0707030000110139010103 007E7F7C3E077F3E00001F003801033E 001C3E7C7E773F1E00000E001811031E 007E3F0F1E3C381800003903060C0818 003C7E3F7E773F1E000018031811031E 003C7E3F1F673F1E000018011901031E 000000180C180C00000000000C000C00 000000180C183C18000000000C000C18 00000C1E3C180C06000000060C000006 0000007E3F7E3F00000000003F003F00 000030180C1E3C180000000000060C18 003C7E3F1E0C180C00001833060C000C 003C7E7F7F773C1E000018111117001E 00183C7E7F7F77330000001801191133 007C7E7F7E777F3E000018031811033E 003C7E7370763F1E000018131010031E 00787C76777F7E3C000010101113063C 007E7F787C707E3F00001F001C10003F 007E7F787C70703000001F001C101030 003C7E7E77773F1E00001E101111031E 0066777F7F7777330000110119111133 003C1E1C1C1C3C1E000006040404001E 001E0F0707673F1E000009010101031E 00667F7E7C7C76330000130604101033 0060707070707E3F000010101010003F 0042677F7F7F77330000010101191133 0066777F7F7777330000010111111133 003C7E7777773F1E000018111111031E 007C7E7F7E707030000018031E101030 003C7E777B7D3E1F000018111111001F 007C7E7F7E7C76330000180306101033 003E7F3C1E077F3E00001F001801033E 007E3F1C1C1C1C0C000027040404040C 0066777777773F1E000011111111031E 00667777773F1E0C000011111103060C 0066777F7F7F73210000110101193121 00663F1E3C7E77330000030600181133 0066773F1E1C1C0C000011030604040C 007E3F1E3C787E3F000033060C18003F 003C3E3838383C1E00000E080808001E 006030180C0603010000000000000101 003C1E0E0E0E3E1E000012020202021E 00183C7E330000000000001833000000 0000000000007E3F000000000000003F #3:MAIN BG 00001410070008000800080009000000 00000000000000000000000000000000 07000800080008000800090017001800 18001800190000000000000000000000 00000000000000001700180018001800 18001900000000000000000400000004 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000