static void TestCompPickCard() { Deck d = new Deck(); d.Shuffle(); Card tc = new Card(2, 2); Card c1 = new Card(11, 2); Card c2 = new Card(12, 2); Card c3 = new Card(13, 2); //just for testing display trump card Console.WriteLine("The trump card is: " + tc); CompHand ch = new CompHand(); ch.DrawUpToSixCards(ch, d); Console.WriteLine("Current CompHand. Expecting 6 cards.\n" + ch); ch.CompSortCards(ch, c2); Console.WriteLine("Sorted hand of cards.\n" + ch); //Random cards are output -- disregard the notes below Console.WriteLine("Test CompPickCard method\n"); Console.WriteLine("Attacking with a 'Jack of Diamonds' displayed.\n" + c1); Console.WriteLine("Cannot defend. Expecting: false\n" + ch.CanDefend(ch, c1, tc)); ch.CompPickCard(ch, c1, tc); Console.WriteLine("Cannot defend. Expecting hand to have 7 cards:\n" + ch); Console.WriteLine("Attacking with a 'Jack of Diamonds' displayed.\n" + c2); Console.WriteLine("Cannot defend. Expecting: false\n" + ch.CanDefend(ch, c2, tc)); ch.CompPickCard(ch, c2, tc); Console.WriteLine("Cannot defend. Expecting hand to have 8 cards:\n" + ch); Console.WriteLine("Attacking with a 'Jack of Diamonds' displayed.\n" + c3); Console.WriteLine("Cannot defend. Expecting: false\n" + ch.CanDefend(ch, c3, tc)); ch.CompPickCard(ch, c3, tc); Console.WriteLine("Cannot defend. Expecting hand to have 9 cards:\n" + ch); }
static void TestCompDefendMethod() { Deck d = new Deck(); d.Shuffle(); Card c2 = d.DetermineTrump(); Card c3 = new Card(4, 1); Card c4 = new Card(11, 4); //just for testing display trump card Console.WriteLine("The trump card is: " + d.DisplayTrumpCard()); CompHand ch = new CompHand(); ch.DrawUpToSixCards(ch, d); Console.WriteLine("Current CompHand. Expecting 6 cards.\n" + ch); ch.CompSortCards(ch, c2); Console.WriteLine("Sorted hand of cards.\n" + ch); //Random cards are output -- disregard the notes below Console.WriteLine("Test Defend method\n"); Console.WriteLine("Attacking with a picked card. Expecting '4 of Clubs' displayed.\n" + c3); Console.WriteLine("Defending with a card from a deck. Expecting same suite card, trump or null.\n" + ch.CompDefend(ch, c3, c2)); Console.WriteLine("Current CompHand. Expecting 5 cards left in a hand:\n" + ch); Console.WriteLine("Attacking with a picked card. Expecting 'Jack of Spades' displayed.\n" + c4); Console.WriteLine("Defending with a card from a deck. Expecting same suite card, trump or null.\n" + ch.CompDefend(ch, c4, c2)); Console.WriteLine("Current CompHand. Expecting 4 cards left in a hand:\n" + ch); }
static void DrawUpToSixCards(Deck d, Card tc, Hand h1, CompHand ch) { if (h1.NumCards < 6) { h1.DrawUpToSixCards(h1, d, tc); } if (ch.NumCards < 6) { ch.DrawUpToSixCards(ch, d, tc); ch.CompSortCards(ch, tc); } }
static void TestCompSortCards() { Deck d = new Deck(); d.Shuffle(); Card tc = d.DetermineTrump(); //just for testing display trump card Console.WriteLine("The trump card is: " + d.DisplayTrumpCard()); CompHand ch = new CompHand(); ch.DrawUpToSixCards(ch, d); Console.WriteLine("Current CompHand. Expecting 6 cards.\n" + ch); ch.CompSortCards(ch, tc); Console.WriteLine("Sorted hand of cards.\n" + ch); }
static void TestCompAttackSameValueCard() { Deck d = new Deck(); CompHand ch = new CompHand(); ch.DrawUpToSixCards(ch, d); ch.AddCard(new Card(13, 1)); ch.AddCard(new Card(13, 2)); Card c = new Card(13, 3); Console.WriteLine("Current Fool Hand. Expecting 8 cards.\n" + ch); Console.WriteLine("Test CompAttackSameCardValue method"); Console.WriteLine("Attacking with another King from the Comp Hand:\n" + ch.CompAttackSameCardValue(ch, c)); Console.WriteLine("Attacking with another King from the Comp Hand:\n" + ch.CompAttackSameCardValue(ch, c)); Console.WriteLine("Current Fool Hand. Expecting 6 cards.\n" + ch); Console.WriteLine("Checking if there is a Queen to attack with. Expecting 'null' returned and 6 cards in hand:\n" + ch.CompAttackSameCardValue(ch, new Card(12, 1)) + "\nnumber of cards in the hand:\n" + ch); }
static void TestCanAttackAgainMethod() { Deck d = new Deck(); d.Shuffle(); FoolHand fh = new FoolHand(); CompHand ch = new CompHand(); PlayHand ph = new PlayHand(); Card tc = d.DetermineTrump(); ch.DrawUpToSixCards(ch, d); ch.CompSortCards(ch, tc); fh.DrawUpToSixCards(fh, d); fh.SortCards(fh, tc); Card lastCard = d.GetCard(d.NumCards - 1); Console.WriteLine("Test CanAttackAgain method"); Console.WriteLine("Determining a trump card. The trump card (Suit) is: " + tc); Console.WriteLine("Last card in the deck - should be the same as the trump card: " + lastCard); Console.WriteLine("Current FoolHand. Expecting 6 cards.\n" + fh); Console.WriteLine("Current CompHand. Expecting 6 cards.\n" + ch); Card attkCard = ch.Attack(0, ch, ph); Console.WriteLine("Computer attacking a player with: " + attkCard); ph.AddCardToPlayHand(ph, fh, attkCard); Card defCard = fh.Defend(fh, attkCard, tc); Console.WriteLine("Player is defending with the following card: " + defCard); ph.AddCardToPlayHand(ph, fh, defCard); Console.WriteLine("Current FoolHand. Expecting 5 cards.\n" + fh); Console.WriteLine("Current CompHand. Expecting 5 cards.\n" + ch); Console.WriteLine("Current PlayHand:\n" + ph); Console.WriteLine("Checking if compuetr can attack again: " + ch.CanAttackAgain(ch, ph)); }
static void Main(string[] args) { const string YOU_LOSE = "You lost :(."; //Message displayed at the end of the game when someone loses Deck deck = new Deck(); //New deck instance deck.Shuffle(); Card trumpCard = deck.DetermineTrump(); //Determining and displaying a trump (trump suit) card and placing it at the bottom of the deck Console.WriteLine("Determine a trump card. The trump is: " + trumpCard); FoolHand player = new FoolHand(); CompHand computer = new CompHand(); PlayHand playHand = new PlayHand(); deck.DealCards(player, computer); //Dealing 6 cards to each player in an alternating pattern do { player.SortCards(player, trumpCard); //sorting cards Console.WriteLine("Player's hand is as follows:\n" + player); computer.CompSortCards(computer, trumpCard); Console.WriteLine("\nComputers's hand is as follows:\n" + computer); bool playerTurn = true; //starting the game with the human player //PLAYER'S TURN do { int cardIndex = -1; bool canAttack = true; Console.WriteLine("\nPlease enter the Card number you would like to attack with or enter 'n' to end your turn: "); string input = Console.ReadLine(); //cardIndex = InputValidation(input, player); if (input == "n") { playerTurn = false; canAttack = false; } else { cardIndex = InputValidation(input, player); //^^^^SOMETHING IS OFF IN THE LINES ABOVE ^^^^^ } //if (cardIndex == player.NumCards + 1) //entering 1 more than the total number in a hand terminates player's turn // playerTurn = false; Card attckCard = player.Attack(cardIndex, player); while (canAttack) // playHand is empty - needs more checking ***|| playHand.IsEmpty || !player.IsEmpty*** { if (playHand.Contains(attckCard)) { Console.WriteLine("If you attack more than once, please make sure you attack with a card which value macthes any of the ones that are currently in play."); canAttack = false; playerTurn = false; } else { Console.WriteLine("Player's card to attack with is: " + attckCard); playHand.AddCardToPlayHand(playHand, computer, attckCard); Thread.Sleep(2000); //check if computer can defend Card defCard = computer.CompDefend(computer, attckCard, trumpCard); Console.WriteLine("Computer's card to defend with is: " + defCard); if (defCard != null) { playHand.AddCard(defCard); TestMessagesMethod(playHand, player, computer); //TEST Console.WriteLine("\nPlease enter the Card number you would like to attack with or enter 'n' to end your turn: "); input = Console.ReadLine(); //cardIndex = InputValidation(input, player); if (input == "n") { playerTurn = false; } else { cardIndex = InputValidation(input, player); } //if (cardIndex == player.NumCards + 1) //entering 1 more than the total number in a hand terminates player's turn // playerTurn = false; canAttack = player.CanAttackAgain(cardIndex, player, playHand); //PROBLEM SOMEWHERE HERE if (canAttack) { attckCard = player.AttackWithCard(player, cardIndex); } TestMessagesMethod(playHand, player, computer); //TEST } else if (!computer.CanDefend(computer, attckCard, trumpCard)) { computer.PickUpCards(computer, playHand); playHand.DiscardAll(); player.DrawUpToSixCards(player, deck, trumpCard); player.SortCards(player); computer.CompSortCards(computer, trumpCard); //Console.WriteLine("Player's current hand is:\n" + player); TestMessagesMethod(playHand, player, computer); //TEST Console.WriteLine("\nPlease enter the Card number you would like to attack with: "); input = Console.ReadLine(); cardIndex = InputValidation(input, player); if (cardIndex == player.NumCards + 1) //entering 1 more than the total number in a hand terminates player's turn { playerTurn = false; } canAttack = player.CanAttackAgain(cardIndex, player, playHand); //PROBLEM SOMEWHERE HERE if (canAttack) { attckCard = player.AttackWithCard(player, cardIndex); } } } } string doneWithTurn = EndTurn(); if (doneWithTurn == "y" && playHand.NumCards % 2 == 0) { playHand.DiscardAll(); playerTurn = false; } else if (doneWithTurn == "y" && playHand.NumCards % 2 != 0) { computer.PickPlayHandCards(computer, playHand); Console.WriteLine("Computer picked up because it could not defend the attack. Computer's hand is currently:\n" + computer); computer.CompSortCards(computer, trumpCard); player.DrawUpToSixCards(player, deck, trumpCard); Console.WriteLine("Player's hand is as follows:\n" + player); //just for testing } Console.WriteLine("Current PlayHand:\n" + playHand.NumCards); } while (playerTurn); EndOfTurnMaintenance(deck, trumpCard, player, computer); TestMessagesMethod(playHand, player, computer); //TEST //COMPUTER'S TURN do { bool canAttack = true; bool canAttackAgain = false; Console.WriteLine("\nNow, it's computer's turn to attack."); Card compAttack = new Card(); while (canAttack) // playHand is empty - needs more checking || playHand.IsEmpty || !computer.IsEmpty { if (playHand.IsEmpty) { compAttack = computer.Attack(0, computer); playHand.AddCard(compAttack); } else if (canAttackAgain || (canAttack && !playHand.IsEmpty)) { compAttack = computer.AttackAgain(computer, playHand); playHand.AddCard(compAttack); } Console.WriteLine("Computer attacks with: " + compAttack); bool canDefend = false; //bool that gets assigned based on whether or not player can defend Console.WriteLine("\nPlease enter the Card number you would like to defend with, or press 'p' to pick up the card(s): "); string input = Console.ReadLine(); if (input == "p") { player.PickPlayHandCards(player, playHand); computer.OffLoadAttackCards(compAttack, computer, playHand); player.PickPlayHandCards(player, playHand); computer.DrawUpToSixCards(computer, deck, trumpCard); computer.CompSortCards(computer, trumpCard); player.SortCards(player); canAttack = true; TestMessagesMethod(playHand, player, computer); //TEST } else { int cardIndex = InputValidation(input, player); Card defCard = player.GetCard(cardIndex); canDefend = player.CanDefendWithSpecificCard(compAttack, defCard, trumpCard); Console.WriteLine("Checking if a player can defend (true/false): " + canDefend); Console.WriteLine("Player is defending with: " + defCard); if (canDefend) { player.DefendWithCard(defCard, player); playHand.AddCard(defCard); canAttackAgain = computer.CanAttackAgain(computer, playHand); canAttack = computer.CanAttackAgain(computer, playHand); TestMessagesMethod(playHand, player, computer); //TEST } else { Console.WriteLine("You cannot defend with this card."); //player.PickUpCards(player, playHand); //player.SortCards(player); //computer.DrawUpToSixCards(computer, deck, trumpCard); //computer.CompSortCards(computer, trumpCard); computer.OffLoadAttackCards(compAttack, computer, playHand); player.PickPlayHandCards(player, playHand); computer.DrawUpToSixCards(computer, deck, trumpCard); computer.CompSortCards(computer, trumpCard); player.SortCards(player); canAttack = true; } } } playHand.DiscardAll(); //TestMessagesMethod(playHand, player, computer); //TEST playerTurn = true; } while (!playerTurn); EndOfTurnMaintenance(deck, trumpCard, player, computer); } while (!deck.IsEmpty); //CHECK FOR LOSER }