コード例 #1
0
ファイル: Update.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Update a game player's idle play count
        /// </summary>
        /// <param name="filter">The filter used to update a player's idle play count</param>
        public void Execute(Entities.Filters.GamePlayer.UpdateIdlePlayCount filter)
        {
            using (DbCommand cmd = _db.GetStoredProcCommand("GamePlayer_UpdateIdlePlayCount"))
            {
                _db.AddInParameter(cmd, "@GameID", DbType.Int32, filter.GameID);
                _db.AddInParameter(cmd, "@UserId", DbType.Int32, filter.UserId);

                _db.ExecuteNonQuery(cmd);
            }
        }
コード例 #2
0
        /// <summary>
        /// Play cards for all players that have yet to play
        /// </summary>
        /// <param name="gameID">The game ID</param>
        public void Execute(int gameID)
        {
            Entities.Filters.Game.Select gameFilter = new Entities.Filters.Game.Select();
            gameFilter.DataToSelect = Entities.Enums.Game.Select.GamePlayerCards | Entities.Enums.Game.Select.Rounds;
            gameFilter.GameID       = gameID;

            Entities.Game game = _selectGame.Execute(gameFilter);

            Entities.GameRound round = game.CurrentRound();

            List <Entities.GamePlayer> players = game.Players.Where(x => !round.HasAnswer(x.User.UserId) &&
                                                                    game.IsCurrentPlayer(x.User.UserId) &&
                                                                    !game.IsCurrentCommander(x.User.UserId))
                                                 .Select(x => x).ToList();

            Int32 selectCount = 1 + (Int32)round.Question.Instructions;

            Random rdm = new Random();

            List <Int32> cardIDs = null;

            Entities.ActionResponses.PlayCard response = null;

            foreach (Entities.GamePlayer player in players)
            {
                cardIDs  = player.Hand.OrderBy(x => rdm.Next()).Take(selectCount).Select(x => x.CardID).ToList();
                response = _playCard.Execute(cardIDs, gameID, player.User.UserId, true);

                if (response.AutoPlayedSuccess)
                {
                    if (player.IdlePlayCount + 1 == 3)
                    {
                        //Player is forced to leave game now
                        UnityConfig.Container.Resolve <AppServices.Game.Base.ILeave>().Execute(gameID, player.User, Entities.Enums.GamePlayerType.Player, true);
                    }
                    else
                    {
                        Entities.Filters.GamePlayer.UpdateIdlePlayCount idlePlayCount =
                            new Entities.Filters.GamePlayer.UpdateIdlePlayCount
                        {
                            GameID = gameID,
                            UserId = player.User.UserId
                        };

                        _updateGamePlayer.Execute(idlePlayCount);
                    }
                }
            }
        }
コード例 #3
0
ファイル: Update.cs プロジェクト: kwmcrell/ArmedCards
 /// <summary>
 /// Update a game player's idle play count
 /// </summary>
 /// <param name="filter">The filter used to update a player's idle play count</param>
 public void Execute(Entities.Filters.GamePlayer.UpdateIdlePlayCount filter)
 {
     _update.Execute(filter);
 }
コード例 #4
0
ファイル: TimerExpired.cs プロジェクト: kwmcrell/ArmedCards
        /// <summary>
        /// Play cards for all players that have yet to play
        /// </summary>
        /// <param name="gameID">The game ID</param>
        public void Execute(int gameID)
        {
            Entities.Filters.Game.Select gameFilter = new Entities.Filters.Game.Select();
            gameFilter.DataToSelect = Entities.Enums.Game.Select.GamePlayerCards | Entities.Enums.Game.Select.Rounds;
            gameFilter.GameID = gameID;

            Entities.Game game = _selectGame.Execute(gameFilter);

            Entities.GameRound round = game.CurrentRound();

            List<Entities.GamePlayer> players = game.Players.Where(x => !round.HasAnswer(x.User.UserId) &&
                                                                        game.IsCurrentPlayer(x.User.UserId) &&
                                                                        !game.IsCurrentCommander(x.User.UserId))
                                                            .Select(x => x).ToList();

            Int32 selectCount = 1 + (Int32)round.Question.Instructions;

            Random rdm = new Random();

            List<Int32> cardIDs = null;
            Entities.ActionResponses.PlayCard response = null;

            foreach (Entities.GamePlayer player in players)
            {
                cardIDs = player.Hand.OrderBy(x => rdm.Next()).Take(selectCount).Select(x => x.CardID).ToList();
                response = _playCard.Execute(cardIDs, gameID, player.User.UserId, true);

                if (response.AutoPlayedSuccess)
                {
                    if (player.IdlePlayCount + 1 == 3)
                    {
                        //Player is forced to leave game now
                        UnityConfig.Container.Resolve<AppServices.Game.Base.ILeave>().Execute(gameID, player.User, Entities.Enums.GamePlayerType.Player, true);
                    }
                    else
                    {
                        Entities.Filters.GamePlayer.UpdateIdlePlayCount idlePlayCount =
                            new Entities.Filters.GamePlayer.UpdateIdlePlayCount
                            {
                                GameID = gameID,
                                UserId = player.User.UserId
                            };

                        _updateGamePlayer.Execute(idlePlayCount);
                    }
                }
            }
        }