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); }