public void Move(Level l, int x, int y) { int dx = x; int dy = y; // Follow gravitation if (l.GetSprite(x, y + 1).GetType() == typeof(Marker)) { dy = y + 1; } else { // Falls to the left or to the right if (l.GetSprite(x, y + 1).GetType() == typeof(Stone) || l.GetSprite(x, y + 1).GetType() == typeof(Diamond) || l.GetSprite(x, y + 1).GetType() == typeof(Nothing)) { if (l.GetSprite(x - 1, y + 1).GetType() == typeof(Marker) && (l.GetSprite(x - 1, y).GetType() == typeof(Nothing) || l.GetSprite(x - 1, y).GetType() == typeof(Marker))) { dx = x - 1; dy = y + 1; } else { if (l.GetSprite(x + 1, y + 1).GetType() == typeof(Marker) && (l.GetSprite(x + 1, y).GetType() == typeof(Nothing) || l.GetSprite(x + 1, y).GetType() == typeof(Marker))) { dx = x + 1; dy = y + 1; } } } // Changer if (l.GetSprite(x, y + 1).GetType() == typeof(Changer) && l.GetSprite(x, y).GetType() == typeof(Stone) && l.GetSprite(x, y + 2).GetType() == typeof(Marker)) { dy = y + 2; } } // Move if ((dx != x) || (dy != y)) { if ((dy - y) == 2) { // changer l.SetSprite(dx, dy, new Diamond()); } else { l.SetSprite(dx, dy, l.GetSprite(x, y)); if (l.GetSprite(dx, dy).GetType() == typeof(UvStone)) { l.SetSprite(dx, dy, new Stone()); } } l.SetSprite(x, y, new Nothing()); // Kill digger if necessary if (l.GetSprite(dx, dy + 1).GetType() == typeof(Digger)) { l.Digger.Die(); } if (l.GetSprite(dx, dy + 1).GetType().BaseType == typeof(Ghost)) { Ghost g = (Ghost)l.GetSprite(dx, dy + 1); g.Blast(l); } } }