Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title : Sokoban modo Texto + Movimiento básico
- * Written by : Fulgencio
- * Date : Mayo 2021
- * Description:
- *-----------------------------------------------------------
- ORG $1000
- START: ; first instruction of program
- JSR LETRAGRANDE
- BUCLEP
- JSR ESCENARIO
- OTRAT
- JSR TECLAS
- CMP.B #'D',D1
- BEQ TECLAD
- JMP OTRAT
- TECLAD
- JSR DERECHA
- JMP BUCLEP
- SIMHALT
- TECLAS
- MOVE.L #5,D0
- TRAP #15
- RTS
- ******
- ESCENARIO
- JSR TXTORIG
- MOVE.L ANCHO,D1 *Anchura mapa
- MOVE.L #13,D0
- MOVE.L #MAPA,A1
- BUCLE
- TRAP #15
- ADD.L D1,A1
- TST.B (A1)
- BNE BUCLE
- RTS
- ******
- TXTORIG
- MOVE.L #11,D0
- MOVE.L #00<<8+00,D1 *D1=COL<<8+FILA (0,0)
- TRAP #15
- RTS
- LETRAGRANDE
- MOVEM.L D0-D2,-(A7)
- MOVE.L #21,D0
- MOVE.L #$FFFFFF,D1 *Color Blanco
- MOVE.L #$00200000,D2 *Letra 32
- TRAP #15
- MOVEM.L (A7)+,D0-D2
- RTS
- DERECHA
- MOVE.L #1,D5 *Mover a la derecha es +1
- JMP MOVER
- IZQUIERDA
- MOVE.L #-1,D5 *Mover a la izquierda es -1
- JMP MOVER
- ARRIBA
- MOVE.L ANCHO,D5 *Mover a la arriba es -ANCHO
- NEG.L D5
- JMP MOVER *Mover a la abajo es +ANCHO
- ABAJO
- MOVE.L ANCHO,D5
- JMP MOVER
- MOVER *D5 me indicará la dirección
- CLR.L D0 *Si D0 se queda a 0 no hemos podido mover
- CLR.L D1
- MOVE.L #MAPA,A1 *Inicio del mapa
- MOVE.W PERSONAJE,D1 *Posición del personaje desde el inicio del mapa
- ADD.L D1,A1 *A1 apunta al personaje
- CMP.B #'#',(A1,D5) *Compruebo si hay muro en dirección del movimiento
- BEQ NOMUEVE
- CMP.B #'$',(A1,D5)
- BEQ HAYCAJA
- NO$ CMP.B #'*',(A1,D5)
- BEQ HAYCAJA
- JMP SIMUEVE *Cualquier otra cosa, si se mueve
- HAYCAJA
- *JSR MOVERCAJA *De momento no está implementada
- JMP NOMUEVE *De momento no mueve si hay caja
- SIMUEVE
- JSR PUEDESMOVER
- NOMUEVE
- RTS
- PUEDESMOVER *Supuesto básico de traslado a espacio en blanco dejando un blanco
- *Habría que comprobar las posibilidad de que el personaje
- *fuera un '+' (encima de punto) o que se trasladase a un punto (->+)
- MOVE.L #1,D0 *Significa movimiento exitoso
- MOVE.B #' ',(A1) *Borramos personaje de origen
- MOVE.B #'@',(A1,D5) *Pintamos personaje en destino
- ADD.W D5,PERSONAJE *Acualizamos posición personaje
- RTS
- SIMHALT
- ORG $4000
- MAPA
- DC.B '###### ',0
- DC.B '#@ ##',0
- DC.B '# $$ #',0
- DC.B '# #. .#',0
- DC.B '# #',0
- DC.B '#######',0,0
- PERSONAJE DC.W 9
- ANCHO DC.L 8 *Incluyendo los 0 fin de línea
- ALTO DC.L 6
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement