打牌, 首先就应该从最基础的扑克牌类入手
单个牌来说 斗地主3最小,然后依次是 ... K, A, 2, 小王, 大王
// 花色
const (
flowerNILint = iota // 留空
flowerHEITAO// 黑桃(小王)
flowerHONGTAO// 红桃(大王)
flowerMEIHUA// 梅花
flowerFANGKUAI// 方块
)// 点数
const (
cardPointNIL int = iota // 留空
cardPoint3
cardPoint4
cardPoint5
cardPoint6
cardPoint7
cardPoint8
cardPoint9
cardPointT
cardPointJ
cardPointQ
cardPointK
cardPointA
cardPoint2
cardPointX // 小王
cardPointY // 大王
)
【golang制作一个斗地主游戏服务器[1]:从扑克牌开始】我们定义所有扑克牌的牌值是 1 - 54 正好对应54张牌, 这样每张牌都有自己的牌值,花色,点数
// TCard 扑克牌类
type TCard struct {
nValueint // 牌值
nFlower int // 花色
nPointint // 点数
}// NewCard 新建卡牌
func NewCard(nValue int) *TCard {
p := &TCard{}
p.nValue = https://www.it610.com/article/nValue
p.nFlower = toFlower(nValue)
p.nPoint = toCardValue(nValue)
return p
}// 从牌值获取花色
func toFlower(nValue int) int {
if nValue <= 0 || nValue> 54 {
return flowerNIL
} return ((nValue - 1) / 13) + 1
}// 从牌值获取点数
func toCardValue(nValue int) int {
if nValue <= 0 {
return cardPointNIL
}
if nValue =https://www.it610.com/article/= 53 {
return cardPointX // 小王
}
if nValue == 54 {
return cardPointY // 大王
}
return ((nValue - 1) % 13) + 1
}
最后, 为了调试方便,写一个快速转化字符串的函数
// 转换成字符串
func (self *TCard) tostr() string {
strResult := ""
// 花色
switch self.nFlower {
case flowerHEITAO:
{
strResult = "?"
}
case flowerHONGTAO:
{
strResult = "?"
}
case flowerMEIHUA:
{
strResult = "?"
}
case flowerFANGKUAI:
{
strResult = "?"
}
} // 点数
switch self.nPoint {
case cardPoint3:
{
strResult = strResult + "3"
}
case cardPoint4:
{
strResult = strResult + "4"
}
case cardPoint5:
{
strResult = strResult + "5"
}
case cardPoint6:
{
strResult = strResult + "6"
}
case cardPoint7:
{
strResult = strResult + "7"
}
case cardPoint8:
{
strResult = strResult + "8"
}
case cardPoint9:
{
strResult = strResult + "9"
}
case cardPointT:
{
strResult = strResult + "T"
}
case cardPointJ:
{
strResult = strResult + "J"
}
case cardPointQ:
{
strResult = strResult + "Q"
}
case cardPointK:
{
strResult = strResult + "K"
}
case cardPointA:
{
strResult = strResult + "A"
}
case cardPoint2:
{
strResult = strResult + "2"
}
case cardPointX:
{
strResult = "小王"
}
case cardPointY:
{
strResult = "大王"
}
} return strResult
}
推荐阅读
- Go|Docker后端部署详解(Go+Nginx)
- GO|GO,GO,GO!
- Go成长之路|go中判断空字符串、nil和len(t)的用法
- go编译tools
- go grpc安装与使用
- goroutine 调度原理
- Go|Go进阶之路——复杂类型
- Go进阶之路——变量
- Go进阶之路——流程控制语句