main
 1namespace mars.rover.domain
 2{
 3    public class South : Heading
 4    {
 5        readonly Plateau plateau;
 6
 7        public South(Plateau plateau)
 8        {
 9            this.plateau = plateau;
10        }
11
12        public Heading turn_left()
13        {
14            return new East(plateau);
15        }
16
17        public Heading turn_right()
18        {
19            return new West(plateau);
20        }
21
22        public void move_forward_from(Coordinate x, Coordinate y)
23        {
24            if (plateau.within_y_axis(y.minus(1)))
25                y.decrement();
26        }
27
28        public bool Equals(Heading other)
29        {
30            if (null == other) return false;
31            return other is South;
32        }
33
34        public override string ToString()
35        {
36            return "S";
37        }
38
39        public override bool Equals(object obj)
40        {
41            return Equals(obj as Heading);
42        }
43
44        public override int GetHashCode()
45        {
46            return ToString().GetHashCode();
47        }
48    }
49}