客户端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循环。
总结下来,做开发,还是需要一颗匠心的