Advertisement
SMicro

Tablero 2048 modo texto

Apr 23rd, 2015
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *-----------------------------------------------------------
  2. * Title      :EJEMPLO BÁSICO DE REPRESENTACIÓN DE UN MAPA MATRIZ 4x4 PARA EL JUEGO 2048
  3. * Written by :Fulgencio
  4. * Date       :04/2015
  5. * Description:Se trata de a partir de una representación del tablero en la memoria, representar
  6. *             los elementos en la pantalla. Está estructurado con subrutinas
  7. *-----------------------------------------------------------
  8.  
  9.  
  10.     ORG    $1000
  11. START:                  ; first instruction of program
  12.  
  13. * Put program code here
  14.  
  15.      MOVE.L #CELDAS,A3 ;A3 apunta a la matrix 4x4
  16. REINICIO    
  17.      MOVE.B #4,D4 ;Contador de columna. Cada 4 saltamos a otra fila
  18. BUCLE1    
  19.      MOVE.L #1,D1 ;Utilizamos el 1 de base para elevar a la potencia de 2 correspondiente
  20.      
  21.      MOVE.B (A3)+,D2 ;Cogemos un elemento de la matriz y lo pasamos a D2
  22.      LSL.L D2,D1 ;Obtenemos la potencia de 2 (2^n equivale a desplazar el 1 n veces a izquierda)
  23.  
  24.      JSR IMPRIME
  25.    
  26.      SUB.B #1,D4
  27.      BNE BUCLE1  ¿Han salido ya 4 columnas? Entonces vamos a la siguiente línea
  28.      
  29.      CMP.L #CELDAS+16,A3 ;¿Estan todas las líneas dibujadas?
  30.      BEQ COMPLETO ;Terminamos
  31.      
  32.      JSR SALTOLIN  ;Avanza linea
  33.      JMP REINICIO  ;Reinicia contador de columna
  34.      
  35.      
  36. COMPLETO    
  37.  
  38.     SIMHALT             ; halt simulator
  39.  
  40. ESPACIO MOVE.L #6,D0
  41.         MOVE.B #' ',D1 ;imprime un espacio
  42.         TRAP #15
  43.         RTS
  44.        
  45. IMPRIME *Esta función imprime un elemento que puede ser un vacío o un valor numérico
  46.         *Para que al imprimir, los elementos queden alineados verticalmente, utilizamos
  47.         *los números se rellenan con espacios para ocupar siempre a 6 caracteres en total
  48.        
  49.         *input: D1 (valor numérico a imprimir. Si es 1, presenta un vacío)
  50.         *modifica D0 y D2
  51.  
  52.         CMP.B #1,D1 ;¿ES UN VACIO?
  53.         BEQ PRINVACIOS
  54.         MOVE.L #20,D0
  55.         MOVE.L #6,D2
  56.         TRAP #15   ;Imprime números formateados a 6 espacios
  57.         RTS
  58.        
  59. PRINVACIOS *modifica D0 y A1
  60.          MOVE.L #14,D0
  61.          MOVE.L #VACIOS6,A1  ;cadena de 6 espacios
  62.          TRAP #15
  63.          RTS
  64.        
  65. SALTOLIN *modifica D0 y A1
  66.          MOVE.L #14,D0
  67.          MOVE.L #CRLF,A1  ;RETORNO CARRO + AVANCE DE LINEA
  68.          TRAP #15
  69.          RTS
  70.  
  71. * Put variables and constants here
  72.  
  73. *CELDAS CORRESPONDE AL MAPA DE ESTADO DEL TABLERO 4x4. Se necesitan 16 elementos organizados en 4x4
  74. *Como una celda solo puede estar o vacía (0) o conteniendo una potencia de 2 (2,4,8,16...2048)
  75. *almacenamos sólo el exponente (dejando el 0 para la vacía) y así podemos utilizar el tamaño byte
  76.  
  77.  
  78. CELDAS DC.B 1,1,2,7
  79.        DC.B 0,0,0,1
  80.        DC.B 1,2,3,0
  81.        DC.B 3,1,1,0
  82.  
  83. VACIOS6 DC.B '      ',0 *Cadena de 6 caracteres espacio para representar la casilla vacía
  84. CRLF DC.B 10,13,0 *Cadena que representa avance de linea+ retorno de carro
  85.  
  86.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement