예제 #1
0
            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);
                    }
                }
            }