Advertisement
SMicro

PINTA MAPA BUSCAMINAS

Apr 30th, 2018
1,328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. * Title      : PINTA BUSCAMINAS
  2. * Written by : FULGENCIO
  3. * Date       : ABRIL 2018
  4. * Description: Buscaminas mod TEXTO a partir de un MAPA
  5. *-----------------------------------------------------------
  6.  
  7. LF  EQU $0A  *Avance línea
  8. CR  EQU $0D  *Retorno carro
  9. WHITE EQU $FFFFFF
  10.  
  11.     ORG    $1000
  12. START:              
  13.     MOVE.L #21,D0
  14.     MOVE.L #WHITE,D1
  15.     MOVE.L #$031E0000,D2 *Texto Courier, tamaño 30=$1E
  16.     TRAP #15
  17.    
  18.     MOVE.L #MAPA,A3
  19.     MOVE.L #MASCARA,A4
  20.     CLR.L D2        *D2 nos cuenta las filas. Empieza en 0
  21. BUCLE
  22.    MOVE.B (A3)+,D1 *Tomamos valor del mapa del laberinto
  23.     MOVE.B (A4)+,D0 *Tomamos valor de máscara 0=oculto
  24.     CMP.B #64,D1    *Utilizo el valor 64 para cambiar de línea
  25.     BEQ OTRALINEA
  26.    
  27.     CMP.B #0,D0   *Comprueba ne la mascara si está oculto=0
  28.     BEQ OCULTO    *Si es 0 se muestra asterisco (*)
  29.    
  30.     CMP.B #16,D1
  31.     BEQ BOMBA
  32.     ADD.L #$30,D1 *Pasa a ASCII
  33.     JSR PINTA
  34.     JMP BUCLE
  35. BOMBA
  36.    MOVE.L #'X',D1    
  37.     JSR PINTA    
  38.     JMP BUCLE
  39.    
  40. OCULTO MOVE.B #'*',D1
  41.        JSR PINTA
  42.        JMP BUCLE
  43.  
  44. OTRALINEA
  45.     MOVE.L #14,D0
  46.     MOVE.L #SALTOLIN,A1
  47.     TRAP #15
  48.     ADD.L #1,D2  *Avanza fila
  49.     CMP.L #8,D2  *Límite en 8 filas
  50.     BNE BUCLE
  51.  
  52.     SIMHALT
  53.  
  54. PINTA
  55.   CMP.B #'0',D1
  56.    BNE NOCERO
  57.    MOVE.B #' ',D1 *Sustituye '0' por espacio
  58. NOCERO
  59.    MOVE.L #6,D0 *Pinta el caracter que está en D1
  60.     TRAP #15
  61.     RTS
  62.  
  63.  
  64. * Put program code here
  65.  
  66.     SIMHALT             ; halt simulator
  67.  
  68. * Put variables and constants here
  69. SALTOLIN DC.B LF,CR,0  *Estos códigos ASCII son necesarios para saltar de línea
  70.  
  71. *En el mapa tengo los valores internos de todas las casillas. Para detectar cuando cambiar
  72. *de línea, utilizo una columna auxiliar, a cuyos elementos les asigno un valor 64
  73.  
  74. MAPA   DC.B 1,16,2,16,1,0,1,1,64
  75.         DC.B 1,1,2,1,1,0,1,16,64
  76.         DC.B 0,0,0,0,0,0,1,1,64
  77.         DC.B 0,0,0,1,1,1,0,0,64
  78.         DC.B 0,0,0,1,16,1,0,0,64
  79.         DC.B 0,1,2,3,2,2,1,1,64
  80.         DC.B 1,2,16,16,1,2,16,3,64
  81.         DC.B 1,16,3,2,1,2,16,16,64
  82.  
  83. *La máscara es otro mapa que me indicará qué casillas están descubiertas y por tanto son visibles
  84. *Un cero significa oculta y un 1 indicará que está visible
  85.        
  86. MASCARA DC.B 0,0,0,0,0,0,0,0,64
  87.         DC.B 1,1,1,1,1,1,1,0,64
  88.         DC.B 1,1,1,0,0,0,0,0,64
  89.         DC.B 1,1,1,0,0,0,0,0,64
  90.         DC.B 0,0,0,1,0,0,0,0,64
  91.         DC.B 0,0,0,0,0,0,0,0,64
  92.         DC.B 0,0,0,0,0,0,0,0,64
  93.         DC.B 0,0,0,0,0,0,0,0,64
  94.  
  95.        
  96.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement