Advertisement
SMicro

Sokoban_Texto+movimiento_basico

May 31st, 2021 (edited)
2,812
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *-----------------------------------------------------------
  2. * Title      : Sokoban modo Texto + Movimiento básico
  3. * Written by : Fulgencio
  4. * Date       : Mayo 2021
  5. * Description:
  6. *-----------------------------------------------------------
  7.     ORG    $1000
  8. START:                 ; first instruction of program
  9.     JSR LETRAGRANDE
  10. BUCLEP  
  11.     JSR ESCENARIO  
  12. OTRAT  
  13.     JSR TECLAS
  14.     CMP.B #'D',D1
  15.     BEQ TECLAD
  16.     JMP OTRAT
  17.  
  18. TECLAD
  19.    JSR DERECHA
  20.     JMP BUCLEP
  21.    
  22. SIMHALT
  23.  
  24. TECLAS
  25.    MOVE.L #5,D0
  26.     TRAP #15
  27.     RTS  
  28. ******
  29. ESCENARIO
  30.    JSR TXTORIG
  31.     MOVE.L ANCHO,D1      *Anchura mapa
  32.     MOVE.L #13,D0
  33.     MOVE.L #MAPA,A1
  34. BUCLE  
  35.     TRAP #15
  36.     ADD.L D1,A1
  37.     TST.B (A1)
  38.     BNE BUCLE
  39.     RTS
  40. ******
  41.    
  42. TXTORIG
  43.    MOVE.L #11,D0
  44.     MOVE.L #00<<8+00,D1   *D1=COL<<8+FILA (0,0)
  45.     TRAP #15
  46.     RTS  
  47.  
  48. LETRAGRANDE
  49.    MOVEM.L D0-D2,-(A7)
  50.     MOVE.L #21,D0
  51.     MOVE.L #$FFFFFF,D1   *Color Blanco
  52.     MOVE.L #$00200000,D2 *Letra 32
  53.     TRAP #15
  54.     MOVEM.L (A7)+,D0-D2
  55.     RTS
  56.    
  57. DERECHA
  58.    MOVE.L #1,D5    *Mover a la derecha es +1
  59.     JMP MOVER  
  60. IZQUIERDA
  61.    MOVE.L #-1,D5   *Mover a la izquierda es -1
  62.     JMP MOVER
  63. ARRIBA
  64.    MOVE.L ANCHO,D5 *Mover a la arriba es -ANCHO
  65.     NEG.L D5
  66.     JMP MOVER       *Mover a la abajo es +ANCHO
  67. ABAJO
  68.    MOVE.L ANCHO,D5
  69.     JMP MOVER  
  70.    
  71. MOVER                  *D5 me indicará la dirección
  72.     CLR.L D0            *Si D0 se queda a 0 no hemos podido mover
  73.     CLR.L D1
  74.     MOVE.L #MAPA,A1     *Inicio del mapa
  75.     MOVE.W PERSONAJE,D1 *Posición del personaje desde el inicio del mapa
  76.     ADD.L D1,A1         *A1 apunta al personaje
  77.     CMP.B #'#',(A1,D5)  *Compruebo si hay muro en dirección del movimiento
  78.     BEQ NOMUEVE
  79.     CMP.B #'$',(A1,D5)
  80.     BEQ HAYCAJA
  81. NO$ CMP.B #'*',(A1,D5)
  82.     BEQ HAYCAJA
  83.     JMP SIMUEVE         *Cualquier otra cosa, si se mueve
  84.  
  85. HAYCAJA
  86.    *JSR MOVERCAJA      *De momento no está implementada
  87.     JMP NOMUEVE         *De momento no mueve si hay caja  
  88. SIMUEVE  
  89.     JSR PUEDESMOVER
  90. NOMUEVE
  91.    RTS
  92.  
  93. PUEDESMOVER    *Supuesto básico de traslado a espacio en blanco dejando un blanco
  94.                 *Habría que comprobar las posibilidad de que el personaje
  95.                 *fuera un '+' (encima de punto) o que se trasladase a un punto (->+)
  96.     MOVE.L #1,D0        *Significa movimiento exitoso
  97.     MOVE.B #' ',(A1)    *Borramos personaje de origen
  98.     MOVE.B #'@',(A1,D5) *Pintamos personaje en destino
  99.     ADD.W D5,PERSONAJE  *Acualizamos posición personaje
  100.     RTS
  101.    
  102.     SIMHALT
  103.  
  104.     ORG $4000
  105.    
  106. MAPA
  107.    DC.B '###### ',0
  108.     DC.B '#@   ##',0
  109.     DC.B '# $$  #',0
  110.     DC.B '# #. .#',0
  111.     DC.B '#     #',0
  112.     DC.B '#######',0,0
  113.    
  114. PERSONAJE DC.W 9
  115. ANCHO    DC.L 8 *Incluyendo los 0 fin de línea
  116. ALTO     DC.L 6
  117.  
  118.     END    START
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement