public void SetCardSelected(Common.Card card, bool selected) { if (_cardGraphics.ContainsKey(card)) { _cardGraphics[card].IsSelected = selected; } }
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); } } } }
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); } }
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)); }
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; } }
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; }
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); }
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()); }
private void OnDabbCardSelected(object sender, Common.CardEventArgs e) { SelectCardOnClick(_dabbCards, () => _selectedDabbCard, (card) => _selectedDabbCard = card, e.Card); }
private void OnPlayerCardSelected(object sender, Common.CardEventArgs e) { SelectCardOnClick(_cardsPerPlayer.First(), () => _selectedPlayerCard, (card) => _selectedPlayerCard = card, e.Card); }
public Turn(Player playedBy, Common.Card playedCard) { this.playedBy = playedBy; this.playedCard = playedCard; }
/// <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); } }