game_sync/common/poker.go

124 lines
2.5 KiB
Go

package common
import (
"fmt"
"strings"
)
//牌序- K, Q, J,10, 9, 8, 7, 6, 5, 4, 3, 2, A
// 52 53
//黑桃-51,50,49,48,47,46,45,44,43,42,41,40,39
//红桃-38,37,36,35,34,33,32,31,30,29,28,27,26
//梅花-25,24,23,22,21,20,19,18,17,16,15,14,13
//方片-12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
// cards 将癞子牌转点数牌时使用
var cards = [][]int32{
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},
{13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25},
{26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38},
{39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51},
{52, 53},
}
// GetPoint 获取牌点数
func GetPoint(val int32) int32 {
switch {
case val == 52:
return 16
case val == 53:
return 17
default:
return val%13 + 1
}
}
// PointValue: 13 12 11 10 9 8 7 6 5 4 3 2 1
// LogicValue: 13 12 11 10 9 8 7 6 5 4 3 15 14
var pointLogic = [18]int32{
1: 14, 2: 15,
3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13,
14: 1, 15: 2,
16: 16, 17: 17,
}
// GetLogic 获取逻辑值
func GetLogic(val int32) int32 {
return pointLogic[GetPoint(val)]
}
// PointToLogic 根据点数获取逻辑值
func PointToLogic(point int32) int32 {
return pointLogic[point]
}
// LogicToPoint 根据逻辑值获取点数
func LogicToPoint(logic int32) int32 {
return pointLogic[logic]
}
// GetColor 获取花色
func GetColor(val int32) int32 {
switch {
case val >= 0 && val <= 12:
return 0
case val >= 13 && val <= 25:
return 1
case val >= 26 && val <= 38:
return 2
case val >= 39 && val <= 51:
return 3
default:
return val
}
}
// CreatCard 根据点数和花色生成牌
func CreatCard(point int32, color int32, defaultColor int32) int32 {
if point == 16 {
return 52
}
if point == 17 {
return 53
}
if color < 0 || color > 3 {
color = defaultColor
}
if color < 0 || color > 3 {
color = 0
}
return cards[int(color)][point-1]
}
var color = [4]string{"♦", "♣", "♥", "♠"}
func String(val int32) string {
switch {
case val == -1:
return ""
case val == 52:
return "小王"
case val == 53:
return "大王"
default:
return fmt.Sprint(GetPoint(val), color[GetColor(val)])
}
}
func StringCards(cards []int32) string {
s := strings.Builder{}
for _, v := range cards {
s.WriteString(String(v))
s.WriteString(" ")
}
return s.String()
}
func StringCardsInt(cards []int) string {
s := strings.Builder{}
for _, v := range cards {
s.WriteString(String(int32(v)))
s.WriteString(" ")
}
return s.String()
}