public void DealCards(Deck deck, CardStack playerOne, CardStack playerTwo) { deck.GetAllCards(); ShuffleStrategyFactory shuffleStrategyFactory = new ShuffleStrategyFactory(); deck.Shuffle(shuffleStrategyFactory.Create(ShuffleAlgorithm.Knuth)); var jokers = deck.DrawAll(Rank.Joker, Suit.None); playerOne.Add(jokers); playerTwo.Add(deck.DrawCards(jokers.Count)); //TODO duplicate of RandomHandoutStrategy - could use that strategy for the rest of the deck. var cardCount = 0; while (deck.TryDrawCard(out Card c)) { cardCount++; if (cardCount % 2 == 0) { playerOne.Add(c); } else { playerTwo.Add(c); } } }
public void Next() { if (NextPlayer == currentTurn.StartingPlayer && Stack.Count != 0) { if (tricksUpdated) { tricksUpdated = false; Stack = new CardStack(); currentTurn = log.Turns[TurnIndex++]; NextPlayer = currentTurn.StartingPlayer; } else { Players[currentTurn.WinningPlayer].Tricks[currentTurn.Trick] += (currentTurn.Trick == Color.Black) ? +1 : -1; tricksUpdated = true; } } else { Card card = currentTurn.Cards[NextPlayer]; Stack.Add(card); Players[NextPlayer].Hand.Remove(card); NextPlayer = (NextPlayer + 1) % log.PlayerCount; } }
public void GIVEN_a_card_stack_WHEN_add_called_with_null_THEN_exception_is_thrown() { // Arrange var cardStack = new CardStack(); // Act cardStack.Add(null); }
public void GIVEN_a_card_stack_with_two_cards_WHEN_top_card_is_called_THEN_last_card_added_is_returned() { // Arrange var fakeCard1 = new FakeCard(1, null); var fakeCard2 = new FakeCard(2, null); var cardStack = new CardStack(); cardStack.Add(fakeCard1); cardStack.Add(fakeCard2); // Act var result = cardStack.TopCard(); // Assert Assert.IsNotNull(result); Assert.AreEqual("Fake2", result.Name); }
public void GIVEN_a_card_stack_WHEN_add_called_with_a_card_THEN_card_is_added() { // Arrange var fakeCard = new FakeCard(1, null); var cardStack = new CardStack(); // Act cardStack.Add(fakeCard); var result = cardStack.HasCards(); // Assert Assert.IsTrue(result); }
// Should only be called on one of the 7 columns and when FaceUpStack is empty but FaceDownStack has cards. public void FlipCardUp(int stackIndex) { if (stackIndex < 1 || stackIndex > columns.Count) { throw new IndexOutOfRangeException(); } CardStack faceDownStack = columns[stackIndex - 1].FaceDownStack; CardStack faceUpStack = columns[stackIndex - 1].FaceUpStack; Card selectedCard = faceDownStack.DrawCard(); faceUpStack.Add(selectedCard); }
public void GIVEN_a_card_stack_with_one_card_WHEN_top_card_is_called_THEN_card_is_returned() { // Arrange var fakeCard = new FakeCard(1, null); var cardStack = new CardStack(); cardStack.Add(fakeCard); // Act var result = cardStack.TopCard(); // Assert Assert.IsNotNull(result); }
public void GIVEN_a_card_stack_that_has_a_card_WHEN_get_cards_is_called_THEN_a_card_is_returned() { // Arrange var fakeCard = new FakeCard(1, null); var cardStack = new CardStack(); cardStack.Add(fakeCard); // Act var result = cardStack.GetCards().ToList(); // Assert Assert.AreEqual(1, result.Count); Assert.AreEqual("Fake1", result.First().Name); }
void PlayCard() { // for bot only if (transform.parent.ToString().Contains("Player")) { CardStack dealer = GameObject.Find("Dealer").GetComponent <CardStack>(); Player player = transform.parent.GetComponent <Player>(); if (player.isPlayerTurn && !player.isHuman && !player.playerStack.isGameStack) { //dealer.Add(player.playerStack.Remove(card)); dealer.Add(player.playerStack.TransferCard(card, dealer)); } } }
// TODO: Abstract a lot of this out into a new SolitaireGameBuilder class. public SolitaireGame() { StatusMessages = new List <string>(); deck = new DeckBuilder().BuildDeck(true); drawStack = new CardStack(true); drawer = new SolitaireDrawer(); columns = new List <StackColumn>(); // Create 7 stacks of face down cards. for (int i = 0; i < 7; i++) { CardStack stack = new CardStack(false); StackColumn column = new StackColumn(); column.FaceDownStack = stack; columns.Add(column); } // Distribute the cards across the stacks. for (int i = 0; i < 7; i++) { for (int ii = i; ii < 7; ii++) { CardStack stack = columns[ii].FaceDownStack; Card drawnCard = deck.DrawCard(); stack.Add(drawnCard); } } // Transfer top cards to their own stacks. for (int i = 0; i < columns.Count; i++) { StackColumn column = columns[i]; CardStack faceDownStack = column.FaceDownStack; CardStack faceUpStack = new CardStack(true); Card topCard = faceDownStack.DrawCard(); faceUpStack.Add(topCard); column.FaceUpStack = faceUpStack; } TransferCardToDrawStack(); }
public void DealCards(Deck deck, CardStack playerOne, CardStack playerTwo) { ShuffleStrategyFactory shuffleStrategyFactory = new ShuffleStrategyFactory(); deck.Shuffle(shuffleStrategyFactory.Create(ShuffleAlgorithm.Knuth)); var cardCount = 0; while (deck.TryDrawCard(out Card c)) { cardCount++; if (cardCount % 2 == 0) { playerOne.Add(c); } else { playerTwo.Add(c); } } }
void OnMouseUp() { if (mousePosition != Input.mousePosition) { return; } //Debug.Log("Id: " + card.id); //Debug.Log("Rank: " + card.rank); //Debug.Log("Suit: " + card.suit); if (transform.parent.ToString().Contains("Player")) { CardStack dealer = GameObject.Find("Dealer").GetComponent <CardStack>(); Player player = transform.parent.GetComponent <Player>(); if (player.isPlayerTurn && player.localPlayer && !player.playerStack.isGameStack) { //dealer.Add(player.playerStack.Remove(card)); dealer.Add(player.playerStack.TransferCard(card, dealer)); } } }
private void TransferCardToDrawStack() { Card drawnCard = deck.DrawCard(); drawStack.Add(drawnCard); }
// Function: bkw_DoWork // Runs the BlackJack game private void bkw_DoWork(object sender, DoWorkEventArgs e) { // create a shoe of cards containing 7 decks shoe = new CardStack(7); // shuffle the shoe shoe.Shuffle(); // create dealer's hand CardStack dealerCards = new CardStack(); // loop until cancelled while (!bkw.CancellationPending) { // if shoe contains 52 cards or less, then reset the shoe to 7 decks if (shoe.Count() <= 52) { // reset (refill with cards) shoe.Reset(); // shuffle cards shoe.Shuffle(); } // update server GUI UpdateCardsLeft(shoe.Count()); // create copy of current player list so that it doesn't change during the round List <Player> thisRoundPlayers = new List <Player>(playerList); foreach (Player serverPlayer in thisRoundPlayers) { if (!serverPlayer.isPlaying) { playerList.Remove(serverPlayer); } } // if no players, then stop the game if (playerList.Count == 0) { return; } // create copy of current player list so that it doesn't change during the round thisRoundPlayers = new List <Player>(playerList); // get each player's bet foreach (Player serverPlayer in thisRoundPlayers) { if (serverPlayer.GetMoney() <= 0) { serverPlayer.OutOfMoney(); DisconnectPlayer(serverPlayer); continue; } // ask for player's bet serverPlayer.AskForBet(); string[] playerMessage; try { // split the message to parse it playerMessage = serverPlayer.Read().Split(":".ToCharArray()); } catch { // remove them from the lists if (playerList.Contains(serverPlayer)) { playerList.Remove(serverPlayer); } // mark player as not playing serverPlayer.isPlaying = false; // update status to disconnected SetPlayerStatus(serverPlayer.GetPlayerNum(), "Disconnected"); // go to next player continue; } // if disconnected if (playerMessage[0] == "disconnect") { // disconnected them DisconnectPlayer(serverPlayer); // go to next player continue; } // get bet from the player if (playerMessage[0] != "bet") { throw new Exception("expected a bet."); } int bet; // parse the second part of message for bet amount if (!int.TryParse(playerMessage[1], out bet)) { throw new Exception("expected a number for the bet."); } // clear their hand serverPlayer.ClearCards(); try { // place the bet PlayerBet(serverPlayer, bet); } catch { // disconnect them DisconnectPlayer(serverPlayer); // go to next player continue; } } // give each player first card foreach (Player serverPlayer in thisRoundPlayers) { // give them the card GivePlayerCard(serverPlayer, shoe.DrawCard()); // update server GUI UpdateCardsLeft(shoe.Count()); } // give each player 2nd card and, if they hit, other cards foreach (Player serverPlayer in thisRoundPlayers) { string playerMessage = ""; do { // give them a card GivePlayerCard(serverPlayer, shoe.DrawCard()); // update cards left server GUI UpdateCardsLeft(shoe.Count()); // stop if busted if (serverPlayer.GetPoints() >= 21) { break; } // ask for hit or stand serverPlayer.AskHitOrStand(); try { // get their response playerMessage = serverPlayer.Read(); } catch { // disconnected player DisconnectPlayer(serverPlayer); // go to next player continue; } // while they hit, haven't busted, and have less than 5 cards: keep dealing them cards } while (playerMessage == "hit" && serverPlayer.GetPoints() <= 21 && serverPlayer.GetCards().Count() < 5); // check if they busted if (serverPlayer.GetPoints() > 21) { serverPlayer.Bust(); } // if disconnect message else if (playerMessage == "disconnect") { // disconnect them DisconnectPlayer(serverPlayer); } // check if they gave a bad response else if (playerMessage != "stand" && playerMessage != "hit" && playerMessage != "" && playerMessage != null) { throw new Exception("expected hit, stand, or disconnect response"); } } // check if all players busted bool allBusted = true; foreach (Player serverPlayer in thisRoundPlayers) { allBusted = allBusted && serverPlayer.IsBusted(); } // If all players busted, the hand ends automatically without the dealer having to play their hand if (allBusted) { foreach (Player serverPlayer in thisRoundPlayers) { theServer.SendAll(serverPlayer.GetPlayerNum() + ":lost"); } // clear each player's hand foreach (Player serverPlayer in thisRoundPlayers) { serverPlayer.Clear(); ClearCardList(serverPlayer.GetPlayerNum()); } // clear dealer's hand dealerCards.Clear(); ClearCardList(-100); // end this round theServer.SendAll("roundover"); continue; } // if not all players busted: // give dealer first card Card drawnCard = shoe.DrawCard(); dealerCards.Add(drawnCard); // update cards left label UpdateCardsLeft(shoe.Count()); // send card to clients theServer.SendAll("dealer:card:" + drawnCard.GetSymbol() + ":" + drawnCard.GetSuit()); // give dealer second card, and hit while points < 17 do { // draw card from the shoe drawnCard = shoe.DrawCard(); // add the card to dealer's hand dealerCards.Add(drawnCard); // send the card to clients theServer.SendAll("dealer:card:" + drawnCard.GetSymbol() + ":" + drawnCard.GetSuit()); // update server GUI AddCardToList(listBox_Dealer, drawnCard); UpdateCardsLeft(shoe.Count()); } while (dealerCards.GetPoints() < 17); // check if dealer busted bool dealerBusted = !(dealerCards.GetPoints() <= 21); // check for winners foreach (Player serverPlayer in thisRoundPlayers) { // if player got blackjack and dealer did not, then 3 to 2 bet return if ((serverPlayer.GetCards().Count == 2) && (serverPlayer.GetPoints() == 21) && ((dealerCards.GetPoints() != 21) || dealerBusted)) { // calculate new amount of money int newMoney = serverPlayer.GetMoney() + serverPlayer.GetBet() + (3 / 2) * serverPlayer.GetBet(); // set player's bet to 0 PlayerBet(serverPlayer, 0); // update gui and send money to clients UpdatePlayerMoney(serverPlayer, newMoney); // send clients message that this player won with a "blackjack" theServer.SendAll(serverPlayer.GetPlayerNum() + ":blackjack"); } // if dealer busted and player did not, or neither busted but player got more points, then 1 to 1 bet return else if ((dealerBusted || (serverPlayer.GetPoints() > dealerCards.GetPoints())) && !serverPlayer.IsBusted()) { // calculate new amount of money int newMoney = serverPlayer.GetMoney() + 2 * serverPlayer.GetBet(); // set player's bet to 0 PlayerBet(serverPlayer, 0); // update gui and send money to clients UpdatePlayerMoney(serverPlayer, newMoney); // send clients message that this player won theServer.SendAll(serverPlayer.GetPlayerNum() + ":won"); } // if tied (push), then just return bet else if ((dealerCards.GetPoints() <= 21) && (serverPlayer.GetPoints() == dealerCards.GetPoints())) { // calculate new amount of money int newMoney = serverPlayer.GetMoney() + serverPlayer.GetBet(); // set player's bet to 0 PlayerBet(serverPlayer, 0); // update gui and send money to clients UpdatePlayerMoney(serverPlayer, newMoney); // send clients message that this player pushed theServer.SendAll(serverPlayer.GetPlayerNum() + ":push"); } // otherwise, player lost their bet else { // set player's bet to 0 PlayerBet(serverPlayer, 0); // send clients message that this player lost theServer.SendAll(serverPlayer.GetPlayerNum() + ":lost"); } } // clear each player's hand foreach (Player serverPlayer in thisRoundPlayers) { serverPlayer.Clear(); ClearCardList(serverPlayer.GetPlayerNum()); } // clear dealer's hand dealerCards.Clear(); ClearCardList(-100); // send round over message theServer.SendAll("roundover"); } }
public void Deal(Card aCard) { playerCardStack.Add(aCard); }