samba/server/cacheta/poker/sortPoker_test.go

113 lines
4.8 KiB
Go
Raw Normal View History

2025-06-04 09:51:39 +08:00
package poker
import (
"fmt"
"testing"
)
// 从手牌中找到一个顺子
func testFindAGroupStraight(t *testing.T, wildPoker *Poker, pks ...*Poker) {
wildPks, normalPokers := divideWildPokers(wildPoker, pks)
group, highPokers, wildPokers := findAStraightGroup(wildPks, normalPokers)
str := "组合:\n"
if group != nil {
str = fmt.Sprintf("组合:%s\n", PokersToString(group.Pokers))
}
str += "散牌:"
str += PokersToString(highPokers)
str += fmt.Sprintf("剩余万能牌:%s\n", PokersToString(wildPokers))
t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str))
}
func Test_FindAGroupStraight(t *testing.T) {
var pks []*Poker
var wildPoker *Poker
// (♥A ♥2 ♥3) (♥3 ♣3 ◆3) 万能牌:◆K
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point3, Ext1),
NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Club, Point3, Ext1), NewPokerEx(Diamond, Point3, Ext1)}
wildPoker = NewPokerEx(Diamond, PointK, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
// 手牌 ♥A ♥A ♥2 ♥4 ♥3 万能牌:◆K
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point4, Ext1),
NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, PointK, Ext1)}
wildPoker = NewPokerEx(Diamond, PointK, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
// 手牌:♥A ♥A ♥Q ♥K 万能牌:◆J
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointQ, Ext1), NewPokerEx(Heart, PointK, Ext1)}
wildPoker = NewPokerEx(Diamond, PointJ, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
// 手牌:♥A ♥3 ♥4 ♣J 万能牌:◆J
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Club, PointJ, Ext1)}
wildPoker = NewPokerEx(Diamond, PointJ, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
// 手牌:♥A ♥3 ♥4 ♥J 万能牌:◆J
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, PointJ, Ext1)}
wildPoker = NewPokerEx(Diamond, PointJ, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
// 手牌:♥K ♥3 ♥4 ♥J 万能牌:◆J
pks = []*Poker{NewPokerEx(Heart, PointK, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, PointJ, Ext1)}
wildPoker = NewPokerEx(Diamond, PointJ, Ext1)
testFindAGroupStraight(t, wildPoker, pks...)
}
// 从手牌中找到三条
func testFindAKindGroup(t *testing.T, wildPoker *Poker, pks ...*Poker) {
wildPks, normalPokers := divideWildPokers(wildPoker, pks)
group, highPokers, wildPokers := findAKindGroup(wildPks, normalPokers)
str := "组合:\n"
if group != nil {
str = fmt.Sprintf("组合:%s\n", PokersToString(group.Pokers))
}
str += "散牌:"
str += PokersToString(highPokers)
str += fmt.Sprintf("剩余万能牌:%s\n", PokersToString(wildPokers))
t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str))
}
func Test_FindAKindGroup(t *testing.T) {
var pks []*Poker
var wildPoker *Poker
// 手牌:♥A ♥2 ♥3 ♥3 ♣3 ◆3 6张 万能牌:◆K
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point3, Ext1),
NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Club, Point3, Ext1), NewPokerEx(Diamond, Point3, Ext1)}
wildPoker = NewPokerEx(Diamond, PointK, Ext1)
testFindAKindGroup(t, wildPoker, pks...)
// 手牌:♥A ◆A ♥2 ♥4 ♥3 ♥K 6张 万能牌:◆K
pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Diamond, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point4, Ext1),
NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, PointK, Ext1), NewPokerEx(Diamond, PointK, Ext1)}
wildPoker = NewPokerEx(Diamond, PointK, Ext1)
testFindAKindGroup(t, wildPoker, pks...)
}
// 从手牌中找最佳组合
func testFindBestGroupsAndRemains(t *testing.T, wildPoker *Poker, pks ...*Poker) {
t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n", PokersToString(pks), len(pks), wildPoker.ToString()))
groups, highPokers := FindBestGroupsAndRemains(wildPoker, pks)
str := ""
for _, g := range groups {
str += fmt.Sprintf("组合:%s\n", PokersToString(g.Pokers))
}
str += "散牌:"
str += PokersToString(highPokers)
t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str))
}
func Test_FindBestGroupsAndRemains(t *testing.T) {
var pks []*Poker
//var wildPoker *Poker
var str string
str = "♠A ◆2 ♠J ♠5 ♣8 ♣K ♠10 ♣10 ♣10"
pks = StringToPokers(str)
testFindBestGroupsAndRemains(t, StringToPoker("♠10"), pks...)
}