Пример #1
0
 public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
 {
     if (core.GameState.GetValueListInt(Names.WINNING_PLAYERS).Contains(move.Player.ID))
     {
         reason = "You have already won!";
         return(false);
     }
     else if (move.Move == null)
     {
         return(true);
     }
     else if (core.GameState.GetValueListInt(Names.THROWES_WITHOUT_CARDS).Contains(move.Player.ID))
     {
         reason = "You haven`t cards, wait for the next round";
         return(false);
     }
     else if (!move.Player.Hand.Contains(move.Move))
     {
         reason = "Card is not in players hand";
         return(false);
     }
     else
     {
         return(true);
     }
 }
Пример #2
0
        public bool ShouldInvoke(CoreDurakGame core, Player player)
        {
            var playerId = player.ID;

            if (core.GameState.GetValueBool(Names.IS_GAME_OVER) &&
                core.GameState.GetValueListInt(Names.WINNING_PLAYERS).Contains(playerId))
            {
                return(false);
            }

            var defendingID           = core.GameState.GetValueInt(Names.DEFENDING_PLAYER);
            var currentRoundDefending = core.GameState.GetValueInt(Names.CURRENT_ROUND_DEFENDING);
            var attackingCard         = core.GameState.GetValueCard(Names.ATTACKING_CARD, currentRoundDefending);

            if (playerId != defendingID)
            {
                return(true);
            }
            else if (attackingCard != null)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #3
0
        public void InitState(CoreDurakGame core)
        {
            var players           = core.ConnectedServer.Players;
            var attackingID       = Utils.FindIDWithLeastTrump(players, core.GameState.GetValueCard(Names.TRUMP_CARD).Suit);
            var defendingID       = Utils.FindIDAttackingOrDefending(players, core.ConnectedServer.SupportedPlayerCount, attackingID + 1);
            var forfeitingPlayers = new Dictionary <int, bool>();

            core.ConnectedServer.Players.Values
            .Select(p => p.ID)
            .Where(i => i != defendingID)
            .ToList()
            .ForEach(i => forfeitingPlayers.Add(i, false));

            core.GameState.Set(Names.IS_ATTACKING, true);
            core.GameState.Set(Names.DEFENDER_FORFEIT, false);
            core.GameState.Set(Names.AMOUNT_CARD_DEFENDER, 6);
            core.GameState.Set(Names.CARDS_CAN_THROWN, 6);
            core.GameState.Set(Names.DEFENDER_TIMER_FINISHED, false);
            core.GameState.Set(Names.ATTACKING_PLAYER, attackingID);
            core.GameState.Set(Names.DEFENDING_PLAYER, defendingID);
            core.GameState.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
            core.GameState.Set(Names.THROWES_WITHOUT_CARDS, new List <int>());
            core.GameState.Set(Names.WINNING_PLAYERS, new List <int>());
            core.GameState.Set(Names.DISCARD, new CardCollection());
            core.GameState.Set(Names.TEMP_DISCARD, new CardCollection());

            for (int index = 0; index < 6; index++)
            {
                core.GameState.Set <Card>(Names.DEFENDING_CARD, index, null);
                core.GameState.Set <Card>(Names.ATTACKING_CARD, index, null);
            }
        }
        public void ValidateState(CoreDurakGame core)
        {
            var throwingRound  = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
            var defendingRound = core.GameState.GetValueInt(Names.CURRENT_ROUND_DEFENDING);

            if (!core.GameState.GetValueBool(Names.DEFENDER_FORFEIT) && throwingRound - defendingRound == 0 &&
                core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS).All(p => p.Value == true))
            {
                var discard     = core.GameState.GetValueCardCollection(Names.DISCARD);
                var tempDiscard = core.GameState.GetValueCardCollection(Names.TEMP_DISCARD);

                for (int index = 0; index < throwingRound; index++)
                {
                    if (core.GameState.GetValueCard(Names.ATTACKING_CARD, index) != null)
                    {
                        discard.Add(core.GameState.GetValueCard(Names.ATTACKING_CARD, index));
                    }

                    if (core.GameState.GetValueCard(Names.DEFENDING_CARD, index) != null)
                    {
                        discard.Add(core.GameState.GetValueCard(Names.DEFENDING_CARD, index));
                    }

                    core.GameState.Set <Card>(Names.ATTACKING_CARD, index, null);
                    core.GameState.Set <Card>(Names.DEFENDING_CARD, index, null);
                }

                discard.Concat(tempDiscard);
                core.GameState.Set(Names.TEMP_DISCARD, new CardCollection());
                core.GameState.Set(Names.DISCARD, discard);
                Utils.MoveNextDuel(core);
            }
        }
 public void TrySetState(StateParameter parameter, CoreDurakGame core, Player sender)
 {
     if (parameter.Name == Names.AMOUNT_INIT_CARDS && parameter.ParameterType == StateParameter.Type.Int && sender.IsHost)
     {
         core.GameState.Set(Names.AMOUNT_INIT_CARDS, parameter.GetValueInt(), true);
     }
 }
Пример #6
0
        public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
        {
            var throwingPlayers = core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS);

            if (throwingPlayers.Keys.Contains(move.Player.ID) &&
                !core.GameState.GetValueBool(Names.IS_ATTACKING))
            {
                if (throwingPlayers[move.Player.ID])
                {
                    reason = "You already clicked FORFEIT";
                    return(false);
                }

                if (move.Move == null)
                {
                    return(true);
                }

                var throwingRound  = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
                var cardsCanThrown = core.GameState.GetValueInt(Names.CARDS_CAN_THROWN);
                var tempDiscard    = core.GameState.GetValueCardCollection(Names.TEMP_DISCARD);

                if (cardsCanThrown <= 0)
                {
                    reason = "The player does not have enough cards to beat off more";
                    return(false);
                }

                for (int index = 0; index < throwingRound; index++)
                {
                    if (move.Move.Value == core.GameState.GetValueCard(Names.ATTACKING_CARD, index)?.Value ||
                        move.Move.Value == core.GameState.GetValueCard(Names.DEFENDING_CARD, index)?.Value)
                    {
                        return(true);
                    }
                }

                foreach (var card in tempDiscard)
                {
                    if (move.Move.Value == card.Value)
                    {
                        return(true);
                    }
                }

                reason = "You must play a card with a rank that has already been played";
                return(false);
            }
            else
            {
                return(true);
            }
        }
Пример #7
0
 private void CreateConnectedServer(CoreDurakGame core)
 {
     core.ConnectedServer = new ServerTag(
         Properties.Settings.Default.DefaultServerName,
         Properties.Settings.Default.DefaultServerDescription,
         Properties.Settings.Default.DefaultServerPassword,
         Properties.Settings.Default.DefaultMaxPlayers)
     {
         IPAddress = NetUtils.GetAddress(),
         Port      = gameServer.Port,
         State     = ServerState.InLobby,
     };
 }
Пример #8
0
        public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
        {
            if (move.Move == null)
            {
                return(true);
            }

            if (core.GameState.GetValueInt(Names.DEFENDING_PLAYER) == move.Player.ID)
            {
                var throwingRound  = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
                var defendingRound = core.GameState.GetValueInt(Names.CURRENT_ROUND_DEFENDING);
                var attackingCard  = core.GameState.GetValueCard(Names.ATTACKING_CARD, defendingRound);
                var trumpSuit      = core.GameState.GetValueCard(Names.TRUMP_CARD).Suit;

                if (throwingRound - defendingRound <= 0)
                {
                    reason = "This is not your turn";
                    return(false);
                }
                else if (core.GameState.GetValueBool(Names.DEFENDER_FORFEIT))
                {
                    reason = "You already clicked FORFEIT";
                    return(false);
                }
                else if (move.Move.Value > attackingCard.Value)
                {
                    if (move.Move.Suit == attackingCard.Suit || move.Move.Suit == trumpSuit)
                    {
                        return(true);
                    }
                    else
                    {
                        reason = "You must play a card of a higher rank of the same suit, or a trump card";
                        return(false);
                    }
                }
                else if (move.Move.Suit == trumpSuit && attackingCard.Suit != trumpSuit)
                {
                    return(true);
                }
                else
                {
                    reason = "You must play a card of a higher rank";
                    return(false);
                }
            }
            else
            {
                return(true);
            }
        }
Пример #9
0
        public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
        {
            if (core.GameState.GetValueInt(Names.DEFENDING_PLAYER) == move.Player.ID)
            {
                return(true);
            }

            var throwingRound  = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
            var defendingRound = core.GameState.GetValueInt(Names.CURRENT_ROUND_DEFENDING);

            if (throwingRound % 6 != 0)
            {
                return(true);
            }
            else if (throwingRound - defendingRound == 0 || core.GameState.GetValueBool(Names.DEFENDER_FORFEIT))
            {
                var tempDiscard = core.GameState.GetValueCardCollection(Names.TEMP_DISCARD);

                for (var index = 0; index < throwingRound; index++)
                {
                    var attackingCard = core.GameState.GetValueCard(Names.ATTACKING_CARD, index);
                    if (attackingCard != null)
                    {
                        tempDiscard.Add(core.GameState.GetValueCard(Names.ATTACKING_CARD, index));
                    }

                    var defendingCard = core.GameState.GetValueCard(Names.DEFENDING_CARD, index);
                    if (defendingCard != null)
                    {
                        tempDiscard.Add(core.GameState.GetValueCard(Names.DEFENDING_CARD, index));
                    }

                    core.GameState.Set <Card>(Names.ATTACKING_CARD, index, null);
                    core.GameState.Set <Card>(Names.DEFENDING_CARD, index, null);
                }

                core.GameState.Set(Names.TEMP_DISCARD, tempDiscard);
                core.GameState.Set(Names.CURRENT_ROUND_THROWING, 0);
                core.GameState.Set(Names.CURRENT_ROUND_DEFENDING, 0);
                return(true);
            }

            reason = "Wait until the player fight off the remaining cards and clears the table";
            return(false);
        }
Пример #10
0
        public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
        {
            if (move.Player.ID == core.GameState.GetValueInt(Names.ATTACKING_PLAYER))
            {
                return(true);
            }
            else if (core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS).Keys.Contains(move.Player.ID) &&
                     !core.GameState.GetValueBool(Names.IS_ATTACKING))
            {
                return(true);
            }
            else if (move.Player.ID == core.GameState.GetValueInt(Names.DEFENDING_PLAYER))
            {
                return(true);
            }

            reason = "It is not your turn to " + (core.GameState.GetValueBool(Names.IS_ATTACKING) ? "attack." : "defend.");
            return(false);
        }
Пример #11
0
        public void InitState(CoreDurakGame core)
        {
            Deck deck;
            var  numInitCards = core.GameState.GetValueInt(Names.AMOUNT_INIT_CARDS);

            if (numInitCards == 20)
            {
                deck = new Deck(CardValue.Ten, CardValue.Ace);
            }
            else if (numInitCards == 52)
            {
                deck = new Deck(CardValue.Two, CardValue.Ace);
            }
            else
            {
                deck = new Deck(CardValue.Six, CardValue.Ace);
            }

            core.GameState.Set(Names.TRUMP_CARD, deck.Draw());

            foreach (var player in core.ConnectedServer.Players.Values)
            {
                for (var i = 0; i < 6; i++)
                {
                    if (deck.Cards.Count > 0)
                    {
                        player.Hand.Add(deck.Draw());
                    }
                    else if (!core.GameState.GetValueBool(Names.TRUMP_CARD_USED))
                    {
                        player.Hand.Add(core.GameState.GetValueCard(Names.TRUMP_CARD));
                        core.GameState.Set(Names.TRUMP_CARD_USED, true);
                    }
                }
            }

            core.GameState.Set(Names.DECK, deck.Cards);
            core.GameState.Set(Names.DECK_COUNT, deck.Cards.Count);
        }
Пример #12
0
        public void ValidateState(CoreDurakGame core)
        {
            if (core.GameState.GetValueBool(Names.DEFENDER_FORFEIT) &&
                (core.GameState.GetValueBool(Names.DEFENDER_TIMER_FINISHED) ||
                 core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS).All(p => p.Value == true)))
            {
                var round       = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
                var defender    = core.ConnectedServer.Players[core.GameState.GetValueInt(Names.DEFENDING_PLAYER)];
                var tempDiscard = core.GameState.GetValueCardCollection(Names.TEMP_DISCARD);

                for (int index = 0; index < round; index++)
                {
                    var attackingCard = core.GameState.GetValueCard(Names.ATTACKING_CARD, index);
                    if (attackingCard != null)
                    {
                        defender.Hand.Add(attackingCard);
                    }

                    var defendingCard = core.GameState.GetValueCard(Names.DEFENDING_CARD, index);
                    if (defendingCard != null)
                    {
                        defender.Hand.Add(defendingCard);
                    }

                    core.GameState.Set <Card>(Names.ATTACKING_CARD, index, null);
                    core.GameState.Set <Card>(Names.DEFENDING_CARD, index, null);
                }

                foreach (var card in tempDiscard)
                {
                    defender.Hand.Add(card);
                }

                tempDiscard.Clear();
                core.GameState.Set(Names.TEMP_DISCARD, tempDiscard);
                Utils.MoveNextDuel(core);
            }
        }
Пример #13
0
        public void ValidateState(CoreDurakGame core)
        {
            if (core.GameState.GetValueBool(Names.DEFENDER_HAVE_NOT_CARDS))
            {
                var round       = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
                var discard     = core.GameState.GetValueCardCollection(Names.DISCARD);
                var tempDiscard = core.GameState.GetValueCardCollection(Names.TEMP_DISCARD);

                for (int index = 0; index < round; index++)
                {
                    var attackingCard = core.GameState.GetValueCard(Names.ATTACKING_CARD, index);
                    if (attackingCard != null)
                    {
                        discard.Add(core.GameState.GetValueCard(Names.ATTACKING_CARD, index));
                    }

                    var defendingCard = core.GameState.GetValueCard(Names.DEFENDING_CARD, index);
                    if (defendingCard != null)
                    {
                        discard.Add(core.GameState.GetValueCard(Names.DEFENDING_CARD, index));
                    }

                    core.GameState.Set <Card>(Names.ATTACKING_CARD, index, null);
                    core.GameState.Set <Card>(Names.DEFENDING_CARD, index, null);
                }

                if (tempDiscard != null)
                {
                    discard.Concat(tempDiscard);
                }

                tempDiscard.Clear();
                core.GameState.Set(Names.TEMP_DISCARD, tempDiscard);
                core.GameState.Set(Names.DISCARD, discard);
                Utils.MoveNextDuel(core);
            }
        }
Пример #14
0
 public bool IsValidMove(CoreDurakGame core, GameMove move, ref string reason)
 {
     if (core.GameState.GetValueBool(Names.IS_ATTACKING))
     {
         if (move.Move == null && move.Player.ID == core.GameState.GetValueInt(Names.ATTACKING_PLAYER))
         {
             reason = "Attacker cannot forfeit!";
             return(false);
         }
         if (move.Move == null)
         {
             reason = "Now is the attacker's turn!";
             return(false);
         }
         else
         {
             return(true);
         }
     }
     else
     {
         return(true);
     }
 }
Пример #15
0
        private async void CardTakingCounter(CoreDurakGame core)
        {
            TaskScheduler sync;

            if (core.IsSinglePlayerMode)
            {
                sync = TaskScheduler.FromCurrentSynchronizationContext();
            }
            else
            {
                sync = TaskScheduler.Default;
            }

            await Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    if (!core.GameState.GetValueBool(Names.DEFENDER_FORFEIT))
                    {
                        return(false);
                    }
                    Thread.Sleep(100);
                }
                return(true);
            })
            .ContinueWith(antecedent =>
            {
                if (antecedent.Result)
                {
                    PlayerServer.Mutex?.WaitOne();
                    core.GameState.Set(Names.DEFENDER_TIMER_FINISHED, true);
                    core.CheckStateRules();
                    PlayerServer.Mutex?.ReleaseMutex();
                }
            }, sync);
        }
Пример #16
0
        public void Propose(Dictionary <Card, float> proposals, CoreDurakGame core, Player botplayer)
        {
            var state     = core.GameState;
            var trumpSuit = state.GetValueCard(Names.TRUMP_CARD).Suit;

            Card[] keys = proposals.Keys.ToArray();

            if (botplayer.ID != core.GameState.GetValueInt(Names.DEFENDING_PLAYER))
            {
                foreach (var key in keys)
                {
                    if (key.Suit != trumpSuit)
                    {
                        proposals[key] += .25f;
                    }

                    if (state.GetValueBool(Names.IS_ATTACKING))
                    {
                        proposals[key] += .25f - (key.CardValue / 100.0f);
                    }

                    if (state.GetValueInt(Names.CURRENT_ROUND_THROWING) != 0)
                    {
                        for (int i = 0; i >= state.GetValueInt(Names.CURRENT_ROUND_THROWING); i++)
                        {
                            if (state.GetValueCard(Names.ATTACKING_CARD, i).Value != key.Value ||
                                state.GetValueCard(Names.DEFENDING_CARD, i).Value != key.Value ||
                                key.Suit == trumpSuit)
                            {
                                proposals[key] = 0.0f;
                            }
                        }
                    }
                }
            }
            else
            {
                var attackingCard = state.GetValueCard(Names.ATTACKING_CARD, state.GetValueInt(Names.CURRENT_ROUND_DEFENDING));

                foreach (Card key in keys)
                {
                    if (key.Suit == trumpSuit | key.Suit == attackingCard.Suit)
                    {
                        proposals[key] += .25f;
                        if (key.Suit != trumpSuit)
                        {
                            proposals[key] += .25f;
                        }

                        if (key.Value > attackingCard.Value)
                        {
                            proposals[key] += .25f - (key.CardValue / 100.0f);
                        }
                        else if (key.Value < attackingCard.Value && key.Suit == attackingCard.Suit)
                        {
                            proposals[key] = 0.0f;
                        }
                    }
                }
            }
        }
Пример #17
0
        public static void MoveNextDuel(CoreDurakGame core)
        {
            var state   = core.GameState;
            var players = core.ConnectedServer.Players;

            if (!state.GetValueBool(Names.IS_GAME_OVER))
            {
                var forfeitingPlayers = core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS);
                var winningPlayers    = core.GameState.GetValueListInt(Names.WINNING_PLAYERS);
                var deck = new Deck(state.GetValueCardCollection(Names.DECK));

                DealCards(state, players, winningPlayers, deck);

                var activePlayers     = players.Values.Where(X => X.Hand.Count > 0).Count();
                var isDefenderForfeit = state.GetValueBool(Names.DEFENDER_FORFEIT);

                if (activePlayers > 1)
                {
                    state.Set(Names.IS_ATTACKING, true);
                    state.Set(Names.DEFENDER_FORFEIT, false);
                    state.Set(Names.DEFENDER_HAVE_NOT_CARDS, false);
                    state.Set(Names.DEFENDER_TIMER_FINISHED, false);
                    state.Set(Names.CURRENT_ROUND_THROWING, 0);
                    state.Set(Names.CURRENT_ROUND_DEFENDING, 0);
                    state.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
                    state.Set(Names.WINNING_PLAYERS, winningPlayers);
                    state.Set(Names.THROWES_WITHOUT_CARDS, new List <int>());

                    var supportedPlayerCount = core.ConnectedServer.SupportedPlayerCount;
                    var tempDefendingID      = state.GetValueInt(Names.DEFENDING_PLAYER);
                    var attackingID          = FindIDAttackingOrDefending(players, supportedPlayerCount, isDefenderForfeit ? tempDefendingID + 1 : tempDefendingID);
                    var defendingID          = FindIDAttackingOrDefending(players, supportedPlayerCount, attackingID + 1);

                    forfeitingPlayers.Clear();
                    players.Values.Select(p => p.ID)
                    .Except(state.GetValueListInt(Names.WINNING_PLAYERS))
                    .Where(i => i != defendingID)
                    .ToList()
                    .ForEach(i => forfeitingPlayers.Add(i, false));

                    state.Set(Names.DECK, deck.Cards);
                    state.Set(Names.ATTACKING_PLAYER, attackingID);
                    state.Set(Names.DEFENDING_PLAYER, defendingID);
                    state.Set(Names.AMOUNT_CARD_DEFENDER, core.ConnectedServer.Players[defendingID].Hand.Count);
                    state.Set(Names.CARDS_CAN_THROWN, core.ConnectedServer.Players[defendingID].Hand.Count);
                    state.Set(Names.DECK_COUNT, deck.Cards.Count);
                    state.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
                }
                else
                {
                    if (activePlayers == 1)
                    {
                        state.Set(Names.LOSER_ID, players.Values.First(X => X.Hand.Count > 0).ID);
                        state.Set(Names.IS_TIE, false);
                        state.Set(Names.IS_GAME_OVER, true);
                    }
                    else if (activePlayers == 0)
                    {
                        state.Set(Names.IS_TIE, true);
                        state.Set(Names.IS_GAME_OVER, true);
                    }
                }
            }
        }
Пример #18
0
        public void UpdateState(CoreDurakGame core, GameMove move)
        {
            if (move.Move != null)
            {
                move.Player.Hand.Remove(move.Move);
            }
            else
            {
                core.GameState.Set(Names.PLAYER_FORFEIT, move.Player.ID);
            }

            var throwingRound       = core.GameState.GetValueInt(Names.CURRENT_ROUND_THROWING);
            var defendingID         = core.GameState.GetValueInt(Names.DEFENDING_PLAYER);
            var forfeitingPlayers   = core.GameState.GetValueDictIntBool(Names.THROWING_PLAYERS);
            var throwesWithoutCards = core.GameState.GetValueListInt(Names.THROWES_WITHOUT_CARDS);
            var cardsCanThrown      = core.GameState.GetValueInt(Names.CARDS_CAN_THROWN);

            if (core.GameState.GetValueBool(Names.IS_ATTACKING))
            {
                core.GameState.Set(Names.IS_ATTACKING, false);
                core.GameState.Set(Names.ATTACKING_CARD, throwingRound, move.Move);
                core.GameState.Set(Names.CURRENT_ROUND_THROWING, ++throwingRound);
                core.GameState.Set(Names.CARDS_CAN_THROWN, --cardsCanThrown);
            }
            else if (move.Player.ID != defendingID)
            {
                if (move.Move == null)
                {
                    forfeitingPlayers[move.Player.ID] = true;
                }
                else if (move.Move != null && !forfeitingPlayers[move.Player.ID])
                {
                    forfeitingPlayers.Keys.ToList().ForEach(v => forfeitingPlayers[v] = false);
                    core.GameState.Set(Names.ATTACKING_CARD, throwingRound, move.Move);
                    core.GameState.Set(Names.CURRENT_ROUND_THROWING, ++throwingRound);
                    core.GameState.Set(Names.CARDS_CAN_THROWN, --cardsCanThrown);
                }

                core.GameState.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
            }

            if (move.Player.ID == defendingID)
            {
                var defenderForfeit = core.GameState.GetValueBool(Names.DEFENDER_FORFEIT);
                var defendingRound  = core.GameState.GetValueInt(Names.CURRENT_ROUND_DEFENDING);

                if (move.Player.Hand.Count == 0)
                {
                    core.GameState.Set(Names.DEFENDER_HAVE_NOT_CARDS, true);
                }
                else if (move.Move == null && !defenderForfeit)
                {
                    core.GameState.Set(Names.DEFENDER_FORFEIT, true);
                    CardTakingCounter(core);
                    return;
                }
                else if (move.Move != null && !defenderForfeit)
                {
                    if (throwesWithoutCards != null && throwesWithoutCards.Count != 0)
                    {
                        forfeitingPlayers.Keys.Except(throwesWithoutCards).ToList().ForEach(v => forfeitingPlayers[v] = false);
                    }
                    else
                    {
                        forfeitingPlayers.Keys.ToList().ForEach(v => forfeitingPlayers[v] = false);
                    }

                    core.GameState.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
                    core.GameState.Set(Names.REMOVE_ALL_FORFEITS, true);
                    core.GameState.Set(Names.DEFENDING_CARD, defendingRound, move.Move);
                    core.GameState.Set(Names.CURRENT_ROUND_DEFENDING, ++defendingRound);
                    core.GameState.Set(Names.AMOUNT_CARD_DEFENDER, move.Player.Hand.Count);
                }
            }

            if (move.Player.Hand.Count == 0 && move.Player.ID != defendingID)
            {
                throwesWithoutCards.Add(move.Player.ID);
                core.GameState.Set(Names.THROWES_WITHOUT_CARDS, throwesWithoutCards);

                forfeitingPlayers[move.Player.ID] = true;
                core.GameState.Set(Names.THROWING_PLAYERS, forfeitingPlayers);
            }
        }
Пример #19
0
        public void SetClient(CoreDurakGame coreGame)
        {
            core = coreGame;
            AddEvents();

            foreach (var player in core.ConnectedServer.Players.Values)
            {
                if (player != null && player.ID != core.Player.ID)
                {
                    var id  = player.ID == 0 ? core.Player.ID : player.ID;
                    var tag = new PlayerUITag();

                    switch (id)
                    {
                    case 1:
                        tag.Panel          = pnlPlayer1;
                        tag.Name           = lblPlayer1;
                        tag.Name.Text      = player.Name;
                        tag.PlayerID       = lblIDPlayer1;
                        tag.PlayerID.Text  = player.ID.ToString();
                        tag.CardCount      = lblCardsLeftPlayer1;
                        tag.CardCount.Text = player.Hand.Count.ToString();
                        tag.Card           = pbxPlayer1;
                        tag.Kick           = btnKickPlayer1;
                        tag.BotGame        = pbxBotGamePlayer1;
                        tag.Digress        = pbxDigressedPlayer1;
                        tag.Leave          = pbxLeavedPlayer1;
                        tag.Win            = lblWinPlayer1;
                        tag.MutedPlayer    = pbxMutedPlayer1;
                        tag.RadioButton    = rbnPlayer1;
                        break;

                        #region DRY case 2-5
                    case 2:
                        tag.Panel          = pnlPlayer2;
                        tag.Name           = lblPlayer2;
                        tag.Name.Text      = player.Name;
                        tag.PlayerID       = lblIDPlayer2;
                        tag.PlayerID.Text  = player.ID.ToString();
                        tag.CardCount      = lblCardsLeftPlayer2;
                        tag.CardCount.Text = player.Hand.Count.ToString();
                        tag.Card           = pbxPlayer2;
                        tag.Kick           = btnKickPlayer2;
                        tag.BotGame        = pbxBotGamePlayer2;
                        tag.Digress        = pbxDigressedPlayer2;
                        tag.Leave          = pbxLeavedPlayer2;
                        tag.Win            = lblWinPlayer2;
                        tag.MutedPlayer    = pbxMutedPlayer2;
                        tag.RadioButton    = rbnPlayer2;
                        break;

                    case 3:
                        tag.Panel          = pnlPlayer3;
                        tag.Name           = lblPlayer3;
                        tag.Name.Text      = player.Name;
                        tag.PlayerID       = lblIDPlayer3;
                        tag.PlayerID.Text  = player.ID.ToString();
                        tag.CardCount      = lblCardsLeftPlayer3;
                        tag.CardCount.Text = player.Hand.Count.ToString();
                        tag.Card           = pbxPlayer3;
                        tag.Kick           = btnKickPlayer3;
                        tag.BotGame        = pbxBotGamePlayer3;
                        tag.Digress        = pbxDigressedPlayer3;
                        tag.Leave          = pbxLeavedPlayer3;
                        tag.Win            = lblWinPlayer3;
                        tag.MutedPlayer    = pbxMutedPlayer3;
                        tag.RadioButton    = rbnPlayer3;
                        break;

                    case 4:
                        tag.Panel          = pnlPlayer4;
                        tag.Name           = lblPlayer4;
                        tag.Name.Text      = player.Name;
                        tag.PlayerID       = lblIDPlayer4;
                        tag.PlayerID.Text  = player.ID.ToString();
                        tag.CardCount      = lblCardsLeftPlayer4;
                        tag.CardCount.Text = player.Hand.Count.ToString();
                        tag.Card           = pbxPlayer4;
                        tag.Kick           = btnKickPlayer4;
                        tag.BotGame        = pbxBotGamePlayer4;
                        tag.Digress        = pbxDigressedPlayer4;
                        tag.Leave          = pbxLeavedPlayer4;
                        tag.Win            = lblWinPlayer4;
                        tag.MutedPlayer    = pbxMutedPlayer4;
                        tag.RadioButton    = rbnPlayer4;
                        break;

                    case 5:
                        tag.Panel          = pnlPlayer5;
                        tag.Name           = lblPlayer5;
                        tag.Name.Text      = player.Name;
                        tag.PlayerID       = lblIDPlayer5;
                        tag.PlayerID.Text  = player.ID.ToString();
                        tag.CardCount      = lblCardsLeftPlayer5;
                        tag.CardCount.Text = player.Hand.Count.ToString();
                        tag.Card           = pbxPlayer5;
                        tag.Kick           = btnKickPlayer5;
                        tag.BotGame        = pbxBotGamePlayer5;
                        tag.Digress        = pbxDigressedPlayer5;
                        tag.Leave          = pbxLeavedPlayer5;
                        tag.Win            = lblWinPlayer5;
                        tag.MutedPlayer    = pbxMutedPlayer5;
                        tag.RadioButton    = rbnPlayer5;
                        break;
                        #endregion
                    }

                    playerUIs.Add(player, tag);
                    tag.Panel.Visible = true;
                }
            }

            var myTag = new PlayerUITag()
            {
                PlayerID          = lblIDPlayer,
                Panel             = pnlMyView,
                SwordShieldDagger = pbxSwordShieldDagger,
                BotGame           = pbxBotGame,
                Digress           = pbxDigressed,
                Win = lblWinPlayer
            };
            myTag.PlayerID.Text = core.Player.ID.ToString();
            playerUIs.Add(core.Player, myTag);

            cplPlayersHand.Player = core.Player;
            cplPlayersHand.UpdatePlayer();
            DetermineKickButtons();
            core.ConnectedServer.Players
            .Where(p => p.Value.IsBot && p.Value.IsDigress)
            .ToList()
            ?.ForEach(p => PlayerDigressed(p.Key, p.Value.IsBot, p.Value.IsDigress));
        }