Páginas

jueves, 22 de enero de 2015

Desarrollo de Juegos de Tablero (7): Recorrer camino de casillas en el tablero.


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"

Public hcasillafinal As Integer

Y en el método Mueve(), le asignamo su valor:
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:




Enlace de descarga: Alojado en google drive


En el próximo articulo, ya si veremos como aplicar las reglas del juego que os comentaba en el articulo anterior.

Saludos

Julio