Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Problemas Con Función Recursiva En Gambas2
Autor Mensaje
Responder citando   Descargar mensaje 
Mensaje Problemas Con Función Recursiva En Gambas2 
 
Hola Comunidad.

He estado haciendo un juego similar al busca minas.Y encontré  un problema que si pongo un tablero algo mayor de 10x10 la
función recursiva de buscar limites con otras celdas me da desbordamiento. Cosa que en Gambas3 no ocurre.

La función es esta:

PUBLIC SUB buscalimites(x AS Integer, y AS Integer)
  DIM i, j, vecinos AS Integer
 
  FOR i = x - 1 TO x + 1
    FOR j = y - 1 TO y + 1
            IF (i >= 0) AND (i < maxhor) AND (j >= 0) AND (j < maxver) THEN            
              IF mapademinas[i, j] = 0 THEN  'Para evitar el problema si estamos en la columna 0
                 marcavacio(i, j)
                 contador += 1
                 vecinos = cuentavecinos(i, j)
                 IF vecinos = 0 THEN
                  buscalimites(i, j)
                 ELSE
                   Pizarra.Refresh()
                   Draw.Begin(Pizarra)
                   Draw.FillColor = Color.Gray
                   Draw.FillStyle = Fill.Solid
                   Draw.Rect(i * anchoCelda, j * altoCelda, anchoCelda, altoCelda)    
                   Draw.ForeColor = Color.White
                   Draw.Font.Size = anchoCelda
                   Draw.Text(vecinos, i * anchoCelda, j * altoCelda, anchoCelda, altoCelda, Align.Center)
                   Draw.End
                ENDIF
              ENDIF
            ENDIF
    NEXT
  NEXT
END
 


Y aquí la función para ver cuantas celdas vecinas contiene o no una mina.

PUBLIC FUNCTION cuentavecinos(x AS Integer, y AS Integer) AS Integer
  DIM i, j AS Integer
  DIM vecinosprox AS Integer
  
  vecinosprox = 0  
  IF mapademinas[x, y] = 1 THEN
    vecinosprox = -1
  ELSE  
    FOR i = x - 1 TO x + 1
        FOR j = y - 1 TO y + 1
              IF (i >= 0) AND (i < maxhor) AND (j >= 0) AND (j < maxver) THEN
                IF (mapademinas[i, j] = 1) THEN vecinosprox += 1
              ENDIF
        NEXT
    NEXT
  ENDIF
  RETURN vecinosprox
  
END
 


Una imagen, como veis funciona con las dimensiones que puse arriba.

 minas

En Gambas3 la función va mejor que en Gambas2:

 minas2

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 18 Noviembre 2011, 00:48; editado 1 vez 
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 Problemas Al Instalar Gambas2 [SOLUCIONADO] rjimenez Instalación 5 Sabado, 17 Octobre 2009, 18:48 Ver último mensaje
rjimenez
No hay nuevos mensajes Problemas Al Iniciar Gambas2 skhaliburg General 5 Miercoles, 12 Enero 2011, 16:03 Ver último mensaje
skhaliburg
No hay nuevos mensajes Problemas Que Ocurren Al Convertir De Gamb... Shell General 4 Viernes, 05 Abril 2013, 23:02 Ver último mensaje
jousseph
No hay nuevos mensajes Problemas Con La Apariencia De Gambas2.19 ... mg_arep19 Instalación 2 Lunes, 30 Septiembre 2013, 19:09 Ver último mensaje
mg_arep19
 

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