コード例 #1
0
        private async Task <IActionResult> CreateGameEventParticipationForGroup(
            GameEventDto gameEvent,
            string groupName,
            IEnumerable <string> users,
            SendGameEventInvitationDto.GameEventLinkGenerator gameEventLinkGenerator)
        {
            try
            {
                await _gameEventParticipationService.CreateGameEventParticipationsIgnoringErrorsAsync(
                    gameEvent.Id,
                    gameEventLinkGenerator,
                    users);
            }
            catch (ApplicationException exception)
            {
                return(Error.FromController(this).ErrorJson("Error!", exception.Message, HttpStatusCode.BadRequest));
            }
            catch
            {
                return(Error.FromController(this).ErrorJson(
                           "Error!",
                           "An unexpected error has occured while processing your request.",
                           HttpStatusCode.InternalServerError));
            }

            return(Ok(
                       new
            {
                title = "Invite sent.",
                message =
                    $"An email with your invitation to the {gameEvent.Name} event has been sent to {groupName}."
            }));
        }
コード例 #2
0
ファイル: GameManager.cs プロジェクト: leifhv/Kongeleken
        private void HandleTurnCardEvent(GameEventDto gameEventDto, Game game)
        {
            var player = game.Players.Single(p => p.Id == gameEventDto.PlayerId);
            var card   = player.CurrentCard;

            card.IsTurned = true;

            if (game.Players.All(p => p.CurrentCard.IsTurned))
            {
                var lowestCard = game.Players.Select(p => p.CurrentCard.Value).Min();
                var loosers    = game.Players.Where(p => p.CurrentCard.Value == lowestCard);

                if (loosers.Count() == 1)
                {
                    game.GameActions.Add($"Lowest card is {lowestCard}. Looser this round is {loosers.First().Name}.  DRINK!");
                }
                else
                {
                    game.GameActions.Add($"Lowest card is {lowestCard}. Loosers this round are " + string.Join(",", loosers.Select(l => l.Name)) + ".  DRINK!");
                }

                //Handle king
                var playersWithKing = game.Players.Where(p => p.CurrentCard.Value == CardValue.King);
                foreach (var playerWithKing in playersWithKing)
                {
                    game.GameActions.Add($"{playerWithKing.Name} got a king! ***DRINK!***");
                }

                //TODO:
                //For each player that gets a queen every other player with a picture card(king, queen or jack) must drink some of his personal drink.
                //For each player that get a jack every other player must drink some of his personal drink.
                //If a player receives a 6 of hearts he is to be given three new cards and all players must act according to these cards before a new round is started.
                //If a player receives a 6 of diamonds the player to the left of him is to be given three new cards and all players must act according  the these cards before a new round is started.
            }
        }
コード例 #3
0
        private async Task <IActionResult> SendGameEventInvitation(
            GameEventDto gameEvent,
            string userName,
            SendGameEventInvitationDto sendGameEventInvitationDto)
        {
            try
            {
                await _gameEventParticipationService.CreateGameEventParticipationAsync(sendGameEventInvitationDto);
            }
            catch (ApplicationException exception)
            {
                return(Error.FromController(this).ErrorJson("Error!", exception.Message, HttpStatusCode.BadRequest));
            }
            catch
            {
                return(Error.FromController(this).ErrorJson(
                           "Error!",
                           "An unexpected error has occured while processing your request.",
                           HttpStatusCode.InternalServerError));
            }

            return(Ok(
                       new
            {
                title = "Invite sent.",
                message =
                    $"An email with your invitation to the {gameEvent.Name} event has been sent to {userName}."
            }));
        }
コード例 #4
0
 public static RemoveFromGameEventViewModel ToRemoveFromGameEventViewModel(
     this GameEventDto gameEventDto,
     string userName) =>
 new RemoveFromGameEventViewModel
 {
     Id       = gameEventDto.Id,
     Name     = gameEventDto.Name,
     UserName = userName
 };
コード例 #5
0
 public static EditGameEventViewModel ToEditViewModel(this GameEventDto gameEventDto) =>
 new EditGameEventViewModel
 {
     Id    = gameEventDto.Id,
     Name  = gameEventDto.Name,
     Date  = gameEventDto.Date,
     Place = gameEventDto.Place,
     Games = string.Join('\n', gameEventDto.Games)
 };
コード例 #6
0
 public static GameEventViewModel ToViewModel(this GameEventDto gameEventDto, GameEventPermission permission) =>
 new GameEventViewModel(
     gameEventDto.Id,
     gameEventDto.Name,
     gameEventDto.Place,
     gameEventDto.Date,
     permission,
     gameEventDto.Games,
     gameEventDto.Creator.ToViewModel(),
     gameEventDto.Invitees.Select(u => u.ToViewModel()),
     gameEventDto.Participants.Select(u => u.ToViewModel()),
     gameEventDto.DescriptionTab.ToViewModel());
コード例 #7
0
ファイル: GameManager.cs プロジェクト: leifhv/Kongeleken
        public async Task <GameDto> HandleGameEvent(GameEventDto gameEventDto)
        {
            var game = await _gameStore.GetAsync(gameEventDto.GameId);

            if (game == null)
            {
                return(null);
            }

            var initiatingPlayer = game.Players.Single(p => p.Id == gameEventDto.PlayerId);

            switch (gameEventDto.EventType)
            {
            case GameEventType.Nothing:
                break;

            case GameEventType.Join:
                break;

            case GameEventType.ShuffleDeck:
                game.CardDeck.Shuffle();
                game.AddGameAction($"{initiatingPlayer.Name} shuffled the deck");
                break;

            case GameEventType.Deal:
            {
                foreach (var player in game.Players)
                {
                    player.CurrentCard          = game.CardDeck.First();
                    player.CurrentCard.IsTurned = false;
                    game.CardDeck.RemoveAt(0);
                }
                game.AddGameAction($"{initiatingPlayer.Name} dealt cards");
            }
            break;

            case GameEventType.TurnCard:
                game.AddGameAction($"{initiatingPlayer.Name} turned his card");
                HandleTurnCardEvent(gameEventDto, game);
                break;

            default:
                throw new Exception("Unknown gameeventtype?");
                break;
            }

            return(DtoMapper.ToDto(game, gameEventDto.PlayerId));
        }
コード例 #8
0
 public static ExitGameEventViewModel ToExitViewModel(this GameEventDto gameEventDto) =>
 new ExitGameEventViewModel
 {
     Id   = gameEventDto.Id,
     Name = gameEventDto.Name
 };