public kindsOfCombination validCards() { if (Chosen.Count == 0) { return(null); } if (Chosen.Count == 1) //single card { return(new kindsOfCombination(Kind.Single, 0, (int)Chosen[0].rank)); } Chosen.Sort(); if (Chosen.Count == 2) { if (Chosen[0].rank == (Rank)16 && Chosen[1].rank == (Rank)17) { return(new kindsOfCombination(Kind.Bomb, 0, (int)Chosen[0].rank)); //a kind } if (Chosen[0].rank == Chosen[1].rank) { return(new kindsOfCombination(Kind.Pair, 0, (int)Chosen[0].rank)); //pair } return(null); } if (Chosen.Count == 3) { if (Chosen[0].rank == Chosen[1].rank && Chosen[0].rank == Chosen[2].rank) { return(new kindsOfCombination(Kind.Three, 0, (int)Chosen[0].rank)); //3 a kind } return(null); } if (Chosen.Count == 4) { if (Chosen[0].rank == Chosen[1].rank && Chosen[0].rank == Chosen[2].rank && Chosen[0].rank == Chosen[3].rank) { return(new kindsOfCombination(Kind.Bomb, 0, (int)Chosen[0].rank)); //a kind } if (Chosen[0].rank == Chosen[1].rank && Chosen[0].rank == Chosen[2].rank) { return(new kindsOfCombination(Kind.Three, 1, (int)Chosen[0].rank)); //3 a kind } if (Chosen[1].rank == Chosen[2].rank && Chosen[1].rank == Chosen[3].rank) { return(new kindsOfCombination(Kind.Three, 1, (int)Chosen[1].rank)); //3 a kind } return(null); } if (Chosen.Count == 5) { if (Chosen[0].rank == Chosen[1].rank && Chosen[0].rank == Chosen[2].rank && Chosen[3].rank == Chosen[4].rank) { return(new kindsOfCombination(Kind.Three, 2, (int)Chosen[0].rank)); //full house } if (Chosen[0].rank == Chosen[1].rank && Chosen[2].rank == Chosen[3].rank && Chosen[2].rank == Chosen[4].rank) { return(new kindsOfCombination(Kind.Three, 2, (int)Chosen[2].rank)); //full house } } if (Chosen.Count >= 6 && Chosen.Count % 2 == 0) { bool straightPair = true; if (Chosen[0].rank != Chosen[1].rank) { straightPair = false; } for (int i = 2; i < Chosen.Count % 2; i += 2) { if (Chosen[i].rank != (Chosen[i - 1].rank + 1) || Chosen[i].rank != Chosen[i + 1].rank) { straightPair = false; break; } } if (straightPair && Chosen[Chosen.Count - 1].rank <= (Rank)14) { return(new kindsOfCombination(Kind.StraightPair, Chosen.Count % 2, (int)Chosen[0].rank)); //StraightPair } } bool straight = true; for (int i = 1; i < Chosen.Count; i++) { if (Chosen[i].rank != Chosen[i - 1].rank + 1) { straight = false; break; } } if (straight && Chosen[Chosen.Count - 1].rank <= (Rank)14) { return(new kindsOfCombination(Kind.Straight, Chosen.Count, (int)Chosen[0].rank)); //Straight } return(null); }