Texas Hold'em hand evaluator and simulation engine.
$ dotnet add package PokerAlgoSomething to note about these predictions is that they are independent of other players. They are only calculated based on what a given player knows, hence why the chances don't add to 100%. The reason I added predictions is so I could build an AI that would make decisions based on its probabilities of winning.
dotnet add package PokerAlgo
using PokerAlgo;
namespace PokerAlgoTest;
class Program
{
static void Main()
{
Deck deck = new();
List<Player> players = new() // at least 2 players
{
new Player("Player 1", deck.NextCard(), deck.NextCard()),
new Player("Player 2", deck.NextCard(), deck.NextCard()),
new Player("Player 3", deck.NextCard(), deck.NextCard()),
new Player("Player 4", deck.NextCard(), deck.NextCard()),
new Player("Player 5", deck.NextCard(), deck.NextCard()),
};
List<Card> community = deck.NextCards(5);
Console.WriteLine("Players:");
foreach (var player in players)
{
Console.WriteLine(player);
}
Console.WriteLine("\nCommunity Cards:");
foreach (Card item in community)
{
Console.Write(item + " ");
}
Console.WriteLine();
Player player1 = players[0];
HandEvaluator evaluator = new();
WinningHand winningHand = evaluator.GetWinningHand(player1.HoleCards, community);
Console.WriteLine("\nPlayer 1 WinningHand: \n" + winningHand);
Console.WriteLine("\nChances of Player 1 Winning:");
var chances = ChanceCalculator.GetWinningChanceSimParallel(player1.HoleCards, community, players.Count - 1, 10_000);
Console.WriteLine($"Win: {chances.winChance}\nTie: {chances.tieChance}");
List<Player> winners = Algo.GetWinners(players, community);
Console.WriteLine();
Console.WriteLine(winners.Count == 1 ? "Winner:" : "Tie:");
foreach (Player winner in winners)
{
Console.WriteLine(winner);
Console.WriteLine(winner.WinningHand);
Console.WriteLine(Helpers.GetPrettyHandName(winner.WinningHand));
Console.WriteLine();
}
}
}
This project is licensed under the MIT License.