Memogame
Um jogo da memória.
Teste o programa no WebMSX – The Online MSX Emulator
Utilize as teclas de cursor para movimentar e espaço para selecionar a figura desejada.
Autor: Francisco Pires N. de Souza
Contribuição: Adriano Camargos Rodrigues da Cunha
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
10 ''''''''''''''''''''''''''''''''''''' ' ' ' MEMOGAME-O JOGO DA MEM•RIA ' ' por Francisco Pires N. de Souza ' ' em:Novembro de 1988 ' ''''''''''''''''''''''''''''''''''''' 20 ' ##### SPRITES ##### 30 ' 40 DEFINT A-Z:COLOR 15,1,1:SCREEN 2,1,0:OPEN"GRP:" AS #1 50 FOR F=0 TO 15:FOR S=1 TO 8:READ A$:S$=S$+CHR$(VAL("&B"+A$)):NEXT S:SPRITE$(F)=S$:S$="":NEXT F 60 ' 70 ' ##### TELA DE ABERTURA ##### 80 ' 90 SCREEN 2:ON STRIG GOSUB 200,200:STRIG(0) ON:STRIG(1) ON 100 C1=11:A$="MEMOGAME":X=75:Y=20:DI=12:GOSUB 2410 110 C1=7:A$="CRIADO POR FRANCISCO PIRES":X=35:Y=70:DI=7:GOSUB 2410 120 C1=15:A$="NOVEMBRO DE 1988":X=67:Y=95:DI=7:GOSUB 2410 130 C1=3:A$="FRAP SOFT 1988":X=70:Y=170:DI=7:GOSUB 2410 140 FOR F=0 TO 13:PUT SPRITE 0,(45,7),INT(RND(-TIME)*13)+2,F:PUT SPRITE 1,(180,7),INT(RND(-TIME)*13)+2,F:PUT SPRITE 1,(180,7),INT(RND(-TIME)*13)+2,F:FOR TE=1 TO 600:NEXT TE,F 150 GOTO 140 160 GOTO 160 170 ' 180 ' ##### TELA PRINCIPAL ##### 190 ' 200 PLAY"V10T50":DEFUSR=&H41:A=USR(0):PUT SPRITE 0,(0,0),0,100:PUT SPRITE 1,(0,0),0,100:STRIG(0) OFF:STRIG(1) OFF:CLS 210 FOR G=0 TO 180 STEP 28:FOR F=40 TO 130 STEP 28:LINE(F,G)-(F+24,G+24),10,B:NEXT F,G 220 FOR G=0 TO 180 STEP 28:FOR F=40 TO 130 STEP 28:LINE(F+2,G+2)-(F+22,G+22),10,B:NEXT F,G 230 C1=15:A$="MEMOGAME":X=170:Y=18:DI=8:GOSUB 2410 240 C1=15:A$="MEMOGAME":X=171:Y=18:DI=8:GOSUB 2410 250 C=0:FOR A=3 TO 175 STEP 28:FOR B=45 TO 140 STEP 28:PUT SPRITE C,(B,A),7,14:C=C+1:NEXT B,A:DEFUSR=&H44:A=USR(0) 260 LINE(200,46)-(202,136),15,BF 270 LINE(198,44)-(204,138),14,BF 280 DRAW"C15BM187,50U5 BR2R3D5L3U5 BM188,93R3U3L3U2R3 BM188,138U5R3D5L3" 290 FOR F=47 TO 135 STEP 3:LINE(195,F)-(196,F),15:NEXT 300 C1=7:A$="FRAP SOFT":X=171:Y=189:DI=7:GOSUB 2410 310 ' 320 ' ##### EMBARALHA ##### 330 ' 340 DIM LL(27),CO(13),SE(30,27),J(30),K(30),CM(28),JA(27):AC=0 350 FOR F=0 TO 27:JA(F)=99:NEXT 360 RESTORE 2140:FOR F=0 TO 7:FOR G=0 TO 27:READ SE(F,G):NEXT G,F 370 DS=INT(RND(-TIME)*8) 380 FOR F=0 TO 27:LL(F)=SE(DS,F):NEXT F 390 CO(0)=4:CO(1)=8:CO(2)=11:CO(3)=14:CO(4)=10:CO(5)=9:CO(6)=2:CO(7)=7:CO(8)=13:CO(9)=3:CO(10)=15:CO(11)=12:CO(12)=5:CO(13)=6 400 FOR F=0 TO 27:IF LL(F)=>14 THEN LL(F)=LL(F)-14 410 NEXT 420 CA=0:FOR F=4 TO 172 STEP 28:FOR G=44 TO 155 STEP 28:J(CA)=G:K(CA)=F:PUT SPRITE CM(CA),(G,F),CO(LL(CA)),LL(CA):CA=CA+1:CM(CA)=CA:NEXT G,F 430 FOR TE=1 TO 200:NEXT TE 440 C=0:FOR A=3 TO 175 STEP 28:FOR B=45 TO 140 STEP 28:PUT SPRITE C,(B,A),7,14:C=C+1:NEXT B,A 450 ' 460 ' ##### MOVIMENTA€°O ##### 470 ' 480 A=44:B=-11:JO=0:CP=15:TT=0:SH=46 490 ON STRIG GOSUB 610,610:STRIG(0) ON:STRIG(1) ON 500 FOR TE=1 TO 25:NEXT TE 510 PUT SPRITE 28,(A,B),CP,15:PUT SPRITE 29,(A,B+21),CP,15 520 ST=STICK(0):S1=STICK(1):B=B-(28 AND ST=1AND B>-11)+(28 AND ST=5 AND B<150) 530 B=B-(28 AND S1=1 AND B>-11)+(28 AND S1=5 AND B<150) 540 A=A-(28 AND ST=7 AND A>44)+(28 AND ST=3 AND A<120) 550 A=A-(28 AND S1=7 AND A>44)+(28 AND S1=3 AND A<120) 560 FOR TE=1 TO 25:NEXT TE 570 PUT SPRITE 28,(A,B),5,15:PUT SPRITE 29,(A,B+21),5,15 580 IF AC=14 THEN 2320 590 TT=TT+1:IF TT=>11 THEN LINE(200,SH)-(202,SH+1),1,BF:SH=SH+2:TT=0:IF SH=138 THEN 2850 600 GOTO 500 610 IF AC<>0 THEN GOSUB 2230:FOR F=0 TO AC:IF LL(P)=JA(F) THEN PLAY"O2L40A":RETURN 490 ELSE NEXT F 620 IF JO=0 THEN JO=1:CP=8:PLAY"L64O7AD":GOSUB 2230:PUT SPRITE CM(P),(J(P),K(P)),CO(LL(P)),LL(P):FI=LL(P):X=A:Y=B+15:UP=P:RETURN 630 GOSUB 2230:IF J(P)=X AND K(P)=Y THEN BEEP:RETURN 500 640 CP=15:JO=0:PLAY"L64O7AD":PUT SPRITE CM(P),(J(P),K(P)),CO(LL(P)),LL(P):IF LL(P)=FI THEN GOSUB 2260:AC=AC+1 ELSE PLAY"L20O2C":FOR TE=1 TO 500:NEXT TE:PUT SPRITE CM(UP),(J(UP),K(UP)),7,14:PUT SPRITE CM(P),(J(P),K(P)),7,14:CP=15:RETURN 490 650 ' 660 ' ##### DATA P/ SPRITES ##### 670 ' 680 DATA 00000000 690 DATA 00000000 700 DATA 10000000 710 DATA 11000000 720 DATA 11111110 730 DATA 11111111 740 DATA 00000000 750 DATA 00000000 760 ' 770 DATA 00000000 780 DATA 01101100 790 DATA 11111110 800 DATA 11111110 810 DATA 01111100 820 DATA 00111000 830 DATA 00010000 840 DATA 00000000 850 ' 860 DATA 00000000 870 DATA 00111100 880 DATA 01110110 890 DATA 11111111 900 DATA 11111000 910 DATA 01111110 920 DATA 00111100 930 DATA 00000000 940 ' 950 DATA 11000011 960 DATA 01100110 970 DATA 00111100 980 DATA 00011000 990 DATA 00111100 1000 DATA 01100110 1010 DATA 11000011 1020 DATA 00000000 1030 ' 1040 DATA 11011111 1050 DATA 11011111 1060 DATA 11000000 1070 DATA 11011110 1080 DATA 11011110 1090 DATA 11000000 1100 DATA 11000000 1110 DATA 11000000 1120 ' 1130 DATA 00011000 1140 DATA 00011000 1150 DATA 00011000 1160 DATA 11111111 1170 DATA 11111111 1180 DATA 00011000 1190 DATA 00011000 1200 DATA 00011000 1210 ' 1220 DATA 00010000 1230 DATA 01010100 1240 DATA 00111000 1250 DATA 11111110 1260 DATA 00111000 1270 DATA 01010100 1280 DATA 00010000 1290 DATA 00000000 1300 ' 1310 DATA 00111110 1320 DATA 01111111 1330 DATA 01011011 1340 DATA 01001001 1350 DATA 01111111 1360 DATA 01111111 1370 DATA 01010101 1380 DATA 00000000 1390 ' 1400 DATA 00001100 1410 DATA 00011000 1420 DATA 00110000 1430 DATA 01111111 1440 DATA 00000110 1450 DATA 00001100 1460 DATA 00011000 1470 DATA 00110000 1480 ' 1490 DATA 11111111 1500 DATA 10000001 1510 DATA 10000001 1520 DATA 11111111 1530 DATA 00100100 1540 DATA 01000010 1550 DATA 11111111 1560 DATA 11111111 1570 ' 1580 DATA 00111100 1590 DATA 00100100 1600 DATA 00111100 1610 DATA 11111111 1620 DATA 11000011 1630 DATA 10100101 1640 DATA 00100100 1650 DATA 01100110 1660 ' 1670 DATA 00111100 1680 DATA 01111110 1690 DATA 11111111 1700 DATA 01111110 1710 DATA 00111100 1720 DATA 00011000 1730 DATA 00011000 1740 DATA 00111100 1750 ' 1760 DATA 00010000 1770 DATA 00111000 1780 DATA 01111100 1790 DATA 11111110 1800 DATA 01111100 1810 DATA 00111000 1820 DATA 00010000 1830 DATA 00000000 1840 ' 1850 DATA 11011111 1860 DATA 11011111 1870 DATA 11011000 1880 DATA 11111111 1890 DATA 11111111 1900 DATA 00011011 1910 DATA 11111011 1920 DATA 11111011 1930 ' 1940 DATA 10010010 1950 DATA 00100100 1960 DATA 01001001 1970 DATA 10010010 1980 DATA 00100100 1990 DATA 01001001 2000 DATA 10010010 2010 DATA 00100100 2020 ' 2030 DATA 00000000 2040 DATA 00000000 2050 DATA 00000000 2060 DATA 00000000 2070 DATA 00000000 2080 DATA 11111111 2090 DATA 11111111 2100 DATA 00000000 2110 ' 2120 ' ##### DATA P/ EMBARALHAR ##### 2130 ' 2140 DATA 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 2150 DATA 27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 2160 DATA 8,6,5,4,3,9,23,17,7,27,12,10,0,22,26,21,11,1,15,24,2,13,14,25,16,18,19,20 2170 DATA 0,2,4,6,8,10,12,14,16,18,20,22,24,26,1,3,5,7,9,11,13,15,17,19,21,23,25,27 2180 DATA 1,3,5,7,9,11,13,15,17,19,21,23,25,27,0,2,4,6,8,10,12,14,16,18,20,22,24,26 2190 DATA 0,10,20,1,11,21,2,12,22,3,13,23,4,14,24,5,15,25,6,16,26,7,17,27,8,19,9,19 2200 DATA 2,11,12,6,15,13,5,8,22,23,1,9,0,21,27,24,3,4,19,7,10,20,25,26,14,16,18,17 2210 DATA 5,4,3,2,1,0,10,9,7,6,8,15,13,12,11,14,20,16,19,18,17,27,21,24,23,22,26,25 2220 ' 2230 ' ##### VERIFICA SPRITE ##### 2240 ' 2250 FOR P=0 TO 27:IF A=J(P) AND B+15=K(P) THEN RETURN ELSE NEXT P 2260 ' 2270 ' ##### ACERTOU UM PAR ##### 2280 ' 2290 PLAY"L60O5CDEDCDE":JA(AC)=LL(P) 2300 RETURN 2310 ' 2320 ' ##### VENCE O JOGO ##### 2330 ' 2340 PLAY"V12L64O5CDCDCDCDCDCDO6CDCDCDCDCDCDO7CDCDCDCDCDCDCDCDCDO5C." 2350 GOTO 2880 2360 GOTO 2360 2370 'C1=COR:A$=PALAVRA:X=COLUNA:Y=LINHA:DI=DISTŒNCIA ENTRE LETRAS:LOCATE DA ROTINE:GOSUB 22300 2380 ' 2390 ' 2400 GOTO 2400 2401 ' 2402 ' ##### IMPRIME CARACTERES ##### 2403 ' 2410 FOR L=1 TO LEN(A$):W=(ASC(MID$(A$,L,1))-64):IF W=-32 THEN W=27 2420 IF W=>-16 AND W<=-7 THEN W=28+(W+16) 2430 COLOR C1 2440 ON W GOSUB 2470,2480,2490,2500,2510,2520,2530,2540,2550,2560,2570,2580,2590,2600,2610,2620,2630,2640,2650,2660,2670,2680,2690,2700,2710,2720,2730,2740,2750,2760,2770,2780,2790,2800,2810,2820,2830 2450 X=X+DI:NEXT L:RETURN 2460 GOTO 2460 2470 PRESET(X,Y),C1:DRAW"U8R5D8U4L5":RETURN ' "A" 2480 PRESET(X,Y),C1:DRAW"U8R5D3G1NL3F1D3L5":RETURN ' "B" 2490 PRESET(X+5,Y),C1:DRAW"L5U8R5":RETURN ' "C" 2500 PRESET(X,Y),C1:DRAW"U8R3F2D4G2L3":RETURN ' "D" 2510 PRESET(X+5,Y),C1:DRAW"L5U8NR5D4R4":RETURN ' "E" 2520 PRESET(X,Y),C1:DRAW"U8NR5D4R4":RETURN ' "F" 2530 PRESET(X+5,Y-8),C1:DRAW"L5D8R5U4L3":RETURN ' "G" 2540 PRESET(X,Y),C1:DRAW"U8D4R5U4D8":RETURN ' "H" 2550 PRESET(X+2,Y),C1:DRAW"U8":RETURN ' "I" 2560 PRESET(X,Y-3),C1:DRAW"D3R5U8":RETURN ' "J" 2570 PRESET(X,Y):DRAW"U8D4NE4BU1F5":RETURN ' "K" 2580 PRESET(X+5,Y),C1:DRAW"L5U8":RETURN ' "L" 2590 PRESET(X,Y),C1:DRAW"U8F2R1E2D8":RETURN ' "M" 2600 PRESET(X,Y),C1:DRAW"U8R2D4R1D4R2U8":RETURN ' "N" 2610 PRESET(X,Y),C1:DRAW"U8R5D8L5":RETURN ' "O" 2620 PRESET(X,Y),C1:DRAW"U8R5D4L5":RETURN ' "P" 2630 PRESET(X,Y),C1:DRAW"U8R5D8L5BE2F3":RETURN ' "Q" 2640 PRESET(X,Y),C1:DRAW"U8R5D4L5R3D3R1D1R1":RETURN '"R" 2650 PRESET(X,Y),C1:DRAW"R5U4L5U4R5":RETURN:' "S" 2660 PRESET(X+3,Y),C1:DRAW"U8L2R4":RETURN ' "T" 2670 PRESET(X,Y-8),C1:DRAW"D8R5U8":RETUR ' "U" 2680 PRESET(X,Y-8),C1:DRAW"D4R1D4R3U4R1U4":RETURN ' "V" 2690 PRESET(X,Y-8),C1:DRAW"D8E2R1F2U8":RETURN ' "W" 2700 PRESET(X,Y-8),C1:DRAW"D1F5D2BL5U2E5U1":RETURN ' "X" 2710 PRESET(X,Y-8),C1:DRAW"D3R5NU3L3D5":RETURN ' "Y" 2720 PRESET(X,Y-8),C1:DRAW"R5D1G5D2R5":RETURN ' "Z" 2730 RETURN ' ø SPACE ¿ 2740 PRESET(X,Y),C1:DRAW"U8R5D8L5U1E5":RETURN ' "0" 2750 PRESET(X+3,Y),C1:DRAW"U8NL2D8R2L4":RETURN ' "1" 2760 PRESET(X+5,Y),C1:DRAW"l5u4r5u4l5":RETURN ' "2" 2770 PRESET(X,Y),C1:DRAW"r5u4l3u1r3u3l5":RETURN ' "3" 2780 PRESET(X,Y-8),C1:DRAW"d4r5u4d8":RETURN ' "4" 2790 PRESET(X,Y),C1:DRAW"r5u4l5u4r5":RETURN ' "5" 2800 PRESET(X+5,Y-8),C1:DRAW"l5d8r5u4l5":RETURN ' "6" 2810 PRESET(X,Y-8),C1:DRAW"r5g2g3d3":RETURN ' "7" 2820 PRESET(X,Y),C1:DRAW"R5U4L5ND4U4R5D4":RETURN ' "8" 2830 PRESET(X+5,Y),C1:DRAW"U8L5D4R5":RETURN:' "9" 2840 ' 2850 ' ##### TERMINA TEMPO ##### 2860 ' 2870 STRIG(0) OFF:STRIG(1) OFF:PLAY"V15O2L20CCCCCCC":CA=0:FOR F=4 TO 172 STEP 28:FOR G=44 TO 155 STEP 28:J(CA)=G::K(CA)=F:PUT SPRITE CM(CA),(G,F),CO(LL(CA)),LL(CA):CA=CA+1:CM(CA)=CA:NEXT G,F 2880 PUT SPRITE 29,(0,0),0,100:PUT SPRITE 28,(0,0),0,100:ERASE LL,CO,SE,J,K,CM,JA 2890 C1=10:A$="CAPACIDADE":X=165:Y=160:DI=7:GOSUB 2410:LINE(X+1,Y-1)-(X+2,Y-2),10,BF:LINE(X+1,Y-5)-(X+2,Y-6),10,BF 2900 RE=INT((AC*100)/14):A$=STR$(RE):C1=9:X=185:Y=172:DI=7:GOSUB 2410:LINE(X+1,Y)-(X+6,Y-6),9:LINE(X+6,Y)-(X+7,Y+1),9,BF:LINE(X+1,Y-6)-(X+2,Y-7),9,BF 2910 ON STRIG GOSUB 200,200:STRIG(0) ON:STRIG(1) ON 2920 FOR TE=1 TO 5000:NEXT TE:GOTO 90 |