public void TakeShot(Board board) { Point shot = null; switch (actionState) { case ActionState.FindingShip: shot = GetShotForFindingShip(board); break; case ActionState.FindingOrientation: shot = GetShotForFindingOrientation(board, shot); //shot refers to last shot taken break; case ActionState.SinkingShip: break; } Board.ShotResult shotResult = board.TakeShot(shot); switch (actionState) { case ActionState.FindingShip: AfterShotForFindingShip(shot, shotResult); break; case ActionState.FindingOrientation: AfterShotForFindingOrientation(shot, shotResult); break; case ActionState.SinkingShip: break; } //functions for each // if our last shot hit, do something // else do something else //if (!board.ShotAlreadyTakenAt(shot)) //{ // lastShotStatus = board.TakeShot(shot, out string shipStatus); // lastShot = shot; //} //if (lastShotStatus) //{ // //hit and ship not sunk logic //} //else //{ //} }
private void AfterShotForFindingShip(Point shot, Board.ShotResult shotResult) { if (shotResult == Board.ShotResult.HitWithoutSink) { //lastShot = shot; initialHit = shot; actionState = ActionState.FindingOrientation; } }
private void AfterShotForSinkingShip(Point shot, Board.ShotResult shotResult) { if (shotResult == Board.ShotResult.HitWithoutSink) { //lastShot = shot; } else if (shotResult == Board.ShotResult.Miss) { if (direction == Direction.Vertical) { shot = new Point(initialHit.X, (initialHit.Y - secondHit.Y)); } } else if (shotResult == Board.ShotResult.HitAndSink) { actionState = ActionState.FindingOrientation; } }
private void AfterShotForFindingOrientation(Point shot, Board.ShotResult shotResult) { if (shotResult == Board.ShotResult.HitWithoutSink) { //lastShot = shot; secondHit = shot; actionState = ActionState.SinkingShip; if (initialHit.X == secondHit.X) { direction = Direction.Vertical; } else if (initialHit.Y == secondHit.Y) { direction = Direction.Horizontal; } } else if (shotResult == Board.ShotResult.HitAndSink) { actionState = ActionState.FindingShip; } }