samba/server/truco/poker/sortPoker.go

83 lines
1.8 KiB
Go
Raw Normal View History

2025-06-04 09:51:39 +08:00
package poker
import "sort"
type IPlayPoker interface {
// Cmp (p1<p2):CppSmall (p1==p2):CppEqual (p1>p2):CppBig
Cmp(p1, p2 *Poker) CmpPokerPoint
}
// SortPokerAsc 升序排列
func SortPokerAsc(pp IPlayPoker, handlePokers []*Poker, handlePokers1 ...*Poker) (newPokers []*Poker) {
for _, pk := range handlePokers {
newPokers = append(newPokers, pk)
}
for _, pk := range handlePokers1 {
newPokers = append(newPokers, pk)
}
sort.Slice(newPokers, func(i, j int) bool {
return pp.Cmp(newPokers[i], newPokers[j]) == CppSmall
})
return
}
//func SortPokerDesc(pp IPlayPoker, handlePokers []*Poker, handlePokers1 ...*Poker) (newPokers []*Poker) {
// for _, pk := range handlePokers {
// newPokers = append(newPokers, pk)
// }
// for _, pk := range handlePokers1 {
// newPokers = append(newPokers, pk)
// }
// sort.Slice(newPokers, func(i, j int) bool {
// return pp.Cmp(newPokers[i], newPokers[j]) == CppBig
// })
// return
//}
func FindMaxPoker(pp IPlayPoker, handlePokers []*Poker) (pk *Poker, pos int) {
if len(handlePokers) == 0 {
return
}
pk = handlePokers[0]
for pos1, pk1 := range handlePokers {
if pp.Cmp(pk, pk1) == CppSmall {
pk = pk1
pos = pos1
}
}
return
}
func FindMinPoker(pp IPlayPoker, handlePokers []*Poker) (pk *Poker, pos int) {
if len(handlePokers) == 0 {
return
}
pk = handlePokers[0]
for pos1, pk1 := range handlePokers {
if pp.Cmp(pk, pk1) == CppBig {
pk = pk1
pos = pos1
}
}
return
}
func FindBiggerPoker(pp IPlayPoker, handlePokers []*Poker, deskPokers ...*Poker) (pk *Poker, pos int) {
if len(handlePokers) == 0 {
return
}
if len(deskPokers) == 0 {
return FindMinPoker(pp, handlePokers)
}
deskPk, _ := FindMaxPoker(pp, deskPokers)
newPokers := SortPokerAsc(pp, handlePokers)
for pos1, pk1 := range newPokers {
if pp.Cmp(pk1, deskPk) == CppBig {
pk = pk1
pos = pos1
return
}
}
return
}