Beispiel #1
0
 public Player(Player player)
 {
     number =  player.number;
     //head =  player.head;
     cards = new List<Card>() ;
     OpenDeckC = new Card(player.OpenDeckC);
     TwoWalk = player.TwoWalk;
     SuidOfJeck = player.SuidOfJeck;
     for (int i = 0; i < player.cards.Count; i++)
     {
         cards.Add(new Card(player.cards[i]));
     }
     walks = new List<int>();
     for (int i = 0; i < player.walks.Count; i++)
     {
         //walks[i] = player.walks[i];
         walks.Add(player.walks[i]);
     }
     //headWalk = player.headWalk;
 }
Beispiel #2
0
        /// <summary>
        /// Перевіряє чи можливий хід після чого робить його відповідною картою відповідного гравця
        /// </summary>
        /// <param name="cards"> Карта якою ходить гравець</param>
        /// <param name="player"> Гравець який ходить</param>
        /// <returns>Повертає true в разі успішності ходу інакше false</returns>
        private bool Move(Card cards, Player player)
        {
            if (!_isSecondMove &&                                                     //Якщо це перша карта за хід
                (((cards.Suid() == _openDeck[CountCardsInOpenDeck - 1].Suid() ||         //Якщо це така ж карта по масті
                cards.Priority() == _openDeck[CountCardsInOpenDeck - 1].Priority() ||      //Або це така ж карту за пріорітетом
                cards.Priority() == 11) &&                                      //Або ж ця карта валет
                _openDeck[CountCardsInOpenDeck - 1].Priority() != 11) ||                     //И якщо остання карта в колоді не валет
                // Якщо ж валет то перевірити чи відповідає загадіній раніше карті іншим гравцем
                ((cards.Priority() == 11 || cards.Suid() == _suitOfJeck) && _openDeck[CountCardsInOpenDeck - 1].Priority() == 11))
            )
            {
                if (cards.Priority() != 6)
                    _isSecondMove = true;
                //if (cards.Priority() == 11)
                //    numbJacks++;

                if (cards.Priority() == 11 && _selectPlayer.Number == 1)
                    _activeChoice = true;

                _openDeck.Add(cards);
                //openDeck[HeadOpDeck] = cards;
                //headOpDeck++;
                for (int i = 0; i < player.Cards.Count; i++)
                {
                    if (player[i] == cards)
                    {
                        player.PopCard(i);
                        break;
                    }
                }

                ReactionOnCards(cards);
                _isToCard = true;
                return true;
            }

            return false;
        }
Beispiel #3
0
 /// <summary>
 /// Вибирає гравця якому буде передано 2 карти якщо заданий гравець покладе 8
 /// </summary>
 private void NextTakengTwoCard()
 {
     bool f = false;
     if (_takengTwoCards.Number == _players.Count())
     {
         _takengTwoCards = _players[0];
         _nextSelectPlayer = _players[0];
         f = true;
     }
     if (_takengTwoCards.Number == _players.Count() - 1 && !f)
     {
         _takengTwoCards = _players[_players.Count() - 1];
         _nextSelectPlayer = _players[_players.Count() - 1];
         f = true;
     }
     if (_takengTwoCards.Number < _players.Count() - 1 && !f)
     {
         _takengTwoCards = _players[_takengTwoCards.Number];
         _nextSelectPlayer = _players[_takengTwoCards.Number - 1];
     }
     if (_takengTwoCards == _selectPlayer)
     {
         NextTakengTwoCard();
         _nextSelectPlayer = _selectPlayer;
     }
 }
Beispiel #4
0
        private Player AI(Player Pl)
        {
            List<Player> res = new List<Player>();
            Player B = new Player(Pl);
            for (int i = 0; i < B.Cards.Count; i++)
            {
                if (B.Walking(i))
                {
                    res.Add(AI(B));
                    B = new Player(Pl);
                }
                if (i + 1 == B.Cards.Count && res.Count == 0)
                {
                    return B;
                }
            }

            if (res.Count == 0)
            {
                return B;
            }

            Player res2 = res[0];
            for (int i = 1; i < res.Count; i++)
            {
                if (res[i].NumberOfPoints(1) < res2.NumberOfPoints(1))
                    res2 = res[i];
            }

            return res2;
        }
Beispiel #5
0
 private int AISuid(Player pl)
 {
     int[] suid = new int[4];
     for (int i = 0; i < pl.Cards.Count; i++)
         suid[pl[i].Suid()]++;
     int res = 0;
     for (int i = 1; i < 4; i++)
         if (suid[res] < suid[i])
         {
             res = i;
         }
     return res;
 }
Beispiel #6
0
 public void NextPlayer()
 {
     if (!IsToCard && _selectPlayer.Number == 1 && ShowMessage != null)
     {
         ShowMessage("Щоб пропустити хід, візьміть карту!");
     }
     if (_openDeck[CountCardsInOpenDeck - 1].Priority() == 6 && _selectPlayer.Number == 1 && ShowMessage != null)
     {
         ShowMessage("Необхідно накрити шістку, якщо не має підходящої карти візьміть ще одну!");
     }
     //Якщо не лежить 6 та покладена карта
     if (_openDeck[CountCardsInOpenDeck - 1].Priority() != 6 && IsToCard && !_gameOver)
     {
         //if (ActivChooce)
         //    ChooiseSuidJack();
         _activeChoice = false;
         _selectPlayer = _nextSelectPlayer;
         NextSelectdPlayer();
         _takengTwoCards = _nextSelectPlayer;
         _isSecondMove = false;
         _isToCard = false;
         DistributionOver();
         //numbJacks = 0;
     }
     if (_selectPlayer.Number != 1 && !_gameOver)
     {
         StartAI();
     }
 }
Beispiel #7
0
        /// <summary>
        /// Розпочинає нову гру
        /// </summary>
        public void NewGame()
        {
            Initialize();

            _suitOfJeck = 0;
            _selectPlayer = _players[0];
            _nextSelectPlayer = _players[1];
            _takengTwoCards = _players[1];
            NewDistribution();
        }
Beispiel #8
0
 /// <summary>
 /// Призначення гравцям ролей
 /// </summary>
 private void SetPlayersRole()
 {
     _selectPlayer = _globalSelectedPlayer;
     if (_selectPlayer.Number < _players.Count())
     {
         _nextSelectPlayer = _players[_selectPlayer.Number];
         _takengTwoCards = _players[_selectPlayer.Number];
     }
     else
     {
         _nextSelectPlayer = _players[0];
         _takengTwoCards = _players[0];
     }
 }
Beispiel #9
0
        /// <summary>
        /// Перевіряє чи можливо докласти ще одну карту після того як була покладена карта за заданий хід
        /// </summary>
        /// <param name="cards">Карта яку хоче покласти гравець</param>
        /// <param name="player">Гравець який хоче покласти карту</param>
        /// <returns>Повертає true в разі успішності ходу інакше false</returns>
        private bool SecondMove(Card cards, Player player)
        {
            if (_isSecondMove && cards.Priority() == _openDeck[CountCardsInOpenDeck - 1].Priority())
            {
                //if (cards.Priority() == 11)
                //    numbJacks++;
                _openDeck.Add(cards);

                //openDeck[HeadOpDeck] = cards;
                //headOpDeck++;
                for (int i = 0; i < player.Cards.Count; i++)
                {
                    if (player[i] == cards)
                    {
                        player.PopCard(i);
                    }
                }
                ReactionOnCards(cards);
                return true;
            }
            return false;
        }
Beispiel #10
0
        /// <summary>
        /// Додавання гравцю карту з закритої колоди з використанням анімації
        /// </summary>
        /// <param name="player">Гравець якому буде передана карта</param>
        private void PutCardToPlayer(Player player)
        {
            FlipDeck();
            //int speed = 80;

            if (_selectPlayer.Number != 1)
            {
                _deck[_deck.Count - 1].Animation = true;

                Animation(_deck[_deck.Count - 1], player.Place.X, player.Place.Y, false);
                _deck[_deck.Count - 1].Animation = false;
            }

            player.PushCard(_deck[_deck.Count - 1]);
            _deck.RemoveAt(_deck.Count - 1);
        }