public enum TiposDeCasilla
CASILLA_LIBRE = 0 ' son las casillas por donde se puede mover libremente.
CASILLA_PARED = 1 ' son casillas que impien que se pueda mover en esa dirección y que marcan claramente el laberinto.
CASILLA_OBSTACULO = 2 ' son casilas que se comportan como una pared y que requieren cierta acción conocida para acceder a su interior (por ejemplo recoger un objeto dentro del laberinto
CASILLA_PASADIZO_OCULTO = 3 ' es una pared, pero que en determinada situación se comporta como una casilla libre o como una pared
CASILLA_PUERTA = 4 ' una o varias casilas pueden ser elpunto de salida del laberinto y la entrada a otro laberinto
CASILLA_TESORO = 5 ' una o más casillas pueden representar un tesoro que esdeseable recoger y da puntos.
CASILA_META = 6 ' una o más casillas puede ser el objeto final perseguido en el laberinto.
end enum
private Mapa(0 to 24, 0 to 24) as TiposDecasilla ' define un mapa de 25x25 casillas
private Mx as byte ' casilla actual del Mapa en la cordenada X
private My as byte ' casila actual del Mapa en la cordenada Y
private cX as byte ' casilla propuesta para moverse a ella en el eje X
private cY as byte ' casilla propuesta para moverse a ella en el eje Y
private sub CrearMapaParcial(byval Casillas() as byte)
dim x as byte, y as byte, n as integer
for y =0 to 24
for x =0 to 24
Mapa(x,y)=casillas(n)
n=n +1
next
next
end Sub
private sub CrearMapa
dim c(0 to 624) as byte
dim tc as TiposDeCasilla
' fija las paredes del laberinto, para ello recorre la matriz casillas, el método para decidir las paredes según tu creas o uses...
tc= CASILLA_PARED
c(20)=tc: c(120)=tc
for k= 50 to 80
c(k)=tc
next
call CrearMapaParcial(c)
' procedemos de modo similar para marcar las casillas restantes del tipo que se desee, por ejemplo marquemos ahora las puertas
erase c ' borramos el contenido previo de la matriz estática 'c()'
tc = CASILLA_PUERTA
c(22)=tc : c(424)= tc : c(375)= tc: c(615) = tc ' marcamos 4 puertas sobre el mapa
call CrearMapaParcial(c) ' añadimos las puertas al mapa
End Sub
Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
'Movimiento .. mejor: ¿ puedo moverme ahí ?
Select Case KeyCode
Case vbKeyUp
cX = MX : cY = My - 1
If CasillaLibre(cx,cy)=true then
Picture1.Top = Picture1.Top - 10
mX= cx: My=cY ' la casilla propuesta a ser ocupada es ahora la actual, la ocupada
else
beep
end if
Case vbKeyDown
cX = MX : cY = My + 1
If CasillaLibre(cx,cy)=true then
Picture1.Top = Picture1.Top + 10
mX= cx: My=cY ' la casilla propuesta a ser ocupada es ahora la actual, la ocupada
else
beep
end if
Case vbKeyLeft
cX = MX - 1 : cY = My
If CasillaLibre(cx,cy)=true then
Picture1.Left = Picture1.Left - 10
mX= cx: My=cY ' la casilla propuesta a ser ocupada es ahora la actual, la ocupada
else
beep
end if
Case vbKeyRight
cX = MX + 1 : cY = My
If CasillaLibre(cx,cy)=true then
Picture1.Left = Picture1.Left + 10
mX= cx: My=cY ' la casilla propuesta a ser ocupada es ahora la actual, la ocupada
else
beep
end if
End Select
End Sub
' determina que se debe hacer al pretender ocupar dicha casilla y aparte devuelve si la casilla es ocupable o no.
private Function CasillaLibre(byval X as byte, byval Y as byte) as boolean
select case Mapa(x,y)
case CASILLA_LIBRE ' se puede mover a dicha casilla, y no hace nada más
CasillaLibre = True
case CASILLA_PARED = 1 ' no se puede mover y no hace nada más
exit function
case CASILLA_OBSTACULO = 2 ' si se tiene un objeto recogido del mapa es libre puede ser cruzada aunque se vea como pared. si no, no
CasillaLibre = Obstaculos(25) ' si previamente visitamos la casilla 25, (y=0, x=24) allí había un objeto (llave) que permite atravesar el obstáculo.
case CASILLA_PASADIZO_OCULTO = 3 ' a diferencia de obstáculo, es oculto porque no se dibuja de manera especial (como ocurre con abstáculo), sino como pared
' si la condición exigida se cumple casillalibre=true, si no false... normalmente si la condición se cumple, en dicho instante que se cumpla podría
' abrirse un hueco en la pared, dejando entonces vía libre de acceso... es decir en ese momento un tramo marcado como pared es marcado como libre y dibujado como libre...
' en un pasadizo oculto puede haber tesoros extras, no visibles hasta entonces.
case CASILLA_PUERTA = 4 ' una o varias casilas pueden ser elpunto de salida del laberinto y la entrada a otro laberinto
call CambiarDeMapa(x,y) ' accedemos a otra 'sala' otro mapa, debemos guardar el mapa actual antes de cargar el nuevo mapa, el punto de entrada son las cordenadas de salida de éste...
CasillaLibre = True
case CASILLA_TESORO = 5 ' esta casilla contiene un objeto (para el caso, simplificamos a tener una ''lave de activación'' de un obstáculo...
Obstaculos((y* 25) + x)=true ' se ha recogido un tesoro en la casilla, en este caso simplemente habilita un obstaculo....
' call RetirarTesoroDelMapa(x,y)
CasillaLibre = True
case CASILA_META = 6
Call ContarPuntuacion
call FinPartida
End
end select
end functon