![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
Cita:
PD: roman, al principio lo había pensado así pero al usar arrays limitaría demasiado el tamaño del tablero... me pareció oportuno trabajar con nodos (a pesar de que sería complicado) ya que podría crearse tableros de distintos tamaños. NOTA: Me llamó la atención de que tu tablero sea de (mxn), tengo entendido que el tablero debe ser de (nxn) ![]() Última edición por Delphius fecha: 05-11-2005 a las 15:40:58. Razón: corrección en etiquetas |
|
#2
|
||||
|
||||
|
Cita:
// Saludos |
|
#3
|
||||
|
||||
|
Pues yo abogo porque un cuadrado esté formado por 2 lineas nada más
.La idea es que esas líneas son las que estarían al Norte y al Oeste del centro del cuadrado, y dos Vecinos, VecinoSur, VecinoEste. Supongo que no se entiende, aqui va pintado un Timbiriche de 4 casillas Cada color representa un solo cuadrado. Código:
- - |1 |2 - - |3 |4
Si VecinoSur es nil significa que ese lado corresponde con el borde inferior del Timbiriche. Si VecinoEste es nil significa que ese lado corresponde con el borde Derecho del Timbiriche. Para pintar el borde izquierdo del timbiriche, pondríamos a true el Oeste de ese cuadro. Para pintar el borde superior del timbiriche, pondríamos a true el Norte de ese cuadro. Para que se cierre un cuadrado comprobamos los siguientes elementos: - Norte = True - Oeste = True - VecinoSur = nil ó bien que VecinoSur.Norte = True - VecinoEste =nil ó bien que VecinoEste.Oeste = True Personalmente lo veo conceptualmente más claro[...] una vez que se ha entendido el concepto ![]() Quizás declararlo como TObject sea demasiado, quizás con punteros sería más eficiente, por claridad, lo pongo así. PD: Desarrollar esta idea surge de las aportaciones de roman y Delphius, ya que tener claro qué cuadrado se va a pintar, y acceder a sus vecinos es bastante engorroso, quizás este híbrido pueda servir de ayuda. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 05-11-2005 a las 19:28:53. |
|
#4
|
||||
|
||||
|
Bien pensado, hace falta:
Para poder navegar y propagar los cuadrados cerrados. Me refiero a cuando se cierra un cuadrado y se puede seguir cerrando otros cuadros más. Aquí se necesita tener las direcciones de los demás cuadrados y comprobar hacia donde se puede propagar el cierre de cuadros. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 06-11-2005 a las 01:37:09. |
|
#5
|
||||
|
||||
|
Con respecto a la inteligencia artificial del juego de timbiriche, leí algunos artículos y en realidad no es nada sencillo programarlo; hay que meterse con árboles de búsqueda, heurísticas y lo propio de la inteligencia artificial, sin embargo encontré esta sencilla propuesta:
Cita:
Dot & Boxes |
|
#6
|
|||
|
|||
|
Hola, gracias por sus respuestas, he estado revisando con detenimiento cada una de las ideas expuestas, pero no alcanzo a comprenderlas del todo ya que soy relativamente nuevo en esto, además de que se me dificulta algo
, pero la lucha le hago , si pudieran explicarme las ideas aún mas detalladas se los agradecería . En lo que respecta a las ideas que tenía para realizar este programa se me atraviesa un inconveniente; les expongo la idea:Código:
pv:=0; ph:=0; for a := 0 to 5 do begin for b := 0 to 4 do begin Imagenes[a,b]:=TShape.Create(Self); Imagenes[a,b].Parent := Form1; Imagenes[a,b].Left := ph+10; Imagenes[a,b].Top := pv+10; Imagenes[a,b].height := 7; Imagenes[a,b].width := 7; Imagenes[a,b].Shape := stCircle; Imagenes[a,b].OnMouseDown:= CirclesMouseDown; Imagenes[a,b].OnMouseMove:= CirclesMouseMove; pv:=pv+50; if b=4 then begin pv:=0; end; end; ph:=ph+50; end; , gracias. |
|
#7
|
||||
|
||||
|
En qué tienes dudas, y cual de las alternativas te gusta más, porque hay distintas formas de hacerlo en este mismo hilo.
Por cierto, siempre puedes hacer referencia a través de Imagenes[fila, columna]. Veo que estas intentando hacer el cuadriculado mediante TShapes, te aconsejo que busques algún componente ya hecho. En mi caso he usado el TLMDSimplePanel de las libreria LMDTOOLS (direccion en google), son gratis, y permite dibujar un panel, poniendo las lineas por separado, es decir, pinto los bordes de blanco, y cuando se hace clic en un lateral, pinto ese lado nada más de color negro. Pintar es simplemente decirle al panel BorderSides := BorderSides + bsLeft para añadir el borde izquierdo. Si tienes que implementarlo todo a mano.... mi más sincero pésame ![]() saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 09-11-2005 a las 10:56:44. |
![]() |
|
|
|