From e5527062a681cc0083f40241b0f8e590f2bf3f93 Mon Sep 17 00:00:00 2001 From: oysteinbjo Date: Fri, 12 Jan 2024 10:26:03 +0100 Subject: [PATCH] =?UTF-8?q?=C3=98ystein=20Bj=C3=B8rkeng=20Haugen=20C#3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercise.main/Card.cs | 20 +++++++++ exercise.main/Core.cs | 56 +++++++++++++++++++++++--- exercise.main/Deck.cs | 34 ++++++++++++++++ exercise.main/Extension.cs | 60 ++++++++++++++++++++++++++- exercise.main/Player.cs | 37 +++++++++++++++++ exercise.main/PokerGame.cs | 58 +++++++++++++++++++++++++++ exercise.tests/ExtensionTests.cs | 69 ++++++++++++++++++++++++++++++++ 7 files changed, 326 insertions(+), 8 deletions(-) create mode 100644 exercise.main/Card.cs create mode 100644 exercise.main/Deck.cs create mode 100644 exercise.main/Player.cs create mode 100644 exercise.main/PokerGame.cs create mode 100644 exercise.tests/ExtensionTests.cs diff --git a/exercise.main/Card.cs b/exercise.main/Card.cs new file mode 100644 index 0000000..b0f8116 --- /dev/null +++ b/exercise.main/Card.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class Card + { + private string _suit; + private string _value; + public Card(string Suit, string Value ) { + _value = Value; + _suit = Suit; + } + public string Suit { get { return _suit; } set { _suit = value; } } + public string Value { get { return _value; } set { _value = value; } } + } +} diff --git a/exercise.main/Core.cs b/exercise.main/Core.cs index 7568220..459f925 100644 --- a/exercise.main/Core.cs +++ b/exercise.main/Core.cs @@ -15,18 +15,62 @@ 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); + result = iterateHands(hand); - + return result.Item1!=string.Empty ? true : false; + } - + public Tuple iterateHands(IEnumerable> hand) + { + Dictionary, int> pairs = new Dictionary, int>(); + foreach (var item in hand) + { + if (decidePair(item.Item1, item.Item2).Item1) + { + pairs.Add(item, decidePair(item.Item1, item.Item2).Item2); + } + } + if(pairs.Count == 0) { + return new Tuple(string.Empty, string.Empty); + } + return pairs.OrderByDescending(i => i.Value).First().Key; + + } - return result.Item1!=string.Empty ? true : false; + public Tuple decidePair(string card1, string card2) + { + int card1Value = GetValueOfCard(card1); + int card2Value = GetValueOfCard(card2); + + return Tuple.Create(card1Value == card2Value, card1Value + card2Value); } + public int GetValueOfCard(string card) { - return 0; + int value = 0; + try + { + value = Int32.Parse(card); + } + catch(FormatException) { + switch(card) + { + case "A": + value = 14; + break; + case "K": + value = 13; + break; + case "Q": + value = 12; + break; + case "J": + value = 11; + break; + } + } + return value; } } } diff --git a/exercise.main/Deck.cs b/exercise.main/Deck.cs new file mode 100644 index 0000000..c837b52 --- /dev/null +++ b/exercise.main/Deck.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class Deck + { + private List _cardList = new (); + public Deck() { } + + public void Shuffle() + { + for(int i = CardList.Count - 1; i >= 0; i--) + { + Random r = new Random(); + int j = r.Next(0, i); + Card temp = CardList[i]; + CardList[i] = CardList[j]; + CardList[j] = temp; + } + } + + public Card Deal() + { + return CardList[-1]; + } + + public List CardList { get { return _cardList; } set { _cardList = value; } } + + } +} diff --git a/exercise.main/Extension.cs b/exercise.main/Extension.cs index b33ba1f..caea36b 100644 --- a/exercise.main/Extension.cs +++ b/exercise.main/Extension.cs @@ -11,9 +11,65 @@ public class Extension //TODO: complete the following method, keeping the signature the same public bool winningThree(IEnumerable> hand, out Tuple result) { - result = new Tuple(string.Empty, string.Empty, string.Empty); + result = iterateHands(hand); + return result.Item1 != string.Empty ? true : false ; + } + + public Tuple iterateHands(IEnumerable> hand) + { + Dictionary, int> pairs = new Dictionary, int>(); + foreach (var item in hand) + { + if (decideThrees(item.Item1, item.Item2, item.Item3).Item1) + { + pairs.Add(item, decideThrees(item.Item1, item.Item2, item.Item3).Item2); + } + } + if (pairs.Count == 0) + { + return new Tuple(string.Empty, string.Empty, string.Empty); + } + return pairs.OrderByDescending(i => i.Value).First().Key; + + } + + public Tuple decideThrees(string card1, string card2, string card3) + { + int card1Value = GetValueOfCard(card1); + int card2Value = GetValueOfCard(card2); + int card3Value = GetValueOfCard(card3); + + return Tuple.Create(card1Value == card2Value && card2Value == card3Value, card1Value + card2Value + card3Value); + } - return false; + + + public int GetValueOfCard(string card) + { + int value = 0; + try + { + value = Int32.Parse(card); + } + catch (FormatException) + { + switch (card) + { + case "A": + value = 14; + break; + case "K": + value = 13; + break; + case "Q": + value = 12; + break; + case "J": + value = 11; + break; + } + } + return value; } } diff --git a/exercise.main/Player.cs b/exercise.main/Player.cs new file mode 100644 index 0000000..c2161bb --- /dev/null +++ b/exercise.main/Player.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class Player + { + private string _name; + private List _hand; + + public void addToHand(Card card) + { + Hand.Add(card); + } + + public void removeFromHand(Card card) + { + Hand.Remove(card); + } + + public void clearHand() + { + Hand.Clear(); + } + + public List showHands() + { + return Hand; + } + + public string Name { get { return _name; } set { _name = value; } } + public List Hand { get { return _hand; } set { _hand = value; } } + } +} diff --git a/exercise.main/PokerGame.cs b/exercise.main/PokerGame.cs new file mode 100644 index 0000000..fdad951 --- /dev/null +++ b/exercise.main/PokerGame.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace exercise.main +{ + public class PokerGame + { + private Player _player1; + private Player _player2; + + private Deck _deck = new Deck(); + private List _boardState = new List(); + private List _discardPile = new List(); + + public void addToBoardState(Card card) + { + BoardState.Add(card); + } + + public void initialDeal() + { + Player1.addToHand(Deck.Deal()); + Player2.addToHand(Deck.Deal()); + Player1.addToHand(Deck.Deal()); + Player2.addToHand(Deck.Deal()); + } + + public void flop() + { + DiscardPile.Add(Deck.Deal()); + BoardState.Add(Deck.Deal()); + BoardState.Add(Deck.Deal()); + BoardState.Add(Deck.Deal()); + } + + public void turn() + { + DiscardPile.Add(Deck.Deal()); + BoardState.Add(Deck.Deal()); + } + + public void river() + { + DiscardPile.Add(Deck.Deal()); + BoardState.Add(Deck.Deal()); + } + + public Player Player1 { get { return _player1; } set { _player1 = value; } } + public Player Player2 { get { return _player2; } set { _player2 = value; } } + public Deck Deck { get { return Deck; } set { Deck = value; } } + + public List BoardState { get { return BoardState; } set { BoardState = value; } } + public List DiscardPile { get { return _discardPile; } set { _discardPile = value; } } + } +} diff --git a/exercise.tests/ExtensionTests.cs b/exercise.tests/ExtensionTests.cs new file mode 100644 index 0000000..981ef40 --- /dev/null +++ b/exercise.tests/ExtensionTests.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using exercise.main; + + +namespace exercise.tests; + +public class ExtensionTests +{ + [Test] + public void Scenario1() + { + Extension extension = new Extension(); + + List> hand = new List> + { + new Tuple("K", "5", "7"), + new Tuple("3","7", "7") + }; + Tuple winner; + + bool result = extension.winningThree(hand, out winner); + + Assert.That(result, Is.False); + Assert.That(winner.Item1, Is.EqualTo(String.Empty)); + Assert.That(winner.Item2, Is.EqualTo(String.Empty)); + + } + [Test] + public void Scenario2() + { + Extension ext = new Extension(); + + List> hand = new List> + { + new Tuple("K", "K", "K"), + new Tuple("A","A", "A") + }; + Tuple winner; + bool result = ext.winningThree(hand, out winner); + + Assert.That(result, Is.True); + + Assert.IsTrue(winner.Item1 == "A" && winner.Item2 == "A" && winner.Item3 =="A"); + + } + [Test] + public void Scenario3() + { + Extension ext = new Extension(); + + List> hand = new List> + { + new Tuple("8", "8", "8"), + new Tuple("A","5", "A"), + new Tuple("A","A", "3"), + new Tuple("J","J", "J"), + }; + Tuple winner; + bool result = ext.winningThree(hand, out winner); + + Assert.That(result, Is.True); + + Assert.IsTrue(winner.Item1 == "J" && winner.Item2 == "J" && winner.Item3 == "J"); + + } +} + +