113 lines
4.8 KiB
Go
113 lines
4.8 KiB
Go
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...)
|
|
}
|