Advertisement
SMicro

2048 Tablero -texto en modo grafico -

May 21st, 2015
839
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. Versión Gráfica
  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. En este ejemplo utilizamos la versión gráfica de  
  7. *              presentación de texto en pantalla (Task 95) de manera que podemos situar con mayor
  8. *              precisión el mismo en la pantalla.
  9. *-----------------------------------------------------------
  10.  
  11. INIX    EQU 70
  12. INIY    EQU 70
  13. INCX    EQU 60
  14. INCY    EQU 60  *Cambiar estas constantes para otro tamaño o posición
  15. DECY    EQU INCY/2-8 *Para centrar la rejilla en vertical
  16.  
  17.     ORG    $1000
  18. START:                  ; first instruction of program    
  19. * Put program code here
  20.  
  21.      MOVE.L #CELDAS,A2 ;A2 apunta a la matrix 4x4
  22.      JSR PINTARMAPA
  23.      JSR REJILLA
  24.      SIMHALT
  25.  
  26. PINTARMAPA  *Utiliza D1 y D2 para la coordenada X,Y de los elementos que imprime
  27.             *D3 lo utiliza como temporal para capturar el elemento y calcular el desplazamiento
  28.             *A2 apunta al mapa en memoria. A1 apunta a una tabla de conversión número->cadena_texto
  29.            
  30.      MOVE.L #INIY,D2
  31. REINICIO    
  32.      MOVE.L #INIX,D1
  33. BUCLE1    
  34.      MOVE.L #ELEM,A1   ;A1 apunta a la tabla de elementos en formato cadenas de texto
  35.      CLR.L D3
  36.      MOVE.B (A2)+,D3 ;Cogemos un elemento de la matriz y lo pasamos a D3  
  37.      LSL.L #3,D3 *Multiplicamos por 8, que es lo que ocupa cada elemento
  38.      ADD.L D3,A1 *Sumamos D3 y A1 apuntará exactamente al elemento a representar
  39.      
  40.      MOVE.L #95,D0
  41.      TRAP #15   *Imprime la cadena de texto en modo gráfico (TASK 95) en coordenadas X=D1 e Y=D2
  42.    
  43.      ADD.L #INCX,D1 *Avanza en X
  44.      CMP.L #INIX+4*INCX,D1 *Se comprueba si ya ha llegado a la última columna  
  45.      BNE BUCLE1     *si no han salido las 4 columnas sacará la siguiente
  46.      CMP.L #CELDAS+16,A2 *¿Estan todas las líneas dibujadas?
  47.      BEQ COMPLETO *Terminamos
  48.      ADD.L #INCY,D2
  49.      JMP REINICIO  *Reinicia contador de columnas para una siguiente fila
  50. COMPLETO    
  51.      RTS
  52.  
  53. REJILLA *Dibuja una rejilla 4x4 para generar las celdas
  54.         *Utiliza D0 a D4 pero los guarda en la pila
  55.  
  56.         MOVEM.L D0-D4,-(A7) salvaguardamos en la pila
  57.  
  58.         MOVE.L #87,D0 ;Linea gráfica de X1=D1,Y1=D2 a X2=D3,Y2=D4
  59.         MOVE.W #INIX,D1
  60.         MOVE.W #INIY-DECY,D2
  61. LOOPREJ1        
  62.         MOVE.W D1,D3  ;La línea es vertical por lo que X es igual en ambos extremos
  63.         MOVE.W #INIY-DECY+INCY*4,D4
  64.         TRAP #15      *Línea vertical de 160 de longitud
  65.         ADD.W #INCX,D1  *Nos vamos a la siguiente vertical
  66.         CMP.W #INIX+5*INCX,D1 *La 5ª ya no hay que dibujarla
  67.         BNE LOOPREJ1
  68.  
  69.         MOVE.W #INIX,D1
  70.         MOVE.W #INIY-DECY,D2
  71.         MOVE.W #INIX+4*INCX,D3
  72. LOOPREJ2
  73.         MOVE.W D2,D4
  74.         TRAP #15
  75.         ADD.W #INCY,D2
  76.         CMP.W #INIY-DECY+INCY*5,D2 *La 5ª ya no hay que dibujarla
  77.         BNE LOOPREJ2          
  78.  
  79.         MOVEM.L (A7)+,D0-D4 recuperamos los registros de la pila
  80.         RTS
  81.  
  82. * Put variables and constants here
  83.        ORG $5000
  84. *CELDAS CORRESPONDE AL MAPA DE ESTADO DEL TABLERO 4x4. Se necesitan 16 elementos organizados en 4x4
  85. *Como una celda solo puede estar o vacía (0) o conteniendo una potencia de 2 (2,4,8,16...2048)
  86. *almacenamos sólo el exponente (reservando el 0 para la vacía) y así podemos utilizar el tamaño byte
  87.  
  88.  
  89. CELDAS DC.B 1,1,2,7
  90.        DC.B 0,0,0,1
  91.        DC.B 1,2,3,0
  92.        DC.B 3,1,1,0
  93.  
  94. *Como la Task 95 solo presenta cadenas de texto, utilizaremos una tabla de conversión entre el valor
  95. *numérico y la cadena a presentar
  96.  
  97. ELEM   DC.B '      ',0,0  *doble cero para que ocupen 8 bytes
  98.        DC.B '   2  ',0,0
  99.        DC.B '   4  ',0,0
  100.        DC.B '   8  ',0,0
  101.        DC.B '  16  ',0,0
  102.        DC.B '  32  ',0,0
  103.        DC.B '  64  ',0,0
  104.        DC.B '  128 ',0,0
  105.        DC.B '  256 ',0,0
  106.        DC.B '  512 ',0,0
  107.        DC.B ' 1024 ',0,0
  108.        DC.B ' 2048 ',0,0
  109.  
  110.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement