Beispiel #1
0
 public void SetCardSelected(Common.Card card, bool selected)
 {
     if (_cardGraphics.ContainsKey(card))
     {
         _cardGraphics[card].IsSelected = selected;
     }
 }
Beispiel #2
0
 private void SelectCardOnClick(
     IEnumerable <Common.Card> validCards,
     Func <Common.Card> getSelectedCard,
     Action <Common.Card> setSelectedCard,
     Common.Card card
     )
 {
     if (validCards.Contains(card))
     {
         lock (_mutex)
         {
             var selectedCard = getSelectedCard();
             if (selectedCard != null)
             {
                 _cardFragment.SetCardSelected(selectedCard, false);
             }
             if (card != selectedCard)
             {
                 _cardFragment.SetCardSelected(card, true);
                 setSelectedCard(card);
             }
             else
             {
                 setSelectedCard(null);
             }
         }
     }
 }
Beispiel #3
0
 public Card LetUserSelectCard()
 {
     lock (_mutex)
     {
         _chosenCard = null;
         _cardFragment.CardClicked += (o, e) =>
         {
             lock (_mutex)
             {
                 _chosenCard = e.Card;
                 _cardFragment.SetCardSelected(_chosenCard, true);
             }
         };
     }
     while (ChosenCard == null)
     {
         Thread.Sleep(30);
     }
     // Let the selection show for a bit
     Thread.Sleep(42);
     lock (_mutex)
     {
         _cardFragment.SetCardSelected(_chosenCard, false);
         return(_chosenCard);
     }
 }
Beispiel #4
0
 public void PlaceCardInMiddle(int playerPosition, Common.Card card)
 {
     lock (_mutex)
     {
         Thread.Sleep(42);
         _cardFragment.AddCardToMiddle(playerPosition, card);
         _statusFragment.SetPlayerWaiting(playerPosition);
     }
 }
        public void Card_ComparingToNull_IsNotEqual()
        {
            var card = new Common.Card()
            {
                DeckNumber = 0,
                Suit       = Common.CardSuit.Acorns,
                Type       = Common.CardType.Ace,
            };

            Assert.That(!card.Equals(null));
            Assert.AreNotEqual(
                Common.ValueComparer <Common.Card> .GetHashCode(card),
                Common.ValueComparer <Common.Card> .GetHashCode(null));
        }
Beispiel #6
0
        private void SwapCards()
        {
            lock (_mutex)
            {
                var indexOfDabbCard = _dabbCards.IndexOf(_selectedDabbCard);
                _dabbCards[indexOfDabbCard] = _selectedPlayerCard;

                var indexOfPlayerCard = _cardsPerPlayer[0].IndexOf(_selectedPlayerCard);
                _cardsPerPlayer[0][indexOfPlayerCard] = _selectedDabbCard;

                _cardFragment.SwapCards(_selectedDabbCard, _selectedPlayerCard);
                _selectedPlayerCard = null;
                _selectedDabbCard   = null;
            }
        }
Beispiel #7
0
        public void SwapCards(Common.Card first, Common.Card second)
        {
            Contract.Requires(first != null);
            Contract.Requires(second != null);
            Contract.Requires(Contract.Exists(_cardGraphics.Keys, x => x == first));
            Contract.Requires(Contract.Exists(_cardGraphics.Keys, x => x == second));

            DevCard.SwapPositions(_cardGraphics[first], _cardGraphics[second]);

            // Swap the drawing order as well so the new player card is not drawn above the other player cards.
            var indexOfFirstCard  = _drawingOrder.IndexOf(first);
            var indexOfSecondCard = _drawingOrder.IndexOf(second);

            _drawingOrder[indexOfFirstCard]  = second;
            _drawingOrder[indexOfSecondCard] = first;
        }
Beispiel #8
0
 private void EventSource_WaitingForCardStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.userInterface.ActivatePlayer(e.PlayerPosition);
     if (this.IsUser(e.PlayerPosition))
     {
         this.mostRecentCard = this.userInterface.LetUserSelectCard();
     }
     else
     {
         // TODO: Implement AI
         this.mostRecentCard = this.cardsPerPlayer[e.PlayerPosition].First();
         this.cardsPerPlayer[e.PlayerPosition] = this.cardsPerPlayer[e.PlayerPosition].Except(new List <Common.Card>()
         {
             this.mostRecentCard
         });
     }
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.CardPlaced);
 }
Beispiel #9
0
        private static Common.Card GetCard(int amountOfCards, int numberOfCardsPerSuit, int counter)
        {
            // Take a new suit every numberOfCardsPerSuit cards.
            var cardSuit = (Common.CardSuit)((counter / numberOfCardsPerSuit) % Enum.GetValues(typeof(Common.CardSuit)).Length);
            // Take a new type every card, repeat from the beginning once numberOfCardsPerSuit have been taken.
            var cardTypeOffset = Enum.GetValues(typeof(Common.CardType)).Length - numberOfCardsPerSuit;
            var cardType       = (Common.CardType)(counter % numberOfCardsPerSuit) + cardTypeOffset;
            // Increase the deck number after half of the cards.
            var deckNumber = (short)(counter / (amountOfCards / 2));

            var card = new Common.Card()
            {
                DeckNumber = deckNumber,
                Suit       = cardSuit,
                Type       = cardType
            };

            return(card);
        }
        public void Card_ComparingToSame_IsEqual()
        {
            var card1 = new Common.Card()
            {
                DeckNumber = 0,
                Suit       = Common.CardSuit.Bells,
                Type       = Common.CardType.Unter,
            };

            var card2 = new Common.Card()
            {
                DeckNumber = 0,
                Suit       = Common.CardSuit.Bells,
                Type       = Common.CardType.Unter,
            };

            Assert.That(card1.Equals(card2));
            Assert.That(card2.Equals(card1));
            Assert.AreEqual(card1.GetHashCode(), card2.GetHashCode());
        }
        public void Card_ComparingToDifferentType_IsNotEqual()
        {
            var card1 = new Common.Card()
            {
                DeckNumber = 0,
                Suit       = Common.CardSuit.Hearts,
                Type       = Common.CardType.Ober,
            };

            var card2 = new Common.Card()
            {
                DeckNumber = 0,
                Suit       = Common.CardSuit.Hearts,
                Type       = Common.CardType.Unter,
            };

            Assert.That(!card1.Equals(card2));
            Assert.That(!card2.Equals(card1));
            Assert.AreNotEqual(card1.GetHashCode(), card2.GetHashCode());
        }
Beispiel #12
0
 private void OnDabbCardSelected(object sender, Common.CardEventArgs e)
 {
     SelectCardOnClick(_dabbCards, () => _selectedDabbCard, (card) => _selectedDabbCard = card, e.Card);
 }
Beispiel #13
0
 private void OnPlayerCardSelected(object sender, Common.CardEventArgs e)
 {
     SelectCardOnClick(_cardsPerPlayer.First(), () => _selectedPlayerCard, (card) => _selectedPlayerCard = card, e.Card);
 }
Beispiel #14
0
 public Turn(Player playedBy, Common.Card playedCard)
 {
     this.playedBy   = playedBy;
     this.playedCard = playedCard;
 }
Beispiel #15
0
        /// <summary>
        /// Adds a card to the middle for the current trick. The card will be drawn above any other cards in the middle.
        /// </summary>
        /// <param name="playerPosition">The position of the player who dealt the card.</param>
        /// <param name="card">The card to be played.</param>
        public void AddCardToMiddle(int playerPosition, Common.Card card)
        {
            var centerPosition = new Vector2(400, 180);

            // Place the player cards in a circle around the middle
            int xFactor = 0;
            int yFactor = 0;

            switch (playerPosition)
            {
            case 0:
                xFactor = 0;
                yFactor = 1;
                break;

            case 1:
                xFactor = 1;
                yFactor = 0;
                break;

            case 2:
                xFactor = 0;
                yFactor = -1;
                break;

            case 3:
                xFactor = -1;
                yFactor = 0;
                break;

            default:
                Debug.Assert(false);
                break;
            }

            var backTexture     = _getBackTexture();
            var frontTexture    = _getFrontTexture();
            var selectedTexture = _getSelectedTexture();
            var font            = _getFont();

            var middleScaleFactor = .4f;
            var cardHeight        = backTexture.Height * middleScaleFactor;
            var cardWidth         = backTexture.Width * middleScaleFactor;

            var xDistance = cardWidth * 0.8f / 2.0f;
            var yDistance = cardHeight * 0.8f / 2.0f;

            var cardPos = new Vector2(
                centerPosition.X + (xDistance * xFactor),
                centerPosition.Y + (yDistance * yFactor) + (cardHeight * 2.5f) // * 2.5f negates the card's internal origin offset
                );

            // Draw the card in the middle
            _cardGraphics[card] = new DevCard(backTexture, frontTexture, selectedTexture, font)
            {
                Angle       = 0,
                Card        = card,
                IsCovered   = false,
                IsSelected  = false,
                Position    = cardPos,
                ScaleFactor = middleScaleFactor
            };
            _drawingOrder.Remove(card);
            _drawingOrder.Add(card);
            _middleCards.Add(card);
            if (_clickableCards.Contains(card))
            {
                _clickableCards.Remove(card);
            }
        }