Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title :
- * Written by :Fulgencio
- * Date :
- * Description: Ejemplo de comprobación de alineación horizontal
- * de 3 o más caramelos en el tablero del juego
- * CANDY-CRUSH. Si los hay, los marca con 0 en el
- * panel auxiliar MASK
- *-----------------------------------------------------------
- NUMCOL EQU 8
- NUMFIL EQU 6
- PANSIZE EQU NUMCOL*NUMFIL
- ORG $1000
- START:
- *Este es un ejemplo para fila 2 columna 4. Se debería hacer con TODOS
- *los elementos de la tabla asi como implementar también una subrutina
- *para detectar igualmente las alineaciones en vertical (ALINV)
- MOVE.L #4,D2 * D2=col
- MOVE.L #2,D3 * D3=fila
- MOVE.L #PANEL,A0
- JSR ALINH
- SIMHALT
- ALINH *Esta función recibe una coordenada fila y columna en D3 y D2
- *Y comprueba si hay 3 o más alineados hacia la derecha
- *Si los hay, los elimina sustituyendo por 0=vacío
- *Si ha encontrado, devuelve D0=1 y si no D0=0
- MOVEM.L D1-D3/A0-A1, -(A7)
- MOVE.L D3,D0
- LSL.L #3,D0 * multiplica por 8 la fila = MULU #8,D0
- ADD.L D2,D0 * D0=fila*8+col (8 elementos por fila)
- ADD.L D0,A0 *A0 apunta al elemento fila,col
- CLR.L D0 *D0 ahora será un contador de coincidencias
- MOVE.B (A0)+,D1 *D1 será el caramelo de esa posición y
- *ahora A0 apunta al adyacente a derecha
- .LOOP
- ADD.L #1,D0 *cuenta número de repetidos
- ADD.L #1,D2 *siguiente columna
- CMP.L #NUMCOL,D2 *¿hemos llegado al tope por la derecha?
- BEQ .NOMAS *si es así, no podemos seguir
- CMP.B (A0)+,D1 *Compara con el siguiente por la derecha
- BEQ .LOOP *Si es igual, añade otro y si no, sigue
- SUB.L #1,A0 *Si no es igual, nos hemos pasado y retrocede
- .NOMAS
- CMP.L #3,D0
- BCS .SAL0 *Si coincidencias <3 entonces sale sin hacer nada
- ADD.L #PANSIZE,A0 *Va a proceder a marcar los alineados en tabla MASK
- .VACIA
- CLR.B -(A0) *Va marcando con 0 los elementos alineados hacia la izquierda
- SUB.L #1,D0 *decrementa contador de alineados
- BNE .VACIA
- MOVE.L #1,D0 *Devuelve D0=1
- JMP .SAL
- .SAL0 CLR.L D0 *Devuelve D0=0
- .SAL
- MOVEM.L (A7)+,D1-D3/A0-A1
- RTS
- * Put variables and constants here
- ORG $5000 *Variables a partir de $5000
- PANEL DC.B 2,2,2,5,2,1,1,3
- DC.B 1,2,3,4,5,2,1,2
- DC.B 4,3,1,2,4,4,4,4
- DC.B 2,1,4,5,1,4,4,3
- DC.B 3,5,3,3,1,3,3,2
- DC.B 1,2,2,3,1,3,1,1
- *En esta tabla auxiliar se marcarán con 0 los elementos
- *alineados (3 o más) detectados para ser borrados
- MASK DC.B 1,1,1,1,1,1,1,1
- DC.B 1,1,1,1,1,1,1,1
- DC.B 1,1,1,1,1,1,1,1
- DC.B 1,1,1,1,1,1,1,1
- DC.B 1,1,1,1,1,1,1,1
- DC.B 1,1,1,1,1,1,1,1
- CRLF DC.B 10,13,0
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement