Desarrollo de Juegos de Tablero (7):
Recorrer camino de casillas en el tablero.
Vamos a "recuperar" la animación de que cuando un personaje vaya de una casilla a otra, se mueva por el camino de caillas y no vaya directamente a la casilla (cruzando el tablero).
Para ello modificaremos un poco el código de la clase jugador:
Para mover la posición de un jugador, usabamos el método mover() (y este a su vez llamaba al método mover() de la PiezaAnimada). Bien, pues vamos a modificar el método mover() de la clase jugador:
Public
Sub
Mueve(casilla
As
Integer)
hcasillafinal
=
casilla
If
MiPiezaAnimada.CasillaActual()
= hcasillafinal Then
MiPiezaAnimada.Mueve(hcasillafinal)
'estamos
ya en esta casilla
Return
'no
hacer nada
Endif
If
Casilla
>
MiPiezaAnimada.CasillaActual()
Then
MiPiezaAnimada.Mueve(MiPiezaAnimada.CasillaActual()
+
1)
Else
MiPiezaAnimada.Mueve(MiPiezaAnimada.CasillaActual()
-
1)
Endif
End
Explico el código:
El primer cambio que hacemos en almacenar la casilla a la que tenemos que llegar: "hcasillafinal"
Y en el método Mueve(), le asignamo su valor:
Public hcasillafinal As Integer
Public Sub Mueve(casilla As Integer)
hcasillafinal = casilla
Hacemos una comprobación, si la casilla en la que estamos actual es la casilla final, movemos a la casilla (lo hacemos por si es la primera vez que iniciamos la clase y para forzar a que se dibuje algo) y retornamos
If MiPiezaAnimada.CasillaActual() = hcasillafinal Then
MiPiezaAnimada.Mueve(hcasillafinal)
'estamos ya en esta casillaReturn 'no hacer nadaEndif
A continuación hacemos una comprobación , para saber si tenemos que movernos a la casilla superior o inferior de la que estemos:
If Casilla > MiPiezaAnimada.CasillaActual() Then
MiPiezaAnimada.Mueve(MiPiezaAnimada.CasillaActual() + 1)
Else
MiPiezaAnimada.Mueve(MiPiezaAnimada.CasillaActual() - 1)
Endif
Ahora en el observardor hacemos los siguientes cambio:
Public Sub ObservadorAnimacion_LLegadaCasilla(NumeroCasilla As Integer)
If hcasillafinal = (NumeroCasilla - 1) Then
'ha llegado al final del movimiento,y lanzo evento'informo de que jugador a llegado a la casilla NumeroCasilla
Raise Llegue(Me, NumeroCasilla)
Else
'todavia no ha llegado, tengo que seguir moviendome
Me.Mueve(hcasillafinal)
Endif
End
Si he llegado, emito el evento _LLegue
If hcasillafinal = (NumeroCasilla - 1) Then
'ha llegado al final del movimiento,y lanzo evento
Raise Llegue(Me, NumeroCasilla)
'informo de que jugador a llegado a la casilla NumeroCasilla
, sino, sigo moviendome
Else
'todavia no ha llegado, tengo que seguir moviendome
Me.Mueve(hcasillafinal)
Endif
De esta manera, si estoy en la casilla 4 y tengo que ir a la 7, primero mueve de la 4 a la 5, luego de la 5 a la 6 y finalmente de la 6 a la 7.
Aqui podeis ver un video del funcionamiento:
En el próximo articulo, ya si veremos como aplicar las reglas del juego que os comentaba en el articulo anterior.
Saludos
Julio