1

タイトルが示すように、タイル ベースのゲームで液体を処理する必要があります。

情報:各タイルは 16xPixels で、WaterLevel(バイト) があります。各タイルには水位があるため、水はその近くにある他のタイルと平均するはずです。しかし、私はそれを行うことができないようです。

このビデオのようになりたい: http://www.youtube.com/watch?v=3v9sH638nr0

しかし、私はそれを行うことはできません。ヘルプ?

if (WaterLevel > 0)
        {
            //Bottom
            if (Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].Collide == false && Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].WaterLevel != 255)
            {
                if ((int)Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].WaterLevel + (int)WaterLevel > 255)
                {
                    WaterLevel -= (byte)(255 - Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].WaterLevel);
                    Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].WaterLevel = 255;
                }
                else
                {
                    Program.Game.CurrentMap.Tiles[(int)TileLocation.X, (int)TileLocation.Y + 1].WaterLevel += WaterLevel;
                    this.WaterLevel = 0;
                }
            }
            //Left or Right
            else
            {
                bool Left = Program.Game.CurrentMap.Tiles[(int)TileLocation.X - 1, (int)TileLocation.Y].Collide;
                bool Right = Program.Game.CurrentMap.Tiles[(int)TileLocation.X + 1, (int)TileLocation.Y].Collide;
                byte Divider = 1;
                int Average = WaterLevel;
                if (Left)
                {
                    Divider += 1;
                    Average += Program.Game.CurrentMap.Tiles[(int)TileLocation.X - 1, (int)TileLocation.Y].WaterLevel;
                }
                if (Right)
                {
                    Divider += 1;
                    Average += Program.Game.CurrentMap.Tiles[(int)TileLocation.X + 1, (int)TileLocation.Y].WaterLevel;
                }
                WaterLevel = (byte)(Average / Divider);
                Average /= Divider;
                Divider -= 1;
                if (Left)
                {
                    Program.Game.CurrentMap.Tiles[(int)TileLocation.X - 1, (int)TileLocation.Y].WaterLevel = (byte)(Average / Divider);
                    Average /= Divider;
                    Divider -= 1;
                }
                if (Right)
                {
                    Program.Game.CurrentMap.Tiles[(int)TileLocation.X + 1, (int)TileLocation.Y].WaterLevel = (byte)(Average / Divider);
                    Average /= Divider;
                    Divider -= 1;
                }
            }
        }
4

0 に答える 0