public void PlayerMoveTo(Position coordinates,Guid unitId)
 {
     //does not allow moves after initialization
     if (Initialized)
         return;
     var unit = Units.FirstOrDefault(u => u.UnitId == unitId);
     if (unit != null)
     {
         UpdateUnit(columns: new { Row = coordinates.Row, Col = coordinates.Column }, where: new { MatchId = unit.MatchId, And_UnitId = unit.UnitId, And_PlayerId = unit.PlayerId } );
     }
 }
        public Message PlayerAttack(Position coordinates, Guid playerId)
        {
            //check if its player turn and that the game is active
            if (Turn != playerId || !this.PlayingNow)
                return new Message { Action = GameAction.ShotMissed, Player1 = Player1, Player2 = Player2, Command = Command.NotYourTurn, MatchId = MatchId };

            //determine if its a hit
            var unit = Units.FirstOrDefault(u => u.Row == coordinates.Row && u.Column == coordinates.Column && u.PlayerId != playerId);
            bool wasHit;
            if (unit != null && unit.Health > 0)
            {
                //update the unit status, and queue a message
                unit.TakeDamage(1);
                UpdateUnit(columns: new { Health = unit.Health }, where: new { MatchId = unit.MatchId, And_UnitId = unit.UnitId, And_PlayerId = unit.PlayerId });
                wasHit = true;
            }
            else
            {
                wasHit = false;
            }
            //queue proper message
            if (wasHit)
            {
                //check if player won the match
                if (Units.Count(u => u.Health > 0 && u.PlayerId != playerId) == 0)
                {
                    //inform players the match result
                    return MatchFinished(winner: playerId, losser: unit.PlayerId);
                }
                else
                {
                    //inform the hit
                    var msg = new Message { Action = GameAction.ShotMade,  Player1 = Player1, Player2 = Player2, Command = Command.GameAction, HealthAfterAttack = unit.Health, MatchId = MatchId, UnitId = unit.UnitId, Coordinates = coordinates };
                    return msg;
                }
            }
            else
            {
                //inform the missing
                var msg = new Message { Action = GameAction.ShotMissed, Player1 = Player1, Player2 = Player2, Command = Command.GameAction,  MatchId = MatchId, Coordinates = coordinates };

                //change the turn
                Turn = Turn == Player1 ? Player2 : Player1;
                UpdateMatch();
                return msg;
            }
        }