タイトルが示すように、タイル ベースのゲームで液体を処理する必要があります。
情報:各タイルは 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;
}
}
}