Exemple #1
0
        /// <summary>
        /// Looks for all invites to the provided game session. If all are accepted, start the game.
        /// </summary>
        /// <param name="guid"></param>
        public void AttemptGameStart(DB_Game da_game)
        {
            var gameInvites = from i in _context.DB_Invites where i.GameId == da_game.Id select i;

            if (gameInvites.Count <DB_Invite>() < 5)
            {
                throw new FOEServiceException(FOEStatusCodes.InternalError, "Game start attempted with fewer than 5 players");
            }

            //Check if all invites are accepted. else we just wont start the game.
            bool           allInvitesAccepted = true;
            List <DB_User> invitedUsers       = new List <DB_User>();

            foreach (DB_Invite invite in gameInvites)
            {
                if (invite.Status != (int)DB_Invite.InviteStatus.Accepted)
                {
                    allInvitesAccepted = false;
                    break;
                }
                invitedUsers.Add((from u in _context.DB_Users where u.Id == invite.InvitedUser.Value select u).FirstOrDefault());
            }

            if (allInvitesAccepted == true)
            {
                //Randomize which user that plays which nation.
                //TODO: Add ability to pick nations?
                Random  rnd     = new Random();
                DB_User da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.GermanPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.JapanesePlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.AmericanPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_user = invitedUsers.OrderBy(x => rnd.Next()).FirstOrDefault();
                da_game.EnglishPlayer = da_user.Id;
                SendEventToUser(da_user.ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                invitedUsers.Remove(da_user);

                da_game.RussianPlayer = invitedUsers.FirstOrDefault().Id;
                SendEventToUser(invitedUsers.FirstOrDefault().ToUser(FOEDataInclusion.Everything), GameEvents.GameStarted);
                da_game.IsActive = true;
                da_game.Phase    = (int)DB_Game.GamePhases.Buy;
                da_game.Turn     = 0;

                _context.DB_Invites.DeleteAllOnSubmit(gameInvites);
                _context.SubmitChanges();
            }
        }
Exemple #2
0
        /// <summary>
        /// Creates a game and returns it.
        /// </summary>
        /// <returns></returns>
        public Game CreateGame()
        {
            DB_Game da_game = DB_Game.FromGame(new Game()
            {
                Id             = Guid.NewGuid(),
                MapId          = DB_Map.DefaultMapId,
                GermanPlayer   = DB_User.MockUserId,
                JapanesePlayer = DB_User.MockUserId,
                AmericanPlayer = DB_User.MockUserId,
                EnglishPlayer  = DB_User.MockUserId,
                RussianPlayer  = DB_User.MockUserId,
                Phase          = (int)DB_Game.GamePhases.None,
                Turn           = 0,
                Name           = string.Format("{0}'s game", User.UserName),
                IsActive       = false
            }, _context);

            if (da_game == null)
            {
                throw new FOEServiceException(FOEStatusCodes.InternalError, "Creation of Game failed.");
            }

            return(da_game.ToGame());
        }