Foros - Stratos

Stratos => General => Mensaje iniciado por: Güarmigue en 17 de Junio de 2007, 11:44:47 PM

Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 17 de Junio de 2007, 11:44:47 PM
Hoy traigo otro modelo de juego adecuado para programadores ya que sus exigencias artísticas son menores. Además, para ir variando y por probar algo diferente a ver si así atraigo un poco más de colaboración, al final vendrán algunas preguntillas en plan deberes ;) (Si no sabes de que va esto ve AQUÍ (http://deadchannel.blogsome.com/2007/06/02/destripando-los-juegos/))

(Como siempre y porqué así se decidió por votación ;) también lo tenéis en el blog, siempre me parece más bonito allí :P)

Definición: Para centrarme en un tipo de juego, dentro de la enorme variedad de juegos de puzzle existente, hablaré de aquellos en plan bloques, como el tetris, el columns y demás variantes.

Jugabilidad: Nos encontramos ante otro modelo de juego de vida prácticamente infinita. Creo que si contáramos el número de horas jugadas en total y la variedad de público a la que ha llegado, dividido por los recursos y el tiempo de desarrollo, sin duda el tetris se llevaría la palma.

Estos juegos tienen dos trucos:
* Nunca paran, con lo que si no quieres perder tu puntuación tienes que continuar la partida hasta el final.
* Cada vez son más difíciles/rápidos, lo que hace que el reto siga en pie y cada vez tengas menos tiempo para pensar en que deberías estar haciendo otra cosa más provechosa :P

La dificultad en el tetris constaba simplemente en la velocidad del juego. Si el juego tiene una mecánica de colores o formas, como el columns, podemos aumentar la dificultad aumentando el número de colores o figuras disponibles, con lo que será más difícil ir juntando muchas del mismo tipo.

(http://deadchannel.blogsome.com/images/esquematetris.PNG)

Dificultades técnicas: Como dije al principio este es un tipo de juego que no requerirá de un gran talento artístico. Una imagen para cada tipo de pieza o incluso simplemente cuadrados de colores y un panel informativo con los datos que todos esperamos de un tetris (puntuación, nivel, pieza siguiente) Son toda la labor gráfica.

En cuanto a programación se me ocurre que este tipo de juegos se pueden controlar con una matriz que represente el estado de cada casilla y operaciones sobre ella. Por ejemplo, para el tetris podríamos tener una matriz de 1s y 0s (1 - casilla ocupada, 0 - desocupada) y que la pieza que entra se escriba por ejemplo con 2s, cada X ms comprobamos (dependiendo del nivel) si debajo de todos los dos hay un cero u otro dos, en cuyo caso bajamos la pieza una fila, en caso contrario no bajamos la fila y cambiamos los 2s por 1s y intentamos poner la siguiente pieza. Antes de sacar la pieza siguiente, comprobamos la matriz de estado por filas, si alguna fila está completa la ponemos a 0 y copiamos la fila superior, operación que repetiremos hasta que la fila superior no tenga ningún 1 o sea la última. Mientras, el movimiento de la pieza se haría de forma asíncrona mediante listeners o señales de teclado. Para comprobar si el jugador ha perdido comprobamos si alguna de las piezas de 2 quedó en la última fila.

Este es un ejemplo, debe haber otros muchos, muchos mejores y alguno peor. Aquí viene la primera pregunta de la entrega: ¿Se os ocurre otra implementación? ¿Habéis hecho un tetris por vosotros mismos y lo hicisteis de otra forma? Contadlo en los comentarios, tanto yo como los que lean este artículo lo agradecerán ;)

En cuanto a los juegos tipo columns, podríamos utilizar el mismo sistema con un número para cada tipo o color de pieza. A la hora de comprobar tendríamos que comprobar más combinaciones, ya que habría que comprobar por cada una de las tres piezas, si enlazan en horizontal, vertical o diagonal con suficientes piezas de su mismo tipo y así recursivamente para eliminar todo el posible encadenamiento...

Extras y conclusión: Hay un juego de este tipo que no puedo dejar de mencionar. Siempre he pensado que el tetris era toda una proeza ya que con la mecánica más simple consigue llegar a todo el mundo y enganchar muchísimo, y que no había juego en su campo que le hiciera sombra. Hasta que llegó el Zuma. A los que no lo conozcáis: ¡Cuidado! ¡Puede ser terriblemente adictivo! El Zuma me parece uno de los pocos juegos de esta categoría que ha sido capaz de innovar y de hacerle sombra al todopoderoso Tetris. Y ahora vienen otras preguntillas. Para los jugones, para tratar de hacerlos pensar un poco y para los developers que nos cuenten posibles implementaciones y nos instruyan con su saber ;)

¿Qué otros juegos de este estilo has jugado que te parezcan innovadores, originales o terriblemente adictivos? Yo he puesto de ejemplo el Zuma, pero puede que haya muchos más por ahí escondidos... ¿Sois capaces de pensar en otra mecánica de eliminar cuadritos-bolitas e ir sumando? ¿Hasta donde está el tetris enraizado en nuestro subsconciente? (;P) Y por último y en relación a la implementación: yo he puesto un ejemplo para los juegos de tipo matriz de bloques, pero ¿Cómo implementaríais un Zuma? ¿Cómo hacer que las bolas sigan la linea y se separen o se junten a distintas velocidades? Es como un poquito de física... ¿Se os ocurre una solución limpia y fácil? No me parece un problema trivial.

Como siempre os dejo un par de links:

Tetris (http://en.wikipedia.org/wiki/Tetris) en la wiki, historia y detalles de diseño y modo de juego.
Zuma (http://www.shockwave.com/gamelanding/zuma.jsp) - Si te gustan este tipo de juegos tienes que jugarlo.
Título: Modelo III: Puzzles de bloques
Publicado por: Mars Attacks en 18 de Junio de 2007, 11:11:34 AM
Bueno, entre el tetris y el zuma está el Frozen Bubble (que es una variante del original del que no recuerdo el nombre). Tiene 100 pantallas, y con eso lo digo todo :D
Título: Modelo III: Puzzles de bloques
Publicado por: sés en 18 de Junio de 2007, 11:37:15 AM
Siempre me gustaron Puzznic y Plotting :)
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 18 de Junio de 2007, 11:52:46 AM
Mars no te referiras al Puzzle Bubble?

Yo he jugado a los que comentas, Tetris, zuma, ploting.. y son adictivos a su manera.

La unica pega que les veo(si se le puede llamar pega) es que es solo para 1 jugador. Y entrando en estos tiempos siempre es bueno pensar poner modo multijugador y poder divertirte con mucha mas gente y alargar la duracion del juego y aumentar la diversion.

No se si conocereis esta pagina www.globulos.com, son como minijuegos en flash protagonizados por estos "globulos" para jugar contra gente de internet y bueno te lo pasas bastante bien, para mi el que mas me gusta es el de "futbol" por llamarlo de alguna manera.

Yo por ejemplo es lo que estoy intentando hacer con mi juego de tetris. Tendra un modo historia para jugar contra la CPU y multiplayer contra otra perosna , un modo de selecion de personajes, habra especiales, combos, etc.. , vamos como un modo de lucha tipo "gems fighter" que es un tipo columns con personajes del street fighter. Y bueno las reglas del tetris seran las mismas con el añadido que habran algunos bloques de hielo, agua o fuego para hacerlo un poco mas variado y menos repetitivo y contara con unos 100niveles, sin contar si ponemos niveles bonus o cosas asi.

Y juegos de este tipo que sean adictivos pues por ejemplo el Columns, o un juego de taito que ahora no me acuerdo del nombre que tambien se las traia y estuve enganchado una temporada.
Título: Modelo III: Puzzles de bloques
Publicado por: CoLSoN2 en 18 de Junio de 2007, 11:59:04 AM
Y bueno, el Zuma en si tampoco es muy original (http://caesar.logiqx.com/php/emulator_game.php?id=mame&game=puzzloop) que digamos.. Eso sí, convirtió el género en un éxito de ventas.
Título: Modelo III: Puzzles de bloques
Publicado por: Mars Attacks en 18 de Junio de 2007, 03:03:20 PM
No todos son para un solo jugador. Justamente en algunas variantes de tetris o el frozen bubble (o puzzle bubble, ése era), es más divertido jugar a dobles cuando el éxito de un jugador se convierte en "la ruina" del otro :D

Ah, antes se me olvidaba: supongo que en el tetris, darás la partida por acabada cuando algún 2 se te quede antes de la última fila (si aún está en la última fila, el movimiento sigue siendo bueno). ¿Habría que añadir una (o dos) filas extra fuera de pantalla?

Otra pregunta que siempre me ha asaltado: ¿hay algún algoritmo específico para decidir cuál va a ser la siguiente pieza o es completamente al azar? Siempre he tenido la sensación de que a veces soltaba más piezas completamente cuadradas cuando habían huecos impares y al contrario.
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 18 de Junio de 2007, 03:27:50 PM
En teoria en el tetris normal es digamos azar, aunque dependiendo de la partida pues es posible que salgan mas de una que de otra, pero es azar(o eso creo)

En el juego que estoy haciendo del tetris, habran algunos niveles que seran azar, pero habra otros donde ya podemos configurar la probabilidad de salida de las piezas para ajustar un poco la dificultad, por ejemplo la barra roja que tanto gusta solo un 10% y cosas asi y los que mas salen pues la L y los de zigzag para complicar la vida.

y bueno aui dejo una cosa que encontre el otro dia, un tio con la gameboy durante 30min se hizo el record de 999.999 puntos http://www.youtube.com/watch?v=keeSEJG4XzU

Aunque con los emuladores que hay etc... quien no dice que le haya dado a los pauses y luego lo haya retocado y tal XD ...
Título: Modelo III: Puzzles de bloques
Publicado por: CoLSoN2 en 18 de Junio de 2007, 04:50:56 PM
Cita de: "Mars Attacks"No todos son para un solo jugador. Justamente en algunas variantes de tetris o el frozen bubble (o puzzle bubble, ése era), es más divertido jugar a dobles cuando el éxito de un jugador se convierte en "la ruina" del otro :D

De este tipo, mi favorito es Baku Baku Animals. Lo jugué en Saturn y para PC hay versión también, pero el juego va en 256 colores y creo que ya no me funciona hoy en día.. :_(
Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 18 de Junio de 2007, 05:16:14 PM
Yo también me eché mis ratillos con el baku baku (la demo en verdad y creo que lo alquilé para saturn xD).  

CitarAh, antes se me olvidaba: supongo que en el tetris, darás la partida por acabada cuando algún 2 se te quede antes de la última fila (si aún está en la última fila, el movimiento sigue siendo bueno). ¿Habría que añadir una (o dos) filas extra fuera de pantalla?  

Sí, supongo que lo más cómodo sería controlar con algunas filas fuera de pantalla. Aunque también depende de la implementación, hay tetris donde puedes mover la ultima ficha aun teniendo el centro lleno, tratando de escurrirla hacia los laterales (en realidad es lo mismo, morirás 2 turnos más tarde :P) y otros que tienen una línea de máximo a una altura determinada de la pantalla y si algún bloque la sobrepasa: perdiste.

Estoy deacuerdo en que suele ser más divertido en multijugador, pero todos tenemos nuestros ratillos muertos y el pique con uno mismo también puede ser interesante. No olvidemos por ejemplo los juegos en móviles, en DS o los casual, aun hay mucho hueco para los juegos de 1 player (y siempre lo habrá).
Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 18 de Junio de 2007, 05:18:18 PM
CitarY bueno, el Zuma en si tampoco es muy original que digamos.. Eso sí, convirtió el género en un éxito de ventas.

No conocía el puzz loop, sin duda el Zuma sigue siendo para mi un juego realmente bien rematado, pero acabas de quitarle un par de puntos :P
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 18 de Junio de 2007, 06:19:36 PM
Una preguntita.

Como estais en un juego de puzzle, tetris y tal.

Como se haria que la CPU jugara al tetris? Ya que estamos buscnado y no encontramos mucho. ¿Como se deberia de programar la IA o forma para que supiera donde meter cada bloque en su sitio?

Algunos manuales, codigos fuente o cosas asi como informacion ¿?

Saludos!
Título: Modelo III: Puzzles de bloques
Publicado por: Pogacha en 18 de Junio de 2007, 10:06:46 PM
CitarComo se haria que la CPU jugara al tetris? Ya que estamos buscnado y no encontramos mucho. ¿Como se deberia de programar la IA o forma para que supiera donde meter cada bloque en su sitio?

O sea ... cada vez que va a salir un bloque nuevo tomas el bloque y lo pruebas en todas las posiciones posibles donde podrias ponerlo, por cada una de estas posiciones pruebas todas las posiciones donde podrias poner el siguiente bloque tambien. Por cada combinación evaluas Puntos_Obtenidos_Totales - Altura_Subida*Factor_De_Altura_Subida - Huecos*Factor_De_Huecos - Si_Move_Aca_Pierdes * MAXIMO_PUNTAJE_NEGATIVO.
Por cada combinación evaluas si es posible también, si la combinación de movimientos para llegar a esquema es posible (haciendo otro backtracking)
Luego te quedas con el que mas alto puntaje tenia y lo ejecutas ya previamente planificado en el backtracking de validación.

La funcion de evaluación es una heuristica ya que se desconocen los bloques siguientes. Mientras mas elaborada sea tu heuristica mejor jugará tu tetris.

El algoritmo puede simplificarse o complicarse todo lo que tu quieras, pero esa es la idea.

Saludos
Título: Modelo III: Puzzles de bloques
Publicado por: Mars Attacks en 18 de Junio de 2007, 10:11:55 PM
Te has dejado el tema de hacer parafernalias durante la bajada, para que parezca como que juega (siempre atendiendo a no fastidiarla chocándose contra algo).
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 18 de Junio de 2007, 10:45:08 PM
Jejeje si estuviera aki el programador os diria "Si muy bonito, si eso ya lo se la idea es esa , pero lo dificil es como programarla" XDDD

Vmoas que tenemos varias ideas y hemos visto algo en inet, y formas como tratar a los bloques como "1" y huecos como "0" y que el ordeandor evite situaciones donde haga:

111
101
111

Y cosas asi para que juegue bien, etc... pero como me dice, lo dificil es programarlo. Ademas de que parezca humano y no juegue perfecto que tambien cometa errores y cosas asi.

Le dire que se pasa por aki o que vea esto a ver que opina pero me imagino que diria eso XD
Título: Modelo III: Puzzles de bloques
Publicado por: Pogacha en 18 de Junio de 2007, 11:07:45 PM
Serán unas 500 lineas de codigo ... y ya planteado los algoritmos que tenes que usar no veo complejidad alguna. Se puede escribir perfectamente en 8 horas de trabajo.

El ejemplo que me nombras me hace ver que no gozan del conocimiento teorico necesario ...
No hay una forma de resolver este problema, hay millones.
Traten primero de resolver un "Solitario Frances", luego un "Trabado" y así ... en poco tiempo tomaran agilidad.


Saludos!
Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 18 de Junio de 2007, 11:20:47 PM
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:

(http://deadchannelfiles.googlepages.com/arbol.gif)

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.
Título: Modelo III: Puzzles de bloques
Publicado por: [Vil] en 18 de Junio de 2007, 11:25:53 PM
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...
Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 18 de Junio de 2007, 11:31:01 PM
Mmmm en el caso del multiplayer con combos que comenta Vil si que habría que implementar un Minimax en toda regla ;P
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 19 de Junio de 2007, 01:28:46 AM
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
Título: Modelo III: Puzzles de bloques
Publicado por: TiRSO en 19 de Junio de 2007, 11:20:29 AM
Muy buen enlace
Título: Modelo III: Puzzles de bloques
Publicado por: Güarmigue en 19 de Junio de 2007, 05:05:52 PM
Desde luego, muy bueno ese enlace matriax, lo pondré también en blog porque viene perfecto para ampliar :)
Título: Modelo III: Puzzles de bloques
Publicado por: matriax en 19 de Junio de 2007, 05:59:18 PM
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!