jueves, 25 de febrero de 2016

Como hacer un juego de naves con 8BP

hola amigos de 8 bits de poder

Os voy a dar alguna orientación para programar un juego de naves. Estoy realizando un juego que lleva por título "Annunaki", y de momento he hecho la nave y el disparo.







A continuación os doy algunas pistas de como esta hecho, y adjunto el listado
básicamente, hasta la linea 200 solo es la presentación, con un scroll de estrellas de 4 planos, que está construido con el comando STARS

En la linea 1000 se encuentra la primera fase, que no es mas que nuestra nave volando en un cielo estrellado, de nuevo hecho con el comando STARS. tras las inicializaciones se entra en el bucle del "ciclo de juego", que incluye:
gosub 500: en la linea 500 se encuentra la rutina de movimiento de la nave y de lanzamiento de un disparo. fiajos que he dejado un tiempo de guarda entre disparo y disparo. ademas, antes de activar el sprite correspondiente al disparo, elijo entre 3 sprites posibles, de modo que solo puede haber 3 disparos simultáneos.  La variable "nd" es el número de disparos que hay en pantalla

en la 750 se encuentra la rutina que libera el sprite del disparo cuando este sobrepasa el área de la pantalla. simplemente compruebo su coordenada Y con el comando |PEEK. fijaos que uso el PEEK de 8BP y no el PEEK del basic, ya que el de basic no puede leer números negativos. Otra estrategia que uso aqui es chequear solo un disparo en cada ciclo de juego, de ese modo reducimos instrucciones. consulta la técnica de lógicas masivas, es precisamente eso. Cuando un disparo sobrepasa la pantalla, se le desactiva, poniendo a cero su byte de status

por ultimo uso AUTOALL para mover todos los disparos activos y PRINTSPALL para imprimir los sprites (nave y disparos)


Espero que estas notas os sirvan y ayuden a comenzar vuestro propio juego.



10 CALL &6B78
20 dir=&A62C: '42540
30 FOR star=0 TO 40
40 POKE dir+star*2,RND*200
50 POKE dir+star*2+1,RND*80
60 NEXT
61 defint a-z
62 FOR j=0 TO 31:|SETUPSP,j,0,&X0:NEXT:' reset sprites
70 MODE 0: INK 0,0
80 |SETLIMITS,0,80,0,200
81 LOCATE 7,5:PEN 11:PRINT "ANNUNAKI"
82 LOCATE 2,9:PEN 13:PRINT "nuestro pasado alien"
83 LOCATE 2,22:PEN 7:PRINT "pulsa S para empezar"
84 LOCATE 10,25:PEN 11:PRINT "JJGA 2016"
85 |SETUPSP,31,9,34000: |PRINTSP,31,11*8,36
90 |STARS,0,10,3,1,0
100 |STARS,10,10,2,2,0
110 |STARS,20,10,1,1,0
120 |STARS,30,10,4,4,0
131 IF INKEY(60)=0 THEN 150
140 GOTO 90

150 ' empieza el juego-----------------------------
160 gosub 1000:' fase 1
170 gosub 2000:' fase 2
180 gosub 3000:' fase 3
190 gosub 4000:' fase 4
200 goto 20:'vuelta a empezar

499' rutina movimiento nave y disparo-------------------------
500 if inkey(27)=0 then x=x+1:POKE 27499,x:goto 520
510 if inkey(34)=0 then x=x-1:POKE 27499,x
520 if inkey(67)=0 then y=y-3:POKE 27497,y:goto 540
530 if inkey(69)=0 then y=y+3:POKE 27497,y
540 if timer >0 then timer =timer-1:return
700 if inkey(47)<>0 then return
701 if nd=3 then return
702 nd=nd+1:
703 if peek (27480)=0 then libre =30:goto 710
704 if peek (27464)=0 then libre =29:goto 710
705 if peek (27448)=0 then libre =28:goto 710
710 |LOCATESP,libre,y-8,x+4:|SETUPSP,libre,0,&x1001
715 timer=4:'separo disparos en el tiempo con un tiempo de guarda
720 return

749' logica fin disparo-----------------------------
750 dc=dc+1:if dc=4 then dc=1
751 if peek(27496-dc*16)=0 then return
770 |peek,(27497-dc*16),@yd%: if yd%<-4 then |SETUPSP,31-dc,0,0:nd=nd-1
790 return

799 'inicializacion----------------------------
800 FOR j=0 TO 31:|SETUPSP,j,0,&X0:NEXT:' reset sprites
801 nd=0:'num disparos activos. como mucho 3
802 disparo=&871a:yd%=0: dc=0:nd=0:libre=30
803 |SETUPSP,30,9,disparo: |SETUPSP,29,9,disparo: |SETUPSP,28,9,disparo
804 |SETUPSP,30,5,-4: |SETUPSP,29,5,-4: |SETUPSP,28,5,-4:'vy
805 x=40:y=180:|LOCATESP,31,y,x: |SETUPSP,31,0,&x1
806 cls
900 return

999' fase 1---------------------------
1000 gosub 800: 'init generico
1010:'aqui preparo la fase
1500 gosub 500:'mov nave y disparo
1510 if nd>0 then gosub 750:'logica fin disparo
1520 |AUTOALL
1530 |PRINTSPALL,0,0
1532 |STARS,0,20,4,4,0
1540 goto 1500

No hay comentarios:

Publicar un comentario