domingo, 1 de março de 2015

Movimentação de sprites em BASIC

Quando tive meu primeiro Hotbit, nos anos 1990, tentei por muito tempo criar joguinhos em BASIC. Meu problema era que quando conseguia movimentar o sprite do jogado não conseguia movimentar o cenário, ou os sprites do jogo.

A solução é estudar o loop básico de jogos:
  1) Ler movimento dos controles
  2) Atualizar posição do jogador
  3) Atualizar posição do cenário e sprites do jogo
  4) Checar colisões
  5) Desenhar tudo

Assim, 25 anos depois consegui faze-lo!
Abaixo, temos o exemplo em BASIC do lançamento de um sprite de foguete vinha no manual do Hotbit. A diferença é que as nuvens se movimentam ao mesmo tempo que é possível mover a base do foguete e durante seu lançamento.


10 SCREEN 2,3:COLOR 1,4,1
20 DATA 0,0,0,0,3,7,15,63
30 DATA 63,127,127,63,31,1,0,0
40 DATA 0,0,0,0,192,252,255,255
50 DATA 255,255,255,255,255,255,28,0
60 DATA 0,0,0,1,15,31,255,255
70 DATA 255,255,255,255,255,255,30,0
80 DATA 0,0,0,128,224,248,248,252
90 DATA 252,248,248,240,240,224,0,0
100 DATA 0,0,0,28,126,127,255,127
110 DATA 31,15,7,3,0,0,0,0
120 DATA 0,0,0,0,96,240,248,252
130 DATA 254,254,252,252,248,0,0,0
140 DATA 0,0,0,0,0,0,3,15
150 DATA 63,255,255,127,63,31,0,0
160 DATA 0,0,0,0,0,248,252,254
170 DATA 254,252,252,252,252,248,248,0
180 DATA 0,0,0,0,0,0,0,0
190 DATA 0,0,0,0,0,0,0,0
200 DATA 3,3,7,7,7,7,7,15
210 DATA 15,15,15,31,31,31,31,31
220 DATA 0,0,0,0,0,0,0,0
230 DATA 0,0,0,0,0,0,0,0
240 DATA 255,255,255,16,40,16,0,0
250 DATA 0,0,0,0,0,0,0,0
260 DATA 255,255,255,0,1,0,0,0
270 DATA 0,0,0,0,0,0,0,0
280 DATA 240,240,240,128,64,128,0,0
290 DATA 0,0,0,0,0,0,0,0
300 DATA 8,28,28,62,62,62,127,255
310 DATA 62,62,62,62,127,255,201,128
320 DATA 0,0,0,0,0,0,0,128
330 DATA 0,0,0,0,0,128,128,128
340 DATA 8,28,28,62,62,62,62,28
350 DATA 28,20,0,0,0,0,0,0
360 DATA 0,0,0,0,0,0,0,0
370 DATA 0,0,0,0,0,0,0,0
380 FOR J=1 TO 9:A$=""
390 FOR I=1 TO 32:READ A:A$=A$+CHR$(A):NEXT I
400 SPRITE$(J)=A$:NEXT J
410 CIRCLE(88,120),16,6,-1E-04,-3.415,.5
420 PAINT(88,118),6
430 LINE(0,192)-(255,120),12,BF
440 I=120:J=144:FG=0:SP9=0
450 ONKEY GOSUB 790
460 KEY(1)ON
470 '
480 IF FG=1 THEN GOTO 520
490  IF STRIG(0)=-1 THEN FG=1
500  IF STICK(0)=3 THEN GOSUB 750
510  IF STICK(0)=7 THEN GOSUB 770
520 IF FG=1 THEN GOSUB 670
530 D=D+1
540 GOSUB 570
550 GOTO 480
560 '
570 PUT SPRITE 5,(I,J),1,5
580 PUT SPRITE 6,(I,J+32),1,6
590 PUT SPRITE 7,(I+32,J+32),1,7
600 PUT SPRITE 8,(I+32,J+K),7,8
610 PUT SPRITE1,(80+D,16),15,1
620 PUT SPRITE2,(112+D,16),15,1
630 PUT SPRITE 10,(160+D,80),15,3
640 PUT SPRITE 11,(16+D,48),15,3
650 RETURN
660 '
670 K=K-1
680 M=K+32
690 IF SP9=1 THEN GOTO 710
700 PUT SPRITE 9,(I+32,J+M),9,9:SP9=1
710 PUT SPRITE 9,(I+32,209),9,9:SP9=0
720 IF K=-177 THEN GOSUB 790
730 RETURN
740 '
750 I=I+1:IF I>200 THEN I=200
760 RETURN
770 I=I-1:IF I<0 THEN I=0
780 RETURN
790 COLOR 15,4,4:END


Abraços,
O Editor

Nenhum comentário:

Postar um comentário