From aedc8872983424cb3a43628225175f2c0e4bf2d3 Mon Sep 17 00:00:00 2001 From: Stian Andreas Ytterstad Nordvik Date: Mon, 15 Jan 2024 08:35:02 +0100 Subject: [PATCH] Stian Andreas Ytterstad Nordvik C#3 --- exercise.main/Core.cs | 75 ++++++++++++-- exercise.main/Extension.cs | 72 +++++++++++++- exercise.main/Objects/Card.cs | 24 +++++ exercise.main/Objects/Deck.cs | 50 ++++++++++ exercise.main/Objects/Player.cs | 40 ++++++++ exercise.main/PokerGame.cs | 167 ++++++++++++++++++++++++++++++++ exercise.main/Program.cs | 14 ++- exercise.tests/CoreTests.cs | 22 +++++ 8 files changed, 454 insertions(+), 10 deletions(-) create mode 100644 exercise.main/Objects/Card.cs create mode 100644 exercise.main/Objects/Deck.cs create mode 100644 exercise.main/Objects/Player.cs create mode 100644 exercise.main/PokerGame.cs diff --git a/exercise.main/Core.cs b/exercise.main/Core.cs index 7568220..cbcde78 100644 --- a/exercise.main/Core.cs +++ b/exercise.main/Core.cs @@ -1,4 +1,5 @@ using System; + using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -10,23 +11,83 @@ namespace exercise.main { public class Core { - - + + //TODO: complete the following method, keeping the signature the same public bool winningPair(IEnumerable> hand, out Tuple result) { - result = new Tuple(string.Empty, string.Empty); - + + result = new Tuple(string.Empty, string.Empty); - + foreach (var pair in hand) + { + if (GetValueOfCard(pair.Item1) == GetValueOfCard(pair.Item2) && + GetValueOfCard(pair.Item1) > GetValueOfCard(result.Item1)) + { + result = pair; - + } + + + } return result.Item1!=string.Empty ? true : false; + } public int GetValueOfCard(string card) { - return 0; + if (card == "2") + { + return 2; + } + else if (card == "3") + { + return 3; + } + else if (card == "4") + { + return 4; + } + else if (card == "5") + { + return 5; + } + else if (card == "6") + { + return 6; + } + else if (card == "7") + { + return 7; + } + else if (card == "8") + { + return 8; + } + else if (card == "9") + { + return 9; + } + else if (card == "10") + { + return 10; + } else if (card == "J") + { + return 11; + } else if (card == "Q") + { + return 12; + } else if (card == "K") + { + return 13; + } else if (card == "A") + { + return 14; + } else + { + return 0; + } + } } } diff --git a/exercise.main/Extension.cs b/exercise.main/Extension.cs index b33ba1f..f1a5dd7 100644 --- a/exercise.main/Extension.cs +++ b/exercise.main/Extension.cs @@ -13,7 +13,77 @@ public bool winningThree(IEnumerable> hand, out Tu { result = new Tuple(string.Empty, string.Empty, string.Empty); - return false; + + foreach (var triplePair in hand) { + + if (triplePair.Item1 == triplePair.Item2 && triplePair.Item3 == triplePair.Item2 + && GetValueOfCard(triplePair.Item1) > GetValueOfCard(result.Item1)){ + result = triplePair; + } + } + + return result.Item1 != string.Empty ? true : false; + } + + public int GetValueOfCard(string card) + { + if (card == "2") + { + return 2; + } + else if (card == "3") + { + return 3; + } + else if (card == "4") + { + return 4; + } + else if (card == "5") + { + return 5; + } + else if (card == "6") + { + return 6; + } + else if (card == "7") + { + return 7; + } + else if (card == "8") + { + return 8; + } + else if (card == "9") + { + return 9; + } + else if (card == "10") + { + return 10; + } + else if (card == "J") + { + return 11; + } + else if (card == "Q") + { + return 12; + } + else if (card == "K") + { + return 13; + } + else if (card == "A") + { + return 14; + } + else + { + return 0; + } + } } diff --git a/exercise.main/Objects/Card.cs b/exercise.main/Objects/Card.cs new file mode 100644 index 0000000..3c4a09c --- /dev/null +++ b/exercise.main/Objects/Card.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Objects +{ + public class Card + { + private string _value; + + private string _suit; + + public Card(string value, string suit) + { + _value = value; + _suit = suit; + } + + public string Value { get { return _value; } set { _value = value; } } + public string Suit { get { return _suit; } set { _suit = value; } } + } +} diff --git a/exercise.main/Objects/Deck.cs b/exercise.main/Objects/Deck.cs new file mode 100644 index 0000000..0e2b6c9 --- /dev/null +++ b/exercise.main/Objects/Deck.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.ExceptionServices; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Objects +{ + public class Deck + { + + private List _cards; + + public Deck(List cards) + { + _cards = cards; + } + + public List Cards { get { return _cards; } set { _cards = value; } } + + public void Shuffle() + { + Random rng = new Random(); + int n = Cards.Count; + while (n > 1) + { + n--; + int k = rng.Next(n + 1); + Card value = Cards[k]; + Cards[k] = Cards[n]; + Cards[n] = value; + + } + + + } + + public Card Deal() + { + Card drawnCard = Cards.First(); + Cards.Remove(Cards.First()); + return drawnCard; + } + + + + } +} diff --git a/exercise.main/Objects/Player.cs b/exercise.main/Objects/Player.cs new file mode 100644 index 0000000..14176c5 --- /dev/null +++ b/exercise.main/Objects/Player.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main.Objects +{ + public class Player + { + private string _name; + private List _hand; + + public Player (string name, List hand) + { + _name = name; + _hand = hand; + + } + + public string Name { get { return _name; } set { _name = value; } } + public List Hand { get { return _hand; } set { _hand = value; } } + + public void AddCard(Card newCard){ + Hand.Add(newCard); + } + + public void ClearHand(){ + Hand.Clear(); + } + + public List currentHand(){ + return Hand; + } + + + + } +} diff --git a/exercise.main/PokerGame.cs b/exercise.main/PokerGame.cs new file mode 100644 index 0000000..076002d --- /dev/null +++ b/exercise.main/PokerGame.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using exercise.main.Objects; +namespace exercise.main +{ + public class PokerGame + { + + List Values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]; + List Suits = ["Spades", "Hearts", "Diamonds", "Clubs"]; + List Cards = new List(); + + public void startGame() + { + foreach (string suit in Suits) { + foreach(string value in Values) + { + Card current = new Card(value, suit); + Cards.Add(current); + } + } + + Deck deck = new Deck(Cards); + deck.Shuffle(); + + Console.WriteLine("Enter Player1 name: "); + string player1Name = Console.ReadLine(); + Console.WriteLine("Enter Player2 name: "); + string player2Name = Console.ReadLine(); + + List player1Hand = new List(); + List player2Hand = new List(); + player1Hand.Add(deck.Deal()); + player2Hand.Add(deck.Deal()); + player1Hand.Add(deck.Deal()); + player2Hand.Add(deck.Deal()); + + Player player1 = new Player(player1Name, player1Hand); + Player player2 = new Player(player2Name, player2Hand); + + Console.WriteLine(); + Console.WriteLine("Player names"); + Console.WriteLine(player1.Name + " " + player2.Name); + Console.WriteLine(); + Console.WriteLine($"{player1.Name} hand:"); + + foreach(Card card in player1.Hand){ + Console.Write(card.Value + " " + card.Suit + " "); + } + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine($"{player2.Name} hand:"); + + foreach (Card card in player2.Hand) { + Console.Write(card.Value + " " + card.Suit + " "); + } + + Console.WriteLine(); + + List flop = new List(); + flop.Add(deck.Deal()); + flop.Add(deck.Deal()); + flop.Add(deck.Deal()); + + Console.WriteLine(); + Console.WriteLine("Dealer flops cards: "); + Console.WriteLine("Cards on table: "); + foreach (Card card in flop){ + Console.Write(card.Value + " " + card.Suit + " "); + } + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Dealer turns card: "); + Card turn = deck.Deal(); + Console.WriteLine("Cards on table: "); + + foreach (Card card in flop) + { + Console.Write(card.Value + " " + card.Suit + " " ); + } + Console.WriteLine(turn.Value + " " + turn.Suit + " "); + + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Dealer plays river card"); + Card river = deck.Deal(); + Console.WriteLine("Cards on table: "); + foreach (Card card in flop) + { + Console.Write(card.Value + " " + card.Suit + " "); + } + + Console.Write(turn.Value + " " + turn.Suit + " "); + Console.Write(river.Value + " " + river.Suit + " "); + Console.WriteLine(); + Console.WriteLine(); + + } + + + public int GetCardValue(Card card){ + + if (card.Value == "2") + { + return 2; + } else if (card.Value == "3") + { + return 3; + } else if (card.Value == "4") + { + return 4; + } else if (card.Value == "5") + { + return 5; + } else if (card.Value == "6") + { + return 6; + } else if (card.Value == "7") + { + return 7; + } else if (card.Value == "8") + { + return 8; + } else if (card.Value == "9") + { + return 9; + } else if (card.Value == "10") + { + return 10; + } else if (card.Value == "J") + { + return 11; + } else if (card.Value == "Q") + { + return 12; + } else if (card.Value == "K") + { + return 13; + } else if (card.Value == "A") + { + return 14; + } else + { + return 0; + } + + } + + public void CalculateWinner(){ + + + + + } + + + } + + + +} diff --git a/exercise.main/Program.cs b/exercise.main/Program.cs index 3751555..96c6ce8 100644 --- a/exercise.main/Program.cs +++ b/exercise.main/Program.cs @@ -1,2 +1,12 @@ -// See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); + +using exercise.main; + +PokerGame pokerGame = new PokerGame(); + +Console.WriteLine("Poker game"); +Console.WriteLine(); +pokerGame.startGame(); + + + + diff --git a/exercise.tests/CoreTests.cs b/exercise.tests/CoreTests.cs index 5adefb3..2f330f4 100644 --- a/exercise.tests/CoreTests.cs +++ b/exercise.tests/CoreTests.cs @@ -94,6 +94,28 @@ public void Scenario3() } + [Test] + public void testWinningThree(){ + + Extension extension = new Extension(); + + List> hand = new List> + { + new Tuple("4", "3", "1"), + new Tuple("6", "6", "6"), + new Tuple("7", "7", "7"), + new Tuple("3", "3", "3") + }; + + Tuple winner; + bool result = extension.winningThree(hand, out winner); + + Assert.That(result, Is.True); + + Assert.IsTrue(winner.Item1 == "7" && winner.Item2 == "7" && winner.Item3 == "7"); + + } + [TestCase("2",2)] [TestCase("3",3)] [TestCase("4",4)]