Ejemplo n.º 1
0
 public Movement(Pos pos, int steps)
 {
     Pos   = pos;
     Steps = steps;
 }
Ejemplo n.º 2
0
        public Pos[] GetNewPositions(Pos pos, Pos target)
        {
            var newPos = new List <Pos>();

            if (Open[pos.Y - 1][pos.X]) //up
            {
                int newY = pos.Y - 1;
                while (Open[newY][pos.X] && !target.Equals(new Pos(newY, pos.X)) &&
                       !(Open[newY][pos.X - 1] || Open[newY][pos.X + 1]))
                {
                    newY--;
                }
                if (Open[newY][pos.X])
                {
                    newPos.Add(new Pos(newY, pos.X));
                }
            }

            if (Open[pos.Y + 1][pos.X]) //down
            {
                int newY = pos.Y + 1;
                while (Open[newY][pos.X] && !target.Equals(new Pos(newY, pos.X)) &&
                       !(Open[newY][pos.X - 1] || Open[newY][pos.X + 1]))
                {
                    newY++;
                }
                if (Open[newY][pos.X])
                {
                    newPos.Add(new Pos(newY, pos.X));
                }
            }

            if (Open[pos.Y][pos.X - 1]) //left
            {
                int newX = pos.X - 1;
                while (Open[pos.Y][newX] && !target.Equals(new Pos(pos.Y, newX)) &&
                       !(Open[pos.Y - 1][newX] || Open[pos.Y + 1][newX]))
                {
                    newX--;
                }
                if (Open[pos.Y][newX])
                {
                    newPos.Add(new Pos(pos.Y, newX));
                }
            }

            if (Open[pos.Y][pos.X + 1]) //right
            {
                int newX = pos.X + 1;
                while (Open[pos.Y][newX] && !target.Equals(new Pos(pos.Y, newX)) &&
                       !(Open[pos.Y - 1][newX] || Open[pos.Y + 1][newX]))
                {
                    newX++;
                }
                if (Open[pos.Y][newX])
                {
                    newPos.Add(new Pos(pos.Y, newX));
                }
            }

            return(newPos.ToArray());
        }