예제 #1
0
파일: Card.cs 프로젝트: Yevgen/BridgeGame
 public Card(Card C)
 {
     _numberOfCard = C._numberOfCard;
     open = C.open;
     X = C.X;
     Y = C.Y;
 }
예제 #2
0
파일: Player.cs 프로젝트: Yevgen/BridgeGame
 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;
 }
예제 #3
0
파일: Player.cs 프로젝트: Yevgen/BridgeGame
 /// <summary>
 /// Додавання заданої карти в руки гравця
 /// </summary>
 /// <param name="card">Карта яку потрібно додати в руки гравця</param>
 public void PushCard(Card card)
 {
     cards.Add(card);
     SortCards();
 }
예제 #4
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
        /// <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;
        }
예제 #5
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
        /// <summary>
        /// Перевіряє чи знаходиться хоч якась частина card1 над card2
        /// </summary>
        /// <param name="card1">Перша карта</param>
        /// <param name="card2">Друга карта над якою повинна бити перша</param>
        /// <returns>Повертає true якщо перша карта перетинає другу</returns>
        private bool IsCrossedCards(Card card1, Card card2)
        {
            int X1 = (int)card1.X;
            int Y1 = (int)card1.Y;

            //Координати всіх кутків карти починаючи з верхнього лівого і рухаючись за годинниковою стрілкою
            int[] x = new int[4] { X1, X1 + _cardWidth, X1 + _cardWidth, X1 };
            int[] y = new int[4] { Y1, Y1, Y1 + CardHeight, Y1 + CardHeight };

            for (int w = 0; w < 4; w++)
                if (card2.X < x[w] && x[w] < card2.X + _cardWidth &&
                    card2.Y < y[w] && y[w] < card2.Y + CardHeight)
                    return true;
            return false;
        }
예제 #6
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
 /// <summary>
 /// Робить анімований рух карти в задану точку
 /// </summary>
 /// <param name="card">Карта яка повинна рухатися</param>
 /// <param name="Tx">X координата в яку повинна рухатись карта</param>
 /// <param name="Ty">Y координата в яку повинна рухатися карта</param>
 /// <param name="speed">Швидкість з якою карта повинна рухатися</param>
 /// <param name="open">Ознака відкритості карти яка буде рухатися</param>
 private void Animation(Card card, double Tx, double Ty, bool open)
 {
     _movingCard = card;
     _movingCard.open = open;
     double Mx = Tx - card.X;
     double My = Ty - card.Y;
     Mx /= 50;
     My /= 50;
     int speed2 = 100 - _speedAnimation;
     for (int i = 0; i < 50; i++)
     {
         card.X += Mx;
         card.Y += My;
         System.Threading.Thread.Sleep(speed2);
     }
     _movingCard = null;
 }
예제 #7
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
        /// <summary>
        /// Натиснення на стіл в заданих координатах
        /// </summary>
        /// <param name="x">Координата ширини</param>
        /// <param name="y">Координата висоти рухаючись зверху вниз</param>
        public void MousDown(double x, double y)
        {
            if (x > 0 && y > 0 && !_gameOver && _selectPlayer.Number == 1 && !IsDistributionOver)
            {
                // Перша карта починається з координат place гравця 0, відстань між картами 1/4 ширини карти,
                int xRight = (int)(_players[0].Place.X + ( (0.25 * _cardWidth) * _players[0].Cards.Count) );

                if (_players[0].Place.X <= x && x < xRight + (_cardWidth * 0.75) &&
                    _players[0].Place.Y <= y && y < _players[0].Place.Y + CardHeight)
                {
                    //якщо вибрано карту в межах 1/4 то вибрати її
                    if (x < xRight)
                    {
                        _indexSelectedCard = (int)((x - _players[0].Place.X) / (_cardWidth * 0.25));
                        _zx = (x - _players[0].Place.X) % (_cardWidth * 0.25);

                    }
                    // якщо натиснуто останню карту за межею 25 точок але в її межах то вибарти її
                    else
                    {
                        _indexSelectedCard = _players[0].Cards.Count - 1;
                        _zx = x - (_players[0].Place.X + (0.25 * _cardWidth * (_players[0].Cards.Count - 1)) );
                    }

                    _zy = y - _players[0].Place.Y;

                    _selectedCard = _players[0][_indexSelectedCard];
                    _isTakenCard = true;
                }
            }
        }
예제 #8
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
        /// <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;
        }
예제 #9
0
파일: Table.cs 프로젝트: Yevgen/BridgeGame
 /// <summary>
 /// Робить відповідну реакцію на покладену карту
 /// </summary>
 /// <param name="card">Карта на яку потрібно зробити реакцію</param>
 private void ReactionOnCards(Card card)
 {
     //Якщо 7 то наступний гравець бере одну карту
     if (card.Priority() == 7)
     {
         PutCardToPlayer(PopNextPlayer(1));
     }
     //Якщо 8 то наступний гравець бере 2 карти та пропускає хід після чого наступним стає гравець що йде після нього
     if (card.Priority() == 8)
     {
         PutCardToPlayer(_takengTwoCards);
         PutCardToPlayer(_takengTwoCards);
         NextTakengTwoCard();
     }
     //Якщо туз то наступним активним гравцем той що йде після теперішнього
     if (card.Priority() == 1)
     {
         NextSelectdPlayer();
     }
     //Якщо дама пікова додати 5 карт
     if (card.NumberOfCard == 17)
     {
         for (int i = 0; i < 5; i++)
         {
             PutCardToPlayer(_nextSelectPlayer);
         }
     }
 }