Curso de Jogos em Basic
Efeitos para a abertura
Você está em: MarMSX >> Cursos >> Jogos em Basic
Em muitos jogos, observamos alguns efeitos interessantes que são bem simples de programar em Basic. Nesse capítulo extra, iremos abordar alguns deles.
Efeito de alterar cores
No jogo Pucky, observamos que as letras ficam alterando as cores na abertura do jogo. Isso é fácil de fazer. Basta alterar a tabela de cores para todas as letras maiúsculas.
Vejamos o exemplo a seguir.
10 SCREEN 1:COLOR 15,0,0
20 PRINT"EFEITO DE LETRAS PISCANDO"
30 PRINT"EM VARIAS CORES"
40 C=INT(RND(-TIME)*14+2)*16
50 VPOKE 8200,C:VPOKE 8201,C:VPOKE 8202,C:VPOKE 8203,C
60 GOTO 40
Na linha 40, sorteamos um número entre 1 e 15 para a cor. Como iremos alterar somente cor de frente, multiplicamos por 16 para colocar o código da cor nos 4 bits mais significativos. Ex: 4 = &h04, 4*16 = &h40.
No capítulo extra do curso de Basic, que fala sobre desenho nas screens 0 e 1, encontramos a seção "efeito 'paleta' com caracteres", que tem os fundamentos para criar efeitos nas screens 0 e 1.
Efeito de letreiro circular
Outro efeito comum é dos letreiros circulares. No livro do Expert [1], o comando MID$ contém um exemplo de como criar um letreiro desses.
Podemos também criar um letreiro através da rotação circular da mensagem na própria variável da mensagem. O jogo Pucky, por exemplo, faz seu letreiro dessa maneira.
O exemplo a seguir cria um letreiro circular na screen 1.
10 SCREEN 1:WIDTH 32:COLOR 15,0,0:KEY OFF:CLEAR 500
20 MS$=SPACE$(10)+"JOGO BATALHA NAVAL - DESENVOLVIDO POR MARMSX - TECLE ALGO ..."
30 MS$=RIGHT$(MS$,LEN(MS$)-1)+LEFT$(MS$,1)
40 LOCATE 0,10:PRINT LEFT$(MS$,31)
50 FOR T=1 TO 50:NEXT T
60 GOTO 30
A cada iteração removemos o primeiro caractere da mensagem e o colocamos ao final dela. Veja o exemplo abaixo.
MS$="EXPERT "
1a. iteração
RIGHT$(MS$,LEN(MS$)-1) = "XPERT "
LEFT$(MS$,1) = "E"
MS$= "XPERT " + "E" = "XPERT E"
2a. iteração
MS$= "PERT E" + "X" = "PERT EX"
3a. iteração
MS$= "ERT EX" + "O" = "ERT EXP"
...
Como a mensagem possui 71 caracteres, selecionamos apenas 31 caracteres quando imprimimos para caber na linha.
A linha 50 controla a velocidade do letreiro.
Adicione/altere as seguintes linhas no programa para fazer as letras mudarem de cor.
50 FOR T=1 TO 30:NEXT T
55 C=INT(RND(-TIME)*14+2)*16
56 VPOKE 8200,C:VPOKE 8201,C:VPOKE 8202,C
57 VPOKE 8203,C:VPOKE 8197,C
Efeito nos caracteres
No cartucho "Ligue-se no Expert", logo nas primeiras animações, temos um efeito de alteração nos blocos que formam a palavra grande na tela "Expert", dando um efeito de animação.
No código a seguir, vamos escrever a palavra "Expert" na screen 1, de forma aumentada.
10 SCREEN 1:WIDTH 32:COLOR 15,0,0:KEY OFF
20 A$="Expert"
30 CL=0
40 FOR C=1 TO LEN(A$)
50 CH$=MID$(A$,C,1)
60 GOSUB 500
70 CL=CL+101
80 NEXT
90 END
500 ' Escreve letra
510 CH=ASC(CH$):EC=CH*8:EN=6144+CL
520 FOR I=0 TO 6
530 LN$=RIGHT$("0000000"+BIN$(VPEEK(EC+I)),8)
540 FOR J=0 TO 6
550 IF MID$(LN$,J+1,1)="1" THEN VPOKE EN,&HDB
560 EN=EN+1:NEXT J:EN=EN+25:NEXT I
570 RETURN
Utilizamos o caractere "bloco" (código ASCII &hDB) para desenhar a palavra.
Saída:
Agora, vamos modificar o desenho do bloco que é a base da escrita da palavra na tela. Junte o código a seguir com o anterior.
90 GOSUB 800:EC=1752
100 ' Loop principal
110 FOR L=1 TO 4:FOR I=0 TO 7
120 VPOKE EC+I,T(L,I+1)
130 NEXT I:FOR T=1 TO 60:NEXT T,L
140 GOTO 110
...
800 ' Guarda desenhos do caractere em tabela
810 DIM T(4,8)
820 FOR I=1 TO 4:FOR J=1 TO 8
830 READ K$: T(I,J)=VAL("&H"+K$)
840 NEXT J,I
850 RETURN
860 DATA 00,00,00,FF,00,00,00,00
870 DATA 80,40,20,10,08,04,02,00
880 DATA 10,10,10,10,10,10,10,10
890 DATA 02,04,08,10,20,40,80,00
Obs: a variável T na linha 130 controla o tempo entre a transição dos caracteres.
Quer deixar a animação colorida? Acrescente o código abaixo.
130 NEXT I:C=INT(RND(-TIME)*14+2)*16:VPOKE 8219,C
135 FOR T=1 TO 30:NEXT T,L
Borda que alterna cores
Uma animação interessante é acrescentar uma borda a uma mensagem, onde as cores vão se deslocando dando um efeito de "circulação".
10 SCREEN 1:WIDTH 32:KEY OFF
20 GOSUB 300:LOCATE 0,8
30 PRINT SPC(8);"aiqaiqaiqaiqaiqa"
40 PRINT SPC(8);"i MARMSX 2020 i"
50 PRINT SPC(8);"qaiqaiqaiqaiqiaq"
60 A(0)=&H20:A(1)=&H60:A(2)=&h50:I=0
65 ' Alterna cores
70 VPOKE 8204,A(I)
80 VPOKE 8205,A((I+1) MOD 3)
90 VPOKE 8206,A((I+2) MOD 3)
100 I = (I+1) MOD 3
110 FOR T=1 TO 100:NEXT T
120 GOTO 70
300 ' Copia caractere para "a", "i" e "q"
310 E=97*8:EB=249*8
320 FOR I=0 TO 7
330 VPOKE E+I,VPEEK(EB+I)
340 VPOKE E+I+64,VPEEK(EB+I)
350 VPOKE E+I+128,VPEEK(EB+I)
360 NEXT I
370 RETURN
A variável T na linha 110 controla a velocidade do efeito.
Saída:
Na sub-rotina das linhas 300-370, fazemos uma cópia do caractere &HF9 que é a bola "⚫" nos caracteres "a", "i" e "q". Isto, porque os três caracteres estão em três grupos de 8 caracteres, onde podemos trocar a cor de forma independente na screen 1. Além disso, esses caracteres são mais fáceis de se utilizar para criar o mapa do letreiro (linhas 30-50).
Finalmente, as linhas 70-90 mudam as cores das bolinhas de forma alternada.
Referências:
1. Livro: Linguagem Basic MSX, editora Aleph, 5a. Edição, 1987.