Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Modelo III: Puzzles de bloques

Iniciado por Güarmigue, 17 de Junio de 2007, 11:44:47 PM

« anterior - próximo »

Güarmigue

Me alegro de que os vayáis animando a participar :) matriax, voy a tratar de desarrollar un poco más la idea que ha dado Pogacha, que es la que tenía yo también en mente. Puedes también pasarte por la anterior entrada que hice del tema ya que pongo algunos enlaces y hablo un poco de árboles de decisión y estrategias de búsqueda de soluciones. En este caso es más sencillo que en el esos ya que no tienes un enemigo que te coma fichas o te cambie la situación de juego, así que solo necesitaremos un árbol de exploración de soluciones y una función de evaluación, veamos:

Como bien escribió Pogacha la cosa es explorar todas las combinaciones. Si tu tetris tiene el ancho acostumbrado esto no supondrá ningún trauma computacional para tu ordenador. El proceso es simple exploración exaustiva:

- Coges la pieza que toca en 1 posición, la pruebas en  todas las columnas.
- Cambias la posición y vas al paso 1 hasta quedarte sin posiciones.

Un pequeño ejemplo en forma de imagen, esto sería el arbol para una posición, así con todas:



Ahora la gracia está en contabilizar los puntos en cada rama del árbol: en  un tetris normal contabilizaríamos las filas eliminadas, en el ejemplo la última hoja contaría un punto y las demás cero.

El árbol podrá tener tanta profundidad como piezas por adelantado sepa el jugador. Una vez tenemos todas las posibilidades con sus puntuaciones solo tenemos que escoger la de mayor puntuación.

Una forma de optimizar que se me ocurre es usando conocimiento heurísco para no tener tantas ramas. Por ejemplo con la barra larga podemos en lugar de probar en todos lados buscar en que columna  hay varias filas con un hueco abierto. De esta forma y igual que todos hacemos a la hora del tetris podemos programar directamente patrones o  posiciones que son habituales en el juego, con el consiguiente ahorro de ramas del árbol ;)

En cuanto a que la piezas haga florituras antes de cologarse... hombre tendrá que ponerse en la posición y columnas adecuadas, eso es solo girar a der. o a izq hasta llegar a posición X y mover hasta llegar a columna Y  8)

Editado: ¡Ah! no vi una cosilla que comentabas, para que pareca humana como tu dices puedes meterle un poco de aleatoriedad. Dependiendo de la dificultad tendrá N% de escoger la segunda rama mejor en lugar de la mejor, por ejemplo.
url=http://deadchannel.blogsome.com]Dead Channel[/url] - Blog de informática, juegos, tortugas y lo que me viene dando en gana ;P

[Vil]

Bueno, realmente si se conoce la proxima pieza, y por tanto la IA debiera de conocerla tambien y hacer uso de esa información... lo cual complica las cosas bastante. También suma, que si es un tetris como el de gameboy, podias mover la pieza cuando ya estaba "posada" para encajarla lateralmente, y eso supondria unas cuantas mas de comprobaciones.
Y si quires complicar esto mas aún... si fuera un multiplayer donde lo ideal es enviar "combos" al otro jugador... entonces ya es mas dificil, porque es mejor aguantar y mandar 4 lineas con un palo de 4 casillas (si te lo montas bien) que mandar lineas de una en una.

En fin, ni idea de como abordar to esto, solo era por dar la murga

[edito]Güarmigue ya ha comentado algunas cosillas de las q decia yo...

Güarmigue

Mmmm en el caso del multiplayer con combos que comenta Vil si que habría que implementar un Minimax en toda regla ;P
url=http://deadchannel.blogsome.com]Dead Channel[/url] - Blog de informática, juegos, tortugas y lo que me viene dando en gana ;P

matriax

Bueno actualmente el programador se esta informando y siguiendo esto:

http://www.colinfahey.com/tetris/tetris.html

Espero que vaya todo bien y funcione :)

En nuestro caso los "combos" o mejor dicho "hits" se haran cuando pongas una pieza antes de un timepo determinado. Con ello llenaras una barra. Si cojes un item con la barra llena haras un especial que le enviaras al 2 jugador.

Por poner un ejemplo, le podras enviar piezas de piedra formada por 4 bloques que seran indestructibles. Sin embargo si tienes la barra "max" llena y coges ese item para usar, haras un especial de ese objeto y en lugar de enviarle a tu "amigo" una piedra de 4 bloques se la enviaras de 9 bloques.

Aunque bueno primero a ver si conseguimos que se comporte bien y luego ya vendran las filigranas XD
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

TiRSO


Güarmigue

Desde luego, muy bueno ese enlace matriax, lo pondré también en blog porque viene perfecto para ampliar :)
url=http://deadchannel.blogsome.com]Dead Channel[/url] - Blog de informática, juegos, tortugas y lo que me viene dando en gana ;P

matriax

De nada, aunque el merito es del programador que lo encontro.

Esta todo bastante bien explicado y to en su sitio, aunque algo largo y en ocasiones dificultoso de leer pero todo lo necesario y explcaido esta ahy.

Yo el que he encontrado es este:
http://erwin.ried.cl/?modo=visor&elemento=211

Aunque como de programacion no se mucho no se si sera interesante aunque el programador me ha dicho que esta todo un poco ofuscado y tal pero se podria sacar alguna idea de ahy todo se mirara.

Y bueno deciros que nuestro "niño"(IA de la CPu en el tetris) ya se pasa los niveles y juega dentro de lo que cabe bien aunque comete bastantes errores o errores graves, y bueno juga a hacerse las mas lineas de golpe intentado poner todo en un sitio y cuando sale la pieza larga ponerla y hacerse 4.

Nos falta mejorar que se comporte como un humano o al menos lo parezca y rote las fichas y haga un poco el tonto, pero a lo largo de la semana esperemos tener algo mejor.

Saludos!
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.