Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: KarlsBerg en 20 de Abril de 2007, 06:55:16 PM

Título: Componer bordes de un rio (tiles)
Publicado por: KarlsBerg en 20 de Abril de 2007, 06:55:16 PM
Hola, tengo poca experiencia en el desarollo de videojuegos y me gusta informarme antes de hacer cada cosa que tenga alguna duda, por ello queria informarme sobre los algoritmos que se suelen usar para componer las orillas de un rio, en mi mapa de tiles

No se si he hecho bien en generar un mapa aleatorio en una surface SDL de NxN donde N es igual al numero de tiles del mapa, de forma que cada pixel simboliza un tile. bien... pinto toda la surface de un verde, y genero un flujo de rio en color azul, bien, luego entrego esta surface a mi libreria isometrica de tiles, con un diccionario de colores con este formato:  (R,G,B):SDLSurfaceDelTile Asi que cada color es un tipo de tile y esta clase ya me genera un array interno de objetos Tile. bien, el tema es que ahora una vez tengo el rio debo pintar con X color (X seria un color por cada tipo de tile orilla) para asi componer todo el orillado y darle estos colores con su tile a la libreria isometrica para que genere tb orillas..

Bien, el tema principal del post es ¿Como debo componer el orillado?. los rios salen horizontal y verticalmente por esa surface que suele ser de unos 80x80 pixeles, mas o menos se que debo hacer un bucle y recorrer cada x,y de la surface y supongo que mirar los pixeles adjuntos y consultar su color, pero a la hora de ponerme a hacerlo vi que era muy relativo y amplio, y quizas yo no este en lo correcto.

Alguien podria mostrarme/explicarme o ilustrarme el procedimiento?

Adjunto una imagen del rio sin orillas y otra de las orillas.
(el rio en ocasiones tambien me genera un pixel que entra y sale solamente, debo eliminar esto?)

http://img256.imageshack.us/img256/6272/riosus5.jpg
http://img84.imageshack.us/img84/1897/orillasbr4.png
Título: Componer bordes de un rio (tiles)
Publicado por: marcode en 20 de Abril de 2007, 07:22:57 PM
Se me ocurre que primero hagas los exteriores, comprobando todos los de tierra que estén en contacto con los de agua. Y después añadir los interiores enlazando los tiles modificados.

Igual no me expliqué bien.
Título: Componer bordes de un rio (tiles)
Publicado por: KarlsBerg en 20 de Abril de 2007, 07:29:47 PM
Cita de: "marcode"Se me ocurre que primero hagas los exteriores, comprobando todos los de tierra que estén en contacto con los de agua. Y después añadir los interiores enlazando los tiles modificados.

Igual no me expliqué bien.

mmm, no no capte el tema.

Generar primero las orillas de ambos lados y rellenar con azul? :-/
Título: Componer bordes de un rio (tiles)
Publicado por: marcode en 20 de Abril de 2007, 07:45:19 PM
Ya, si es que es jodido de explicar, tampoco estaba yo muy seguro, he hecho un copy de lo que has puesto en un trozo de rio para ver cómo sería, y creo que debe resultar.

Los exteriores me refiero a los que tienen más agua que tierra, de los dos grupos de tiles que has puesto en la imagen.

Entonces (1ª imagen) se comprueban todos los de tierra y dependiendo de las zonas que tenga de agua se elige uno u otro exterior.

Después (2ª imagen), se "une" con un interior a los exteriores dependiendo de la disposición de estos.

(http://img266.imageshack.us/img266/5871/borderiogn0.jpg) (http://imageshack.us)
Título: Componer bordes de un rio (tiles)
Publicado por: KarlsBerg en 20 de Abril de 2007, 08:46:52 PM
Aja... no parece mala idea.. muchas gracias por contestar tan rapido.
Me quedo atento a otras respuestas antes de meterle mano

Un saludo y happy hacking
Título: Componer bordes de un rio (tiles)
Publicado por: yens en 20 de Abril de 2007, 09:16:11 PM
A ver si sigue avanzando a buen ritmo eso eh! Pero quitate imagenes de las firmas que no se pueden xD
Título: Componer bordes de un rio (tiles)
Publicado por: KarlsBerg en 20 de Abril de 2007, 09:20:59 PM
Ouch Ouch ! que voy a salir baneado antes del mensaje numero 10...
Título: Componer bordes de un rio (tiles)
Publicado por: t-spy en 23 de Abril de 2007, 09:34:39 AM
Hay una forma simple de hacer lo que quieres. Para cada tile de agua que tengas se obtiene un valor único dependiente de los tiles de tierra que le rodean. Para ello se hace lo siguiente:

- Valor inicial: 0
- Si hay tierra por arriba se suma 1.
- Si hay tierra por la derecha se suma 2.
- Si hay tierra por abajo se suma 4.
- Si hay tierra por la izquierda se suma 8.

El resultado es un número de 0 a 15, donde el 0 sería un tile completamente rodeado de agua y el 15 completamente rodeado de tierra. Ahora solo tienes que colocar en esa posición el tile que corresponda al valor obtenido.

Tendrás que crear 16 tiles, aunque ya los tenías que crear antes si querías cubrir todas las posibilidades.


Creo que me he explicado. Si tienes alguna duda solo tienes que preguntar.
Título: Componer bordes de un rio (tiles)
Publicado por: KarlsBerg en 30 de Mayo de 2007, 05:40:18 PM
Pues ya lo tenia hecho cuando posteaste, quizas he hecho la mayor cagada de mi vida, pero he hecho unos ifs aplicando unas reglas

Si AGUA en izquierda, agua en derecha y tal bla bla pon este tile:!

:roll:
Título: Componer bordes de un rio (tiles)
Publicado por: StraT en 21 de Junio de 2007, 08:49:49 PM
Yo haría como te han dicho abajo:

1) Eliges comprobar los de agua o los de tierra.
 -Si eliges los de tierra, has de mirar para cada uno si alguno de los colindantes es agua. Si lo es, cambias ese de tierra por un tile que "pegue". Pero ojo que puede ser que varios de los colindantes sean agua y tendrás que actuar en consecuencia. En este caso "pierdes" tierra porque estás substituyendo algunos bloques de tierra por bloques de agua y tierra.
 -Si eliges agua, comprueba en los colindantes si hay tierra y haces lo mismo. En este caso "pierdes" agua.

Yo personalmente elegiría agua porque suele ser más "utilizable" el agua que la tierra en los juegos, pero eso es decisión tuya.

Espero que te sirva, saludos!