Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2005
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Cita:
Empezado por roman
Esto lo comencé a escribir antes de ver que ya Delphius había proporcionado una idea concreta. Analiza ambas para ver cuál te acomoda más. Puede ser que la de él sea más viable, no lo sé. El punto es que tomes la que facilite más la búsqueda del cuadrado.
Cita:
Empezado por Yo
Para un problema pueden existir miles de soluciones, sería conveniente que nos indiques la tuya para poder ofrecerte una ayuda más precisa.
Tal como lo dije antes, para un problema hay muchas soluciones.... Habría que ver como lo estaba pensando mifiar, lo ideal sería "ajustar" sus ideas más que ofrecerle alternativas.

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)
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 05-11-2005 a las 15:40:58. Razón: corrección en etiquetas
Responder Con Cita
  #2  
Antiguo 05-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Delphius
NOTA: Me llamó la atención de que tu tablero sea de (mxn), tengo entendido que el tablero debe ser de (nxn)
Pues no sé si hay alguna regla oficial. En mis tiempos de escolar, hace muchas lunas, lo jugábamos en cualquier papel cuadriculado que tuviéramos a mano y el tamaño del "tablero" era proporcional a qué tan aburrida estaba la clase del profesor.

// Saludos
Responder Con Cita
  #3  
Antiguo 05-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
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

Ya sé que queda Abierto por la derecha y por abajo, veamos la declaración en delphi:
Código Delphi [-]
type
Tcuadrado = class;

Tcuadrado = Class(Tobject)
public
   Norte: Boolean;
   Oeste:Boolean;
   VecinoSur:Tcuadrado;
   VecinoEste:Tcuadrado;
end;

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.
Responder Con Cita
  #4  
Antiguo 05-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Bien pensado, hace falta:
Código Delphi [-]
type
Tcuadrado = class;

Tcuadrado = Class(Tobject)
public
   Norte: Boolean;
   Oeste:Boolean;

   VecinoSur:Tcuadrado;
   VecinoEste:Tcuadrado;
   VecinoNorte:Tcuadrado;
   VecinoOeste:Tcuadrado;
end;
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.
Responder Con Cita
  #5  
Antiguo 06-11-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 22
Héctor Randolph Va por buen camino
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:
The computer player is to follow a very simple AI algorithm to determine which side should be selected.

1. If the fourth side of a box can be selected, select such a side. If multiple fourth sides exist, randomly select one of them.
2. If no fourth side exists and a first or second side of a box can be selected, select such a side. If multiple first or second sides exist, randomly select one of them.
3. If only the only choice is selecting the third side of a box, select such a side. If multiple third sides exist, randomly select one of them.
Por lo pronto les dejo un enlace bastante entretenido

Dot & Boxes
Responder Con Cita
  #6  
Antiguo 09-11-2005
mifiar mifiar is offline
Registrado
 
Registrado: nov 2005
Posts: 9
Poder: 0
mifiar Va por buen camino
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;
Es para crear la cuadrícula; lo que sucede es que no se como hacer referencia a un elemento en particular, dado que son creados en tiempo de ejecución. Tambien realicé un evento OnMouseDown y se lo asigné a cada uno de los puntos (o pequeños circulos) de la cuadrícula, con el objetivo de obtener la posicion que ocupan dentro de la forma, pero esa posicion la toma con relacion al objeto creado y no a la forma; conocen alguna manera de hacer que tome la posicion con respecto a la forma ? Se siguen aceptando sugerencias , gracias.
Responder Con Cita
  #7  
Antiguo 09-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:44:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi