Labirinto
Um Jogo Tridimensional. Este é um jogo passado em um labirinto tridimensional no qual você tem uma vista em perspectiva do espaço à sua volta.
Teste o programa no WebMSX – The Online MSX Emulator
O objetivo é encontrar rapidamente a saída. Se conseguir o seu intento, escapará do louco que habita o labirinto. Se não, ele pegará você!
A figura que aparece na tela mostra apenas uma parte do labirinto. Uma seta indica a direção para a qual você está voltado no momento. Para mudar de direção, use as teclas de controle do cursor da direita e da esquerda. A tecla de cima faz você dar um passo à frente cada vez que é apertada. A tecla de baixo faz você recuar um passo, sem mudar de direção. Os movimentos também podem ser controlados através de um joystick.
Depois que você consegue chegar ao final do labirinto, o limite de tempo é reduzido e o jogo começa de novo.
O jogo utiliza uma técnica sofisticada, baseada nos ponteiros de cores do MSX, para conseguir uma mudança rápida das imagens. Vale a pena estudar esta técnica com atenção, pois você poderá usá-la para conseguir efeitos de alta velocidade em seus próprios programas.
Fonte: Livro de Jogos em MSX
Editora: Lutécia
Autor: Jim Gregory (livro) – Bootsy (programa)
Ano: 1985
Digitação: Wilson e Willian Pilon – MSX Typer
Código fonte
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 |
1000 REM <<<< LABIRINTO - BOOTSY >>>> 1010 REM 1020 SCREEN 1,,0:CLEAR 500,&HEEFF 1030 DEFUSR=&HEF00:KEY OFF:WIDTH 32 1040 ON INTERVAL=50 GOSUB 1230 1050 DIM S$(11),C$(13),W%(18,2,1),M%(9,9),MT%(9,9):TT%=400 1060 LOCATE 13,11:PRINT "ESPERE":GOSUB 2040 1070 GOSUB 1760:GOSUB 1180:INTERVAL ON 1080 GOSUB 1430 1090 I$=INKEY$:FOR I%=0 TO 2 1100 IP%=STICK(I%):IF IP% THEN I%=2 1110 NEXT I%:IF IP%=0 THEN 1090 1120 IF IP%=1 AND M%(X%,Y%)=2 THEN GOTO 1320 1130 IF IP%=1 AND Y%<9 THEN IF M%(X%,Y%+1)>0 THEN Y%=Y%+1:GOSUB 1180 1140 IF IP%=5 AND Y%>0 THEN IF M%(X%,Y%-1)>0 THEN Y%=Y%-1:GOSUB 1180 1150 IF IP%=3 THEN SP%=(SP%+1) AND 3:GOSUB 1180:GOSUB 1560 1160 IF IP%=7 THEN SP%=(SP%-1) AND 3:GOSUB 1180:GOSUB 1610 1170 GOTO 1080 1180 IF IP%=3 OR IP%=7 THEN 1210 1190 XS%=XS%+(3 AND (IP%=1 AND SP%=1 OR IP%=5 AND SP%=3))-(3 AND (IP%=5 AND SP%=1 OR IP%=1 AND SP%=3)) 1200 YS%=YS%+(3 AND (IP%=1 AND SP%=2 OR IP%=5 AND SP%=0))-(3 AND (IP%=5 AND SP%=2 OR IP%=1 AND SP%=0)) 1210 PUT SPRITE 0,(XS%,YS%),4,SP%:RETURN 1220 REM <<<< RELOGIO >>>> 1230 TM%=TM%+1:LOCATE 23,22:PRINT USING "####";TM% 1240 IF TM%<TT% THEN RETURN 1250 REM <<<< FIM DO JOGO >>>> 1260 INTERVAL OFF 1270 CLS:LOCATE 9,11 1280 PRINT "TARDE DEMAIS!" 1290 LOCATE 6,13:PRINT "O LOUCO PEGOU VOCE!" 1300 RETURN 1380 1310 REM <<<< SA‰DA >>>> 1320 CLS:INTERVAL OFF:COLOR 15 1330 LOCATE 11,11:PRINT "MUITO BEM!":PRINT 1340 PRINT " CONSEGUIU SAIR DO LABIRINTO!" 1350 LOCATE 5,15 1360 PRINT "VOCE LEVOU";TM%;"SEGUNDOS" 1370 IF TM%<TT% THEN TT%=TM% 1380 PUT SPRITE 0,(128,208),4,0 1390 LOCATE 3,20: PRINT "QUER JOGAR DE NOVO (S/N)?" 1400 A$=INPUT$(1):IF A$="S" OR A$="s" THEN GOTO 1070 1410 IF A$="N" OR A$="n" THEN SCREEN 0:COLOR 15,4,4:STOP ELSE 1390 1420 REM <<<< GERAR PERSPECTIVA >>>> 1430 FOR W%=2 TO 0 STEP -1:V%=Y%+3-W% 1440 IF V%=10 THEN GOSUB 1690:K%=W%:W%=0 1450 IF V%<10 THEN IF M%(X%,V%)=0 THEN GOSUB 1690:K%=W%:W%=0 1460 NEXT W%:O%=0:IF M%(X%,Y%+2-K%)=2 THEN O%=1:W%=K%:GOSUB 1690 1470 IF X%=9 THEN FOR D%=3 TO 1+K% STEP -1:OC%=0:GOSUB 1710:NEXT D%:GOTO 1510 1480 V%=0:FOR D%=3 TO 1+K% STEP -1:OC%=0 1490 IF M%(X%+1,Y%+V%)>0 THEN OC%=1 1500 GOSUB 1710:V%=V%+1:NEXT D% 1510 IF X%=0 THEN FOR D%=6 TO 4+K% STEP -1:OC%=0:GOSUB 1710:NEXT D%:GOTO 1540 1520 V%=0:FOR D%=6 TO 4+K% STEP -1:OC%=0:IF M%(X%-1,Y%+V%)>0 THEN OC%=1 1530 GOSUB 1710:V%=V%+1:NEXT D% 1540 RETURN 1550 REM <<<< VIRAR A DIREITA >>>> 1560 FOR I%=0 TO 9:FOR J%=0 TO 9 1570 MT%(J%,I%)=M%(I%,9-J%) 1580 NEXT J%,I% 1590 SWAP X%,Y%:X%=9-X%:GOTO 1650 1600 REM <<<< VIRAR A ESQUERDA >>>> 1610 FOR I%=0 TO 9:FOR J%=0 TO 9 1620 MT%(J%,9-I%)=M%(I%,J%) 1630 NEXT J%,I% 1640 SWAP X%,Y%:Y%=9-Y% 1650 FOR I%=0 TO 9:FOR J%=0 TO 9 1660 M%(J%,I%)=MT%(J%,I%) 1670 NEXT J%,I%:RETURN 1680 REM <<<< DESENHAR PAREDE >>>> 1690 A=USR(VARPTR(W%(0,W%,O%))):RETURN 1700 REM <<<< DESENHAR PORTA >>>> 1710 C1%=0:C2%=128-(32 AND(D%=2 OR D%=5)) 1720 I%=8204+D%:J%=8210+D% 1730 IF OC% THEN VPOKE I%,C1%:VPOKE J%,C2% ELSE C1%=144:C2%=C1%:OC%=1:GOTO 1730 1740 RETURN 1750 REM <<<< TELA >>>> 1760 RESTORE 2510:O%=0:SP%=1:TM%=0:XS%=113:YS%=156 1770 FOR I%=0 TO 9:FOR J%=0 TO 9 1780 READ M%(I%,J%) 1790 NEXT J%,I%:X%=0:Y%=0 1800 COLOR 0,0,0:CLS 1810 RESTORE 2620 1820 GOSUB 2010:FOR I%=0 TO 11 1830 LOCATE 0,I%:FOR J%=1 TO 16 1840 K%=ASC(MID$(S$(I%),J%,1)) 1850 PRINT C$(K%);:NEXT J%,I% 1860 GOSUB 2010:FOR I%=0 TO 11 1870 LOCATE 16,I%:FOR J%=16 TO 1 STEP -1 1880 K%=ASC(MID$(S$(I%),J%,1)) 1890 PRINT C$(K%);:NEXT J%,I% 1900 GOSUB 2010:FOR I%=11 TO 0 STEP -1 1910 LOCATE 0,23-I%:FOR J%=1 TO 16 1920 K%=ASC(MID$(S$(I%),J%,1)) 1930 PRINT C$(K%);:NEXT J%,I% 1940 GOSUB 2010:FOR I%=11 TO 0 STEP -1 1950 LOCATE 16,23-I%:FOR J%=16 TO 1 STEP -1 1960 K%=ASC(MID$(S$(I%),J%,1)) 1970 PRINT C$(K%);:NEXT J%,I% 1980 LOCATE 5,21:COLOR 15:PRINT "LIMITE" TAB(23) "TEMPO" 1990 PRINT TAB(6);TT% 2000 RETURN 2010 FOR I%=1 TO 13:READ K%:C$(I%)=CHR$(K%):NEXT I% 2020 RETURN 2030 REM <<<< DEFINIR FORMAS >>>> 2040 FOR I%=832 TO 1984 STEP 64 2050 FOR J%=0 TO 7 2060 K%=256-2^(7-J%):L%=2^(J%+1)-1 2070 M%=2^(8-J%)-1:N%=256-2^J% 2080 VPOKE I%+J%,255:VPOKE I%+J%+8,K% 2090 VPOKE I%+J%+16,L%:VPOKE I%+J%+24,M% 2100 VPOKE I%+J%+32,N%:VPOKE I%+J%+40,0 2110 NEXT J%,I% 2120 FOR I%=0 TO 11:FOR J%=1 TO 16 2130 READ K%:S$(I%)=S$(I%)+CHR$(K%) 2140 NEXT J%,I% 2150 FOR I%=0 TO 1:FOR J%=0 TO 2:FOR K%=0 TO 18 2160 READ W%(K%,J%,I%):NEXT K%,J%,I% 2170 FOR I%=0 TO 3:S$="":FOR J%=0 TO 7 2180 READ K%:S$=S$+CHR$(K%):NEXT J% 2190 SPRITE$(I%)=S$:NEXT I% 2200 I%=&HEF00 2210 READ H$:IF H$="x" THEN RETURN 2220 POKE I%,VAL("&H"+H$) 2230 I%=I%+1:GOTO 2210 2240 REM <<<< DADOS >>>> 2250 DATA 8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 2260 DATA 9,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1 2270 DATA 9,9,8,1,1,1,1,1,1,1,1,1,1,1,1,1 2280 DATA 9,9,9,8,1,1,1,1,1,1,1,1,1,1,1,1 2290 DATA 5,5,5,5,10,2,2,2,2,2,2,2,2,2,2,2 2300 DATA 5,5,5,5,11,10,2,2,2,2,2,2,2,2,2,2 2310 DATA 5,5,5,5,11,11,10,2,2,2,2,2,2,2,2,2 2320 DATA 5,5,5,5,6,6,6,12,3,3,3,3,3,3,3,3 2330 DATA 5,5,5,5,6,6,6,13,12,3,3,3,3,3,3,3 2340 DATA 5,5,5,5,6,6,6,7,7,4,4,4,4,4,4,4 2350 DATA 5,5,5,5,6,6,6,7,7,4,4,4,4,4,4,4 2360 DATA 5,5,5,5,6,6,6,7,7,4,4,4,4,4,4,4 2370 DATA 144,144,144,144,144,144,144,144,144,144,144,144,0,0,0,0,0,0,96 2380 DATA 102,144,144,102,144,144,96,144,144,96,144,144,6,0,0,6,0,0,96 2390 DATA 102,102,144,102,102,144,96,96,144,96,96,144,6,6,0,6,6,0,96 2400 DATA 144,144,144,144,144,144,144,144,144,144,144,144,0,0,0,0,0,0,0 2410 DATA 0,144,144,0,144,144,0,144,144,0,144,144,0,0,0,0,0,0,0 2420 DATA 0,0,144,0,0,144,0,0,144,0,0,144,0,0,0,0,0,0,0 2430 REM <<<< SETA >>>> 2440 DATA 16,56,68,130,16,16,16,16 2450 DATA 8,4,2,255,2,4,8,0 2460 DATA 16,16,16,16,130,68,56,16 2470 DATA 16,32,64,255,64,32,16,0 2480 REM <<<< PROGRAMA >>>> 2490 DATA 23,23,5E,23,56,21,D,20,CD,53,0,E3,E3,EB,6,13,7E,D3,98,23,23,10,F9,C9,x 2500 REM <<<< LABIRINTO >>>> 2510 DATA 1,1,1,0,1,1,1,0,1,1 2520 DATA 1,0,1,1,1,0,1,1,1,0 2530 DATA 1,1,0,1,0,1,1,0,1,1 2540 DATA 0,1,0,1,1,1,0,0,0,1 2550 DATA 1,1,1,0,0,0,1,1,1,0 2560 DATA 0,0,1,0,1,1,1,0,1,0 2570 DATA 1,1,1,0,0,1,0,1,1,1 2580 DATA 1,0,0,1,1,1,0,1,0,1 2590 DATA 1,1,1,0,1,0,1,1,1,0 2600 DATA 0,0,1,1,1,0,1,0,1,2 2610 REM <<<< CARACTERES GRAFICOS >>>> 2620 DATA 245,237,229,248,192,184,176,145,144,137,136,129,128 2630 DATA 245,237,229,248,168,160,152,122,120,114,112,106,104 2640 DATA 221,213,205,248,192,184,176,148,144,140,136,132,128 2650 DATA 221,213,205,248,168,160,152,123,120,115,112,107,104 |