internal WorldCoordinates Compute(AbsoluteDirections direction, int unitDistance) { switch (direction) { case AbsoluteDirections.North: return(new WorldCoordinates(_Latitude, _Longitude - unitDistance)); case AbsoluteDirections.South: return(new WorldCoordinates(_Latitude, _Longitude + unitDistance)); case AbsoluteDirections.West: return(new WorldCoordinates(_Latitude - unitDistance, _Longitude)); case AbsoluteDirections.East: return(new WorldCoordinates(_Latitude + unitDistance, _Longitude)); } throw new NotImplementedException(); }
public bool HasZeroDisplacement(List <List <RelativeDirections> > decisions, out AbsoluteDirections curAbs) { int HSum = 0; int VSum = 0; curAbs = AbsoluteDirections.Up; for (int i = 0; i < decisions.Count; i++) { var curDList = decisions[i]; var end = curDList[curDList.Count - 1]; switch (curAbs) { case AbsoluteDirections.Right: switch (end) { case RelativeDirections.Right: curAbs = AbsoluteDirections.Down; VSum--; break; case RelativeDirections.Left: curAbs = AbsoluteDirections.Up; VSum++; break; case RelativeDirections.Front: HSum++; break; default: break; } break; case AbsoluteDirections.Left: switch (end) { case RelativeDirections.Right: curAbs = AbsoluteDirections.Up; VSum++; break; case RelativeDirections.Left: curAbs = AbsoluteDirections.Down; VSum--; break; case RelativeDirections.Front: HSum--; break; default: break; } break; case AbsoluteDirections.Up: switch (end) { case RelativeDirections.Right: curAbs = AbsoluteDirections.Right; HSum++; break; case RelativeDirections.Left: curAbs = AbsoluteDirections.Left; HSum--; break; case RelativeDirections.Front: VSum++; break; default: break; } break; case AbsoluteDirections.Down: switch (end) { case RelativeDirections.Right: curAbs = AbsoluteDirections.Left; HSum--; break; case RelativeDirections.Left: curAbs = AbsoluteDirections.Right; HSum++; break; case RelativeDirections.Front: VSum--; break; default: break; } break; default: break; } if (HSum == 0 && VSum == 0) { return(true); } } return(false); }
/// <summary> /// No one should create a warrior except the world. /// </summary> /// <param name="theWorld"></param> internal Warrior(World theWorld) { TheWorld = theWorld; CurrentDirection = AbsoluteDirections.North; }
internal WorldCoordinates Compute(AbsoluteDirections direction, int unitDistance) { switch (direction) { case AbsoluteDirections.North: return new WorldCoordinates(_Latitude, _Longitude - unitDistance); case AbsoluteDirections.South: return new WorldCoordinates(_Latitude, _Longitude + unitDistance); case AbsoluteDirections.West: return new WorldCoordinates(_Latitude - unitDistance, _Longitude); case AbsoluteDirections.East: return new WorldCoordinates(_Latitude + unitDistance, _Longitude); } throw new NotImplementedException(); }
/// <summary> /// /// </summary> /// <param name="location"></param> /// <param name="direction"></param> /// <param name="unitDistance"></param> /// <returns></returns> private IEntity _GetEntityAt(Room theRoom, WorldCoordinates location, AbsoluteDirections direction, int unitDistance) { var coordinateToCheck = (WorldCoordinates)location.Compute(direction, unitDistance); return theRoom.GetEntityAtCoordinate(coordinateToCheck); }
/// <summary> /// /// </summary> /// <param name="location"></param> /// <param name="direction"></param> /// <param name="unitDistance"></param> /// <returns></returns> private IEntity _GetEntityAt(Room theRoom, WorldCoordinates location, AbsoluteDirections direction, int unitDistance) { var coordinateToCheck = (WorldCoordinates)location.Compute(direction, unitDistance); return(theRoom.GetEntityAtCoordinate(coordinateToCheck)); }