客户端Unity3d,服务端Golang 欢迎同志撩我哈。
最近在做斗地主游戏,牵扯到自定义数组排序,
网上搜了一大圈,各种牛鬼蛇神的写法。
实现是实现了,但是用起来贼麻烦,
无奈,点根烟,然后查看sort源码,发现有个sort.Slice
所以求教网上的大神,还不如自己当大神
测试代码如下,首先声明一个卡牌结构体
//扑克结构体
type CardData struct {
Color int32 //花色0-3,黑红梅方
Value int32 //牌值0-13,A-K
Index int32 //牌的索引位置,因为发牌的牌库是 0-53,所以这个算是真实的牌,也可以叫牌索引吧
}
//传入 0-53的牌值
func NewCardData(index int32) *CardData {
var cardData CardData
cardData.Index = index
cardData.Color = index / 13
cardData.Value = index % 13
return &cardData
}
上述结构体,注释已经写很详细啦
然后将上述结构体slice排序,如下
func main() {
fmt.println("weixin:qs_16888")
var cards []cardData.CardData
card1 := cardData.NewCardData(12)
card2 := cardData.NewCardData(23)
card3 := cardData.NewCardData(45)
card4 := cardData.NewCardData(38)
cards = append(cards, *card1)
cards = append(cards, *card3)
cards = append(cards, *card2)
cards = append(cards, *card4)
fmt.println("weixin:qs_16888")
//按牌索引排序
sort.Slice(cards, func(i, j int) bool {
return cards[i].Index < cards[j].Index
})
fmt.Println(cards)
//按花色排序
sort.Slice(cards, func(i, j int) bool {
return cards[i].Color < cards[j].Color
})
fmt.Println(cards)
//按牌值排序
sort.Slice(cards, func(i, j int) bool {
return cards[i].Value < cards[j].Value
})
fmt.Println(cards)
}
//print result
[{0 12 12} {1 10 23} {2 12 38} {3 6 45}]
[{0 12 12} {1 10 23} {2 12 38} {3 6 45}]
[{3 6 45} {1 10 23} {0 12 12} {2 12 38}]
发牌的时候,将牌索引转换成具体的结构体,这样在后续的牌型计算和比较大小的时候,可以省掉很多for循环。
总结下来,做开发,还是需要一颗匠心的