Obrigado a Julio Marchi pelo espaço cedido na MSX All |
||
English Inicializações gerais e variáveis do jogo 10A declaração "MAXFILES=2" é necessária para usar o comando OPEN #2 para abrir o arquivo de recordes, uma vez que o #1 está sendo usado para escrever no modo gráfico. A linha 10 é executada apenas uma vez no programa. Assim, aproveitamos para chamar no inicio da execução a sub-rotina que lê os recordes do arquivo (GOSUB 2100) e armazena os dados em dois vetores. 2100 ' Le recordes do arquivo 2110 OPEN"balao.dat"FOR INPUT AS #2 2120 DIM HI(5) : DIM NO$(5) 2130 FOR I=1 TO 5 2140 INPUT #2, NO$(I) 2150 INPUT #2, A$: HI(I)=VAL(A$) 2160 NEXT 2170 CLOSE 2A linha 15 foi introduzida, de forma que ao término do jogo fosse possível retornar ao menu principal. A variável DR é utilizada como flag para indicar se a tela atual já foi desenhada na página 1. O modo de tela passa a ser screen 5, que possui significantes melhorias em relação à screen 2. Desenho do balão 40 RESTORE:A$="":FORF=0TO7:READD$:A$=A$+CHR$(VAL("&B"+D$)):NEXTF:SPRITE$(0)=A$A linha 45 cria um padrão de cores para cada linha do sprite (sprite modo 2). Cada valor dentro da instrução CHR$(n) corresponde ao código da cor de uma linha. O balão foi alargado um pouco. Sub-rotinas para desenho das telas 130 ' ** TELA ** 140 TIME=0A linha 144 esconde o balão enquanto a tela é desenhada. Se a tela atual já foi desenhada na pagina 1, apenas copia da tela 1 para 0 (pula para a linha 185). Senão, apaga a página 0 e escreve uma mensagem "Tela n" para o jogador, enquanto a tela está sendo desenhada em "background" na página 1. O comando SET PAGE 0,1 indica que a página visível é a zero e que a página de uso (ou desenho) é a página 1. Quando termina o desenho, chama a sub-rotina de copia de tela em 2000. 2000 ' Animacao de entrada da tela 2010 FOR Y1=0 TO 7:FOR Y2=0 TO 211 STEP 8 2020 COPY(0,Y1+Y2)-(255,Y1+Y2),1 TO (0,Y1+Y2),0 2030 NEXT Y2,Y1 2040 RETURN Mudanças nas sub-rotinas de tela O fundo do cenário foi modificado para azul em todas as telas. Primeiro, a área útil da tela é delimitada. Depois, pinta-se de azul 7 a tela, com restrição de limite a cor vermelha 6. LINE(10,10)-(240,180),6,B:PAINT(15,175),7,6Na tela 1, foi introduzida uma linha na parte de baixo do obstáculo, de forma que ele se tornasse um polígono fechado e pudesse ser pintado. Em vez de pintar os obstáculos de cada tela por dentro, foi criado um retângulo preenchido na cor desejada na área em que esses objetos serão desenhados. Assim, quando a tela for pintada de azul, somente o cenário será pintado menos o interior dos objetos, uma vez que são polígonos fechados. As coordenadas iniciais do balão foram retiradas das sub-rotinas de desenho da tela e colocadas em uma sub-rotina em separado. 2050 ' Define coordenadas iniciais do balao 2060 IF S=1 THEN X=150:Y=130:RETURN 2070 IF S=2 THEN X=220:Y=160:RETURN 2080 IF S=3 THEN X=15:Y=150:RETURN 2090 IF S=4 THEN X=200:Y=160:RETURN 2095 RETURN Loop principal 200 ' ** LOOP PRINCIPAL ** 210 ST=STICK(Q):IFST=0THEN250 220 IFST=1THENY=Y-1:GOTO 260Foram introduzidos dois novos movimentos: diagonal esquerda e direita para cima. Sub-rotina de falha: 330 LI=LI-1 340 PLAY"O4L5CCCD#DDCCCC"Quando o balão bate, o fundo azul é substituído por um efeito de paleta de cores, que varia o vermelho de escuro para claro e claro para escuro. Sub-rotina de tela completada: Agora, a pontuação é baseada no tempo de dois minutos em vez de 30 segundos. Tela inicial 1300 COLOR1:CLSMudanças: todo o menu na tela, aceita letras minúsculas e opção do ranking (letra D). Sub-rotina que imprime os 5 melhores placares: 2200 ' Imprime recordes 2210 SCREEN 0:COLOR1,15,15 2220 PRINT"Recordes:":PRINT 2230 FOR I=1 TO 5 2240 PRINT I;"- ";NO$(I); 2250 LOCATE 15 : PRINT HI(I) 2260 NEXT 2270 PRINT:PRINT"Tecle algo ...":A$=INPUT$(1) 2280 RETURN Instruções 1470 CLS Sub-rotina para mostrar as telas 1960 SCREEN Fim do jogo Essa sub-rotina foi reescrita para a screen 5, acrescida de uma sub-rotina para capturar o nome do jogador, caso um dos recordes da lista seja batido. A leitura de dados do teclado espera letras, espaço em branco, backspace ou enter. Ao completar o nome, uma sub-rotina é chamada para colocar o nome e o placar na lista (GOSUB 2300). Sub-rotina que insere recorde na lista: 2300 ' Adiciona novo recorde e grava 2310 I=1 2320 IF SC<=HI(I) AND I<6 THEN I=I+1 : GOTO 2320 2330 IF I=6 THEN RETURN 2340 FOR F=4 TO I STEP -1 2350 NO$(F+1) = NO$(F) : HI(F+1)=HI(F) 2360 NEXT F 2370 NO$(I)=NM$ : HI(I)=SC 2380 OPEN"balao.dat"FOR OUTPUT AS#2 2390 FOR I=1 TO 5 : PRINT#2, NO$(I)+","+STR$(HI(I)) : NEXT 2395 CLOSE2:RETURNEm vez de um recorde apenas, agora são 5 recordes. Para chegar aqui, basta que o recorde atual seja maior que o 5o. recorde. Uma vez modificada a lista de recordes, o arquivo é atualizado. |
||