// frmGameGUI public frmGameGUI(frmMainMenu mainMenu) { menuForm = mainMenu; InitializeComponent(); this.Show(); // Read config file if (!File.Exists("./DurakConfiguration")) { File.Create("./DurakConfiguration").Dispose(); } TextReader tr = new StreamReader("./DurakConfiguration"); HumanName = tr.ReadLine(); AiName = tr.ReadLine(); String isCardVisible = tr.ReadLine(); if (!String.IsNullOrEmpty(isCardVisible)) { aiCardsVisible = bool.Parse(isCardVisible); } tr.Close(); // The DurakGame constructor creates a game instance // with one human and one AI player, and deals hands out to // both of them. // By passing this form as a parameter, it can receive data from // the game and have GUI events triggered by it durakGame = new DurakGame(this); // Capture players from DurakGame HumanPlayer = durakGame.Players[0]; AiPlayer = durakGame.Players[1]; // Set Names if (!String.IsNullOrEmpty(HumanName)) { HumanPlayer.Name = HumanName; } if (!String.IsNullOrEmpty(AiName)) { AiPlayer.Name = AiName; } lblPlayerName.Text = HumanPlayer.Name; lblAIName.Text = AiPlayer.Name; //Throw In events durakGame.OnPuttingDown += PuttingDown; durakGame.PuttingDownComplete += PuttingDownComplete; gameStats.InitializeStatistics(); this.InitiateGame(); }
/// <summary> /// AI Defend Logic /// </summary> /// <param name="river">River cards</param> /// <param name="deck">Deck cards</param> /// <returns>The card played, and the index of the card</returns> public Tuple <PlayingCard, int> Defend(List <PlayingCard> river, List <PlayingCard> deck = null) { PlayingCard bestViableCard = null; PlayingCard lowestTrumpCard = null; foreach (PlayingCard card in Cards) { if (river.Last().Suit != TrumpSuit && card.Suit == TrumpSuit) { if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank)) { lowestTrumpCard = card; } } else if ((card.Suit == river.Last().Suit) && DurakGame.GetDurakRank(card.Rank) > DurakGame.GetDurakRank(river.Last().Rank)) { if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank)) { bestViableCard = card; } } } if (bestViableCard == null && lowestTrumpCard != null) { if (river.Count > 2 || (deck.Count + Cards.Count < 12)) { bestViableCard = lowestTrumpCard; } } int cardIndex = Cards.IndexOf(bestViableCard); if (bestViableCard != null) { Cards.Remove(bestViableCard); } return(Tuple.Create(bestViableCard, cardIndex)); }
/// <summary> /// AI Attack logic /// </summary> /// <param name="river">Cards in river</param> /// <param name="deck">Unplayed cards</param> /// <returns>The card played, and the index of the card</returns> public Tuple <PlayingCard, int> Attack(List <PlayingCard> river = null, List <PlayingCard> deck = null) { PlayingCard bestViableCard = null; PlayingCard lowestTrumpCard = null; foreach (PlayingCard card in Cards) { //if theres no cards in the river if (river.Count == 0) { if (card.Suit == TrumpSuit) { if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank)) { lowestTrumpCard = card; } } else if (card.Suit != TrumpSuit) { if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank)) { bestViableCard = card; } } } else { foreach (PlayingCard riverCard in river) { if (riverCard.Rank == card.Rank) { if (card.Suit == TrumpSuit) { if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank)) { lowestTrumpCard = card; } } else if (card.Suit != TrumpSuit) { if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank)) { bestViableCard = card; } } } } } } // If AI has a playable trump card and no alternative plays if (bestViableCard == null && lowestTrumpCard != null) { if (river.Count > 2 || (deck.Count + Cards.Count < 12)) { bestViableCard = lowestTrumpCard; } } int cardIndex = Cards.IndexOf(bestViableCard); if (bestViableCard != null) { Cards.Remove(bestViableCard); } return(Tuple.Create(bestViableCard, cardIndex)); }