Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Laberinto

Estas en el tema de Laberinto en el foro de Visual Basic clásico en Foros del Web. Mis conocimientos en Vb son basicos, algo sé pero aun me queda mucho. Lo que quiero hacer es el escenario de un laberinto, creando una ...
  #1 (permalink)  
Antiguo 10/02/2008, 04:28
 
Fecha de Ingreso: enero-2008
Ubicación: España (Barcelona)
Mensajes: 12
Antigüedad: 16 años, 3 meses
Puntos: 0
Laberinto

Mis conocimientos en Vb son basicos, algo sé pero aun me queda mucho.
Lo que quiero hacer es el escenario de un laberinto, creando una cuadricula y asignandole las posiciones (0;1) etc...
Para luego asignarle a cada cuadrado la imagen que le corresponda (pared, camino etc.)

Dejo una foto de lo que intento hacer, no exactamente como la foto pero parecido.



Gracias de antemano.
Kraigs
  #2 (permalink)  
Antiguo 10/02/2008, 11:42
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Laberinto

Lo que puedes hacer es colocar en el Form un array de controles Picture (o mejor un control Image ya que éste tiene la propiedad Stretch) y después por código le vas colocando el picture a cada uno.

p.e.

Image1(0).Picture = LoadPicture("c:\Imagen1.jpg")
Image1(1).Picture = LoadPicture("c:\Imagen2.jpg")

..... y así hasta Image(19)
  #3 (permalink)  
Antiguo 14/02/2008, 09:18
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
Re: Laberinto

Tambien podes hacer esto:

Private Type Componer 'Creamos nuestro propio tipo de variable
Dureza As Boolean 'Necesitamos esta seccion para saber si un cuadro tiene material o esta libre
Material As Byte 'Decimos que tipo de material tendra (ladrillo,metal, etc.) cada uno le corresponde un numero de 0 a 255
' si necesitamos mas materiales modificamos la variable Byte por Integer
End Type

Private Sub Form_Load()
Dim Mapa(1 To 5, 1 To 5) As Componer 'Creamos la matriz(mapa) de 5 casilleros x 5 casilleros para el ejemplo

'Mapa(Fila,Columna)

'/////// FILA UNO //////
Mapa(1, 1).Dureza = True 'True es para decir que si hay un cuadro ocupado
Mapa(1, 1).Material = 1 'Suponemos que 1 es un cuadro de ladrillo

Mapa(1, 2).Dureza = True
Mapa(1, 2).Material = 1

Mapa(1, 3).Dureza = False
Mapa(1, 3).Material = 1

Mapa(1, 4).Dureza = False
Mapa(1, 4).Material = 1

Mapa(1, 5).Dureza = True
Mapa(1, 5).Material = 3

'/////// FILA DOS //////
Mapa(2, 1).Dureza = False 'True es para decir que si hay un cuadro ocupado
Mapa(2, 1).Material = 2 'Suponemos que 1 es un cuadro de ladrillo
'etc...
End Sub

Esto es para darle un material y ademas decir si el personaje puede ocupar ese cuadro o no (dureza)
-----------------------------------
Mas sencillo seria...

Private Sub Form_Load()
Dim Mapa(1 To 5, 1 To 5) As Byte 'Creamos la matriz(mapa) de 5 casilleros x 5 casilleros para el ejemplo

Mapa(1, 1) = 1
Mapa(1, 2) = 2
'etc.

For x = 1 To 5
For y = 1 To 5
Select Case Mapa(x, y)
Case 0
'bla bla
Case 1
'bla bla
Case 2
'bla bla
'etc
End Select
Next
Next
End Sub

----------------------
Pero recomiendo usar otros medios. Con cadenas es mas facil de llenar los valores de los niveles!!!

Private Sub Form_Load()
Dim Cuadros As String, x As Byte, Datos As String, Pos As Byte

Cuadros = "01,12,13,14,15,16,17,18,19" ' Mapa de 3x3

For x = 1 To Len(Cuadros) Step 3 'iniciamos un bucle del tamaño de la cadena
Datos = Mid(Cuadros, x, 2) 'Leer la cadena Cuadros en 2 letras
If Pos = 4 Then 'Se fija si llego a la ultima casilla de una fila
'Codigo (Pasa a otra fila)
Pos = 1 'Reinicia el contador
Else
Pos = Pos + 1
'Codigo (Pasa a otra casilla de la columna)
End If
MsgBox Datos
Next
End Sub
  #4 (permalink)  
Antiguo 14/02/2008, 11:26
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
Re: Laberinto

Bueno, viendo que se te complico entender todo esto que en realidad es algo bastante sencillo te pongo todo armado, copialo al VB6, lee los comentario y ejecuta la aplicacion para que veas que hace!!!

Necesitamos: Dos controles Shape y nombrar al segundo igual que al primero!
-----------
'Mira es facil:
'Para ver como se hace crea un rectangulo y ponelo en el form, Shape1. Crea
'otro mas y ponele Shape1, te va a decir si queres crear una matriz de controles
'le decis que si y pones este codigo.


Private Sub Form_Load()
Dim Cuadros As String, x As Byte, Datos As String, Pos As Byte, Aux As Byte

Cuadros = "01,02,03,03,02,01,02,02,02," ' Mapa de 3x3 (9 casillas),varia los num del 01 al 04

Aux = 0
For x = 1 To Len(Cuadros) Step 3 'iniciamos un bucle del tamaño de la cadena
Datos = Mid(Cuadros, x, 2) 'Leer la cadena Cuadros en 2 letras
If Pos = 4 Then 'Se fija si llego a la ultima casilla de una fila
'Codigo (Pasa a otra fila)
Pos = 1 'Reinicia el contador
Else
Pos = Pos + 1
'Codigo (Pasa a otra casilla de la columna)
End If


Select Case CInt(Datos)
Case 1
Col = &HC0E0FF 'Son colores comunes, son los que se ejecutan segun los num de arriba
Case 2
Col = &H80FF&
Case 3
Col = &HFF00&
Case 4
Col = &HFF8080
End Select

Aux = Aux + 1
Load Shape1(Aux)
Shape1(Aux).Visible = True

Shape1(Aux).BackColor = Col
If (Aux Mod 3) = 0 Then 'el 5 es la Cant de cuadros por fila
Shape1(Aux).Left = Shape1(0).Left
Shape1(Aux).Top = Shape1(Aux - 1).Top + Shape1(Aux - 1).Height
Else
Shape1(Aux).Left = Shape1(Aux - 1).Left + Shape1(Aux - 1).Width
Shape1(Aux).Top = Shape1(Aux - 1).Top
End If
Next
Shape1(Aux).Left = Shape1(0).Left 'Este es el ultimo casillero
Shape1(Aux).Top = Shape1(0).Top 'Este es el ultimo casillero

End Sub


'Paso a explicar lo que hace. el diseño del nivel esta en la variable,
'cuadros al principio. dos casilleros y una coma (,) determinan como sera,
'la casilla (en el ejemplo sera el color), por este motivo debemos poner
'todo en orden: 01,01,01, seran tres casillas seguidas de un mismo color
'o imagen. despues en Col lo que hacemos es decirle que colores y/o imagenes
'se cargaran cuando ponemos los numeros anteriores. 01 para el arbol, el 02
'las nubes, etc. o el 03 para el azul, el 04 el rojo. Para agregar mas
'tenes que poner Case 5 (valor que corresponda) y abajo llenar la variable col
' con su color correspondiente.
'En lo que sigue mas abajo, es lo que dibuja los cuadritos,aca no tenes que tocar nada,
'a excepcion de If (Aux Mod 3) = 0 Then, el 3 indica la cant de cuadritos por fila
'queremos, del resto nada. por ultimo las ultimas dos lineas son del ultimo cuadrito
'creado, que se posiciona en el lugar del primero que creamos comienzo de todo
' y es el unico que no tenemos ningun tipo de control!!! Con las imagenes es muy
'parecido, solo que cambia Shape1(Aux).BackColor = Col por Shape1(Aux).picture = LoadPicture(Col)
'pero en vez de crear Shape al comienzo tendras que hacer todo de nuevo con el
'control Image y cambiar obviamente todo los Shape1 por Image1 o lo que corresponda.
'despues en Col = &H80FF& tendremos que cambiar por Col= "(ruta de la imagen)"
'Esto es todo presiona F5 y fijate que es lo que hace y cambia los valores
'mencionados para que entiendas mejor que hace cada cosa!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:15.