public void RotateAround(FerryDir whereDir, int degrees) { Console.WriteLine($"Rotate {ToString()} to {whereDir} by {degrees}"); var value = (int)(degrees / 90.0); //1, 2, 3 if (whereDir == FerryDir.L) { value *= -1; } if (value < 0) { value += 4; } value %= 4; Console.WriteLine($"val {value}"); switch (value) { case 1: //90 (x, y) = (y, -x); break; case 2: //180 (x, y) = (-x, -y); break; case 3: //270 (x, y) = (-y, x); break; } Console.WriteLine($"rotated {ToString()}"); }
static FerryDir Rotate(FerryDir currentDir, FerryDir whereDir, int degrees) { Console.WriteLine($"Rotate current: {currentDir} where: {whereDir} by: {degrees}"); var stuff = new List <(FerryDir, int)> { (FerryDir.N, 0), (FerryDir.E, 1), (FerryDir.S, 2), (FerryDir.W, 3) }; var current = stuff.Single(s => s.Item1 == currentDir).Item2; var value = (int)(degrees / 90.0); if (whereDir == FerryDir.L) { value *= -1; } Console.WriteLine($"current val: {current} to val: {value}"); current = (current + value) % 4; if (current < 0) { current += 4; } Console.WriteLine($"after turn val: {current}"); return(stuff.Single(s => s.Item2 == current).Item1); }
public void MoveByCardinal(FerryDir dir, int dist) { switch (dir) { case FerryDir.N: y += dist; break; case FerryDir.E: x += dist; break; case FerryDir.S: y -= dist; break; case FerryDir.W: x -= dist; break; default: Console.WriteLine("Not a cardinal line!"); break; } }