Preparação
Você está em: MarMSX >> Cursos >> Jogos >> Alcatraz
Agora, vamos ver como o jogo prepara os dados e realiza outras funções.
Leitura dos Dados
Os dados são transferidos das instruções DATA para vetores e matrizes, de forma que possam ser acessados diretamente no jogo.
A linha 180 define a função "FN S$(J)", que elimina os dois primeiros caracteres do substantivo.
180 DEFFNS$(J)=MID$(SU$(J),3)
A matriz PO$ recebe os dados do desenho do labirinto. Cada código representa um padrão de desenho. Os padrões são criados por uma sub-rotina descrita mais adiante.
190 DIMPO$(13,11):FORM=2TO11:FORN=0TO13:READPO$(N,M):NEXTN:NEXTM
...
3260 REM ♦ DADOS DO LABIRINTO ♦
3270 DATA 1001,1010,1001,1100,1100,1009,1100,1100,1100,1100,1010,10C1,1100,1010
3280 DATA 0011,0011,0101,1100,1010,0011,1001,1010,1011,1011,0011,0101,1010,0011
3290 DATA 0011,0011,1101,1100,0110,0011,5011,0101,0110,0011,0011,1011,0011,0011
3300 DATA 0011,0011,1001,1000,1010,8011,0001,1100,1100,0010,0011,0011,0011,0011
3310 DATA 0111,0101,0010,0011,0011,0011,0011,1101,1100,0612,0011,0101,0010,0011
3320 DATA 1001,1010,0011,0011,0011,0011,0001,1102,1110,6611,0011,1011,0011,0111
3330 DATA 0011,0011,0111,0011,0101,0110,0101,1340,1111,6611,0011,0101,0100,1010
3340 DATA 0011,0011,1001,7000,1010,1101,1100,0100,1010,6111,0011,1001,1100,0B10
3350 DATA 0011,0011,0011,5011,0101,1100,1100,1110,0011,1001,0110,0011,1001,0110
3360 DATA 0111,0101,0110,0101,1100,1100,1100,1100,0110,01A1,11DA,0110,0101,1110
O vetor SU$ recebe os substantivos, enquanto que NS é valor máximo do vetor de substantivos. O vetor SU$ varia de 0 até NS.
200 NS=34:DIMSU$(NS):FORN=0TONS:READSU$(N):NEXT
...
3380 REM ♦♦♦ SUBSTANTIVOS ♦♦♦
3390 DATA JJCOMIDA,JJTIRAS,JJCORDA,JJCHAVE,DCLENCOL,IGDINHEIRO,AELANTERNA,"E?SERRA",
"D?PILHA",EEFOSFOROS,AGJORNAL,CBCOBERTOR,<GAGUA,AEREVOLVER,<BFITA,>@GRAVADOR,
G@PA,>DOSSO,"D?BARALHO",FAROUPA,GCBEBIDA,CFESPELHO
3400 DATA CCGUARDA,DCCAMA,..GRADES,CBPRESIDIARIO,B@TOMADA,..PORTA,"?EFOGO",ICPOCO,
G>CARCEREIRO,IETERRA,EGCAES,AAALARME,A>LUZ
O vetor VE$ recebe os verbos, enquanto que NV é valor máximo do vetor de verbos. O vetor VE$ varia de 0 até NV.
210 NV=23:DIMVE$(NV):FORN=0TONV:READVE$(N):NEXT
...
3420 REM ♦♦♦ VERBOS ♦♦♦
3430 DATA RASGUE,AMARRE,PUXE,COMA,COLOQUE,LIGUE,CORTE,TIRE,CAVE,DISPARE,VISTA,ENTRE,
PECA,JOGUE,QUEIME,PEGUE,SOLTE,DE,MATE,EXAMINE,AMEACE,QUEBRE,BEBA,ABRA
O vetor AC$ recebe as ações, enquanto que NA é valor máximo do vetor de ações. O vetor AC$ varia de 0 até NA. A variável AS delimita as ações que possuam verbo e substantivo.
220 NA=54:AS=44:DIMAC$(NA):FORN=0TONA:READAC$(N):NEXT
...
3450 REM ♦♦♦ ACOES ♦♦♦
3460 DATA 23,24,26,27,2<,2=,2D,2E,33,34O,34I,34J,44,52,5C,64O,66I,"6:8","6:A",
6<M,6=N,6>N,6@A,6GT,69L,6>S,78,79,7A,86,84,83,8M9,99L,"9:8",9@A,"9:A",":QB",";?",
<E,=O,H>,HF,IJ5,IM
3470 DATA >,?,@,A,B,C,D,E,F,G
Os substantivos, verbos e ações serão descritos no capítulo de interpretador de comandos.
A variável PC indica a coluna, e PL indica a linha da posição atual do personagem. ED é a posição da tabela de nomes na VRAM, utilizada para marcar a posição atual do personagem. Ao final, a tela é toda pintada de azul (cor 5).
230 PC=8:PL=7:ED=6611:COLOR1,5,5:CLS
Desenho dos Padrões do Labirinto
A rotina a seguir desenha (ocultamente) na tela os padrões do labirinto. Essa técnica é descrita na seção de o disparo e as marcas de bala, do capítulo anterior.
240 FORN=0TO14:VPOKE6144+N,15:VPOKE6400+N,15:VPOKE6656+N,15:NEXT
250 FORN=0TO119:READQ$:Q=VAL("&H"+Q$)
260 VPOKEN,Q:VPOKEN+2048,Q:VPOKEN+4096,Q:NEXT
270 FORN=0TO119:READQ$:Q=VAL("&H"+Q$)
280 VPOKEN+8192,Q:VPOKEN+10240,Q:VPOKEN+12288,Q:NEXT
...
3475 ' Tabela de Padrões
3480 DATA 00,00,00,00,00,00,00,00
3490 DATA 01,01,01,FF,10,10,10,FF
3500 DATA 18,18,18,18,18,18,18,18
3510 DATA 18,18,3C,5A,99,18,24,24
3520 DATA 02,02,02,02,3E,3E,22,22
3530 DATA 00,81,FF,FF,02,06,00,00
3540 DATA FF,FF,FF,FF,FF,FF,FF,FF
3550 DATA 08,28,3A,7A,7E,7E,3E,1C
3560 DATA 07,0F,05,07,07,00,00,00
3570 DATA 18,18,18,18,18,18,18,18
3580 DATA 18,3C,7E,FF,E7,C3,C3,C3
3590 DATA 06,0E,1F,7D,DF,F6,BB,EF
3600 DATA 18,18,3C,5A,99,18,24,24
3610 DATA 00,00,00,00,00,00,00,00
3620 DATA 18,18,3C,5A,99,18,24,24
3625 ' Tabela de Cores
3630 DATA 00,00,00,00,00,00,00,00
3640 DATA E6,E6,E6,E6,E6,E6,E6,E6
3650 DATA 10,40,10,40,10,40,10,40
3660 DATA 10,D0,10,10,10,10,10,10
3670 DATA E0,E0,E0,E0,F0,E0,E0,E0
3680 DATA 10,10,10,C0,10,10,10,10
3690 DATA 10,10,10,10,10,10,10,10
3700 DATA 60,60,60,80,80,80,90,90
3710 DATA 10,10,10,10,10,10,10,10
3720 DATA 70,70,70,70,70,70,70,70
3730 DATA 90,D0,80,60,F1,F1,F1,F1
3740 DATA 90,90,90,90,91,91,91,91
3750 DATA 10,D0,F0,F0,F0,F0,F0,F0
3760 DATA 00,00,00,00,00,00,00,00
3770 DATA F0,60,10,F0,10,F0,10,F0
São ao todo 15 objetos e cada linha do DATA representa um desses objetos.
A linha 240 é quem esconde as três linhas dos padrões. Se comentada a linha, os padrões são desenhados na tela.
240 'FORN=0TO14:VPOKE6144+N,15:VPOKE6400+N,15:VPOKE6656+N,15:NEXT
O texto que será digitado pelo jogador começa em uma linha (de caracteres) abaixo da linha dos primeiros padrões desenhados.
A rotina a seguir, prepara essa região da tela para receber os comandos do jogador, pintando a linhas 1 e 2 de branco, uma vez que a tela agora é toda azul.
290 GOSUB1390
...
1380 REM ♦ APAGA 3 LINHAS SUPERIORES ♦
1390 LINE(0,8)-(255,23),15,BF
1400 PSET(0,8),15:RETURN
Bloqueio do CONTROL + STOP
As teclas CONTROL + STOP recebem tratamento, emitindo um som e evitando que o programa seja interrompido.
300 STOPON:ONSTOPGOSUB2990
2990 BEEP:PLAY"V15L1O3E","V15L1O3B":FORE9=0TO2000:NEXT:BEEP
3000 RETURN
Inicio do Jogo
Após toda a preparação, o jogo finalmente começa. A linha 310 desvia o programa para a sub-rotina de desenho do labirinto. Esta, por sua vez, ao terminar, chama a rotina de aguardar o movimento do jogador.
310 GOTO690