Exemplo n.º 1
0
        private void UpdatePosition(Point a, MoveDir dir)
        {
            //trim out redundant back and forth movement
            if (Dna.Count() > 1 && (int)dir == (int)(Dna.Last() + 2) % 4)
            {
                //reset our position back
                switch (Dna.Last())
                {
                case MoveDir.N:
                    Pos = new Point(Pos.X, Pos.Y + 1);
                    break;

                case MoveDir.W:
                    Pos = new Point(Pos.X + 1, Pos.Y);
                    break;

                case MoveDir.S:
                    Pos = new Point(Pos.X, Pos.Y - 1);
                    break;

                case MoveDir.E:
                    Pos = new Point(Pos.X - 1, Pos.Y);
                    break;
                }
                //remove last dna record
                Dna.RemoveAt(Dna.Count() - 1);
                Path.RemoveAt(Path.Count() - 1);
                return;
            }

            Path.Add(a);
            Pos = a;
            Dna.Add(dir);
        }