Tengo un juego basado en cuadrículas (plataformas) en el que he basado todo en mosaicos. Tengo fichas que son sólidas y líquidas. Estoy tratando de encontrar una buena manera de hacer que las baldosas de agua simulen el agua de una manera aproximada.Simulación en 2D de agua/líquido en cuadrículas (basado en fichas de plataformas)
Por el momento tengo el sistema actual: Cuando se agrega una baldosa de agua sobre otra baldosa de agua, agrega 1 a la baldosa de agua a continuación. El número indica la presión.
Así es como parece en la actualidad
[0] <- This water tile has 0 in pressure.
[1] <- This water tile has 1 in pressure.
si añado otra ficha agua al lado de la de abajo, efectúa la búsqueda de izquierda, derecha y arriba si hay casillas de agua y inheritates el mayor presión a su alrededor.
Ejemplo:
[0]
[1][1]
Y aquí es un ejemplo más grande después de la adición de algunas casillas de agua:
[0][0]
[1][1][1][1]
[2][2][2][2][2]
Entonces hago cada azulejo agua que tiene una presión que es igual o mayor que 1 intenta mover izquierda/derecha si hay espacio libre, luego ajuste la presión a 0 y verifique si puede heredar la presión alrededor de las baldosas vecinas si hay alguna.
Este sistema funciona muy bien, excepto en el caso en que las baldosas de agua se eliminan de la parte superior.
Si quito las casillas de agua superiores desde el último ejemplo:
[1][1][1][1]
[2][2][2][2][2]
entonces tenemos la fila superior a la presión 1, debe tener 0 en la actualidad y la fila inferior debe tener 1.
¿Existe algún sistema más inteligente que pueda implementar para hacer esto de forma más adecuada?
Las siguientes son las restricciones:
Cada mosaico sólo puede comprobar sus vecinos azulejos. El mosaico puede tener cualquier función definida. El mosaico puede tener cualquier variable para almacenar datos.
¿Pueden encontrar un mejor sistema que funcione mejor que el mío?
El caso de prueba habitual que hago es:
[]
[] should become [][]
[]
[]
[] should become [][][]
[]
[][][] should become [][][][]
Suponiendo que el juego se ejecuta por un tiempo.
¡Cualquier sugerencia sería más que bienvenida!