Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Comienzo De Un Editor De Laberintos O De Carácteres
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Comienzo De Un Editor De Laberintos O De Carácteres 
 
Hola!.

Estoy (entre aplicaciones que una y otra se me ocurren) haciendo un comienzo de editor de laberinto o caracteres.
Esta muy muy verde.Pero la idea es de de practicar y ver que hace.

En esta imagen recuerda una especie de editor de gráficos definidos por el usuario.(G.D.U)
(Reconozco que me tira mucho la época de los 8 bits).

 pantallaeditor

La aplicación crea una rejilla y luego haces clic en una de la celdas y se rellana con una imagen de 32x32.
Haciendo de nuevo click se elimina y queda en blanco la celda en concreto.

Me encontré ciertos problemas usando un array de objetos y opte por una colección, que le añades el índice.
Buscaba en el array de picturebox un valor que no existia (el last.tag). El número de elementos que había
en el array no era el mismo y este índice del componente llegaba a ser mayor que el de los del array.
Ahora ya funciona.

Tengo otras cuestiones, pero es mas bien por afinar un poco.
Puedo grabar el mapa creado y cargarlo. El archivo texto que genera, cuando acaba, genera un espacio
entre "muro" creado, para que no este todo junto. En la rutina de lectura de este archivo de texto.
Leo el archivo con LINE INPUT, pero claro hay que asignar ese valor leído a algo, aunque sea
un espacio, lo asigno a una variable que no va a ninguna parte.No tiene uso, pero me hace el
apaño.

Const tablero As Integer = 480
Const celda As Integer = 32  
Const picmuro As String = "Bloque.png"

Private muro As PictureBox  
Private amapa As New Collection
Private cuentamuros As Integer


Public Sub _new()
  
End

Public Sub Form_Open()
  
  Me.Caption = "Editor de laberinto"
  Me.Center
  dibujaRejilla
  
End

Public Sub dibujaRejilla()
  
  Dim x As Integer

  Dim y As Integer
  
  drwArea.Clear
  Draw.Begin(drwArea)
  For y = 0 To tablero Step celda
    Draw.Line(0, y, tablero, y)        
  Next
  
  For x = 0 To tablero Step celda
    Draw.Line(x, 0, x, tablero)        
  Next    
  Draw.End
  
End

Public Sub drwArea_MouseDown()
  
  Dim casillax As Integer
  Dim casillay As Integer  
  
  casillax = Int(Mouse.x / celda)
  casillay = Int(Mouse.y / celda)  
  
  muro = New PictureBox(drwArea) As "GrupoMuro"
  With muro
    .Picture = Picture[picmuro]
    .Width = celda
    .Height = celda
    .x = casillax * celda
    .y = casillay * celda  
    .Tag = cuentamuros
  End With    
  amapa.Add(muro, cuentamuros)
  cuentamuros += 1
End

Public Sub GrupoMuro_MouseDown()
  
  'Hacemos click sobre un muro y lo eliminamos del mapa de muros y como objeto existente en el drawingarea
  
  amapa.Remove(Last.Tag)  
  Last.delete()  
  cuentamuros -= 1
    
End

Public Sub btnSalir_Click()

  Me.Close

End

Public Sub btnGraba_Click()

  Dim fichero As String  
  Dim unpicturebox As PictureBox
      
  For Each unpicturebox In amapa
      With unpicturebox
        fichero &= .Width & "\n"
        fichero &= .Height & "\n"
        fichero &= .X & "\n"
        fichero &= .Y & "\n"
        fichero &= .Tag & "\n"    
      End With  
    fichero &= "\n"      
  Next
  If Dialog.SaveFile() Then Return
  File.Save(Dialog.Path, fichero)
  
End

Public Sub btnLeer_Click()

  Dim unpicturebox As PictureBox
  Dim fichero As File
  Dim unespacio As String
  
  For Each unpicturebox In amapa
    unpicturebox.Delete
  Next
  
  If Dialog.OpenFile() Then Return  
  fichero = Open Dialog.Path For Input
  
  Do While Not Eof(fichero)
    muro = New PictureBox(drwArea) As "GrupoMuro"
    
    With muro
      .Picture = Picture[picmuro]    
      Line Input #fichero, .Width
      Line Input #fichero, .Height
      Line Input #fichero, .X
      Line Input #fichero, .Y
      Line Input #fichero, .Tag
      Line Input #fichero, unespacio
    End With
    amapa.Add(muro, cuentamuros)
    cuentamuros += 1
  Loop
  Close #fichero
End
 


Bueno, continuaremos con esto si es que no se me ocurre otra cosa y no abarco..

Saludos

CreaLaberinto.tar.gz
Descripción:  
Descargar
Nombre del archivo: CreaLaberinto.tar.gz
Tamaño: 8.26 KB
Descargado: 25 veces
CreaLaberinto.tar.gz
Descripción:  
Descargar
Nombre del archivo: CreaLaberinto.tar.gz
Tamaño: 8.26 KB
Descargado: 25 veces
CreaLaberinto.tar.gz
Descripción:  
Descargar
Nombre del archivo: CreaLaberinto.tar.gz
Tamaño: 8.26 KB
Descargado: 25 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 14 Febrero 2013, 14:26; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comienzo De Un Editor De Laberintos O De Carácteres 
 
Hola!

Para localizar la existencia de muros tuve que usar un array bidimensional, asignarle el valor uno cuando existe y
0 cuando no.

He añadido una rutina para que el personaje se pueda mover por el laberinto, pero me encuentro que a la respuesta de los cursores
también se refleja el cambio de foco en los botones que se incluyen en el formulario.  

Estoy usando el evento KeyPress del formulario.

Public Sub Form_KeyPress()
  
  Select Case Key.Code
    Case Key.Up        
      If maplab[Int(heroe.x / celda), Int((heroe.Y - celda) / celda)] = 1 Then  
        heroe.Y = heroe.Y
      Else
        heroe.Y -= celda
      Endif
    Case Key.Down
      If maplab[Int(heroe.x / celda), Int((heroe.y + celda) / celda)] = 1 Then
        heroe.Y = heroe.Y
      Else
        heroe.Y += celda
      Endif
    Case Key.Right
      If maplab[Int((heroe.x + celda) / celda), Int(heroe.Y / celda)] = 1 Then
        heroe.X = heroe.X
      Else
        heroe.X += celda
      Endif
    Case Key.Left
      If maplab[Int((heroe.x - celda) / celda), Int(heroe.y / celda)] = 1 Then
        heroe.X = heroe.X
      Else
        heroe.x -= celda
      Endif
  End Select            
  
End
 


¿ Que evento seria mejor para que los botones no se percatasen de que estoy usando los cursores ?.
Podría cambiar a la pulsación de teclas determinadas en vez de usar cursores.
Creo que no va, si uso el evento Keypress en el DrawingArea.

También puedo hacer uso de botones para desplazar el personaje.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Comienzo De Reloj Shell Aplicaciones/Fragmentos de Código 5 Sabado, 30 Noviembre 2013, 13:12 Ver último mensaje
Shell
No hay nuevos mensajes Codificación De Carácteres Shell General 1 Jueves, 18 Diciembre 2014, 18:13 Ver último mensaje
Shell
No hay nuevos mensajes Reposicionar Casualmente Los Carácteres D... vuott Aplicaciones/Fragmentos de Código 6 Lunes, 25 Julio 2016, 08:55 Ver último mensaje
Shell
No hay nuevos mensajes Otros Carácteres Shell General 0 Jueves, 31 Agosto 2017, 12:30 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron