From 682c2458929b459370a5bd318828c6f3e14bbebe Mon Sep 17 00:00:00 2001 From: 王家文 Date: Mon, 8 Apr 2024 11:28:36 +0800 Subject: [PATCH] feat:抽卡 封装抽卡逻辑 --- controllers/ht-cardholder.go | 2 +- service/ht-cardholder/handle.go | 40 ++++++++++++++++++++-------------------- util/uttype/slice.go | 12 ++++++++++++ 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/controllers/ht-cardholder.go b/controllers/ht-cardholder.go index ffa57d6..e3487bb 100644 --- a/controllers/ht-cardholder.go +++ b/controllers/ht-cardholder.go @@ -2,7 +2,7 @@ package controllers import ( "apigame/dto" - ht_cardholder "apigame/service/ht-cardholder" + "apigame/service/ht-cardholder" ) // HtCardHolderController 绑定控制器 diff --git a/service/ht-cardholder/handle.go b/service/ht-cardholder/handle.go index 4ed74fd..4c21db6 100644 --- a/service/ht-cardholder/handle.go +++ b/service/ht-cardholder/handle.go @@ -4,7 +4,6 @@ import ( "apigame/dto" "apigame/service/constd" "apigame/util/uttype" - "fmt" "strconv" ) @@ -93,19 +92,20 @@ func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHol // 开始处理抽卡 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) + //logs.Debug("wjwdbg🐸 用户序列组IDsequenceId", sequenceId) + //logs.Debug("wjwdbg🐸 用户分组IDcohort:", cohort) if confCardholder.IsNew != 0 { // 如果是新卡包 按顺序查找数目最少的一张卡抽取 cardId := GetNewCard(gameData) + //logs.Debug("wjwdbg🐸 抽取新卡ID:", cardId) // 增加卡牌 gameData.Details.Cards[cardId] += 1 rsp.NewCards = append(rsp.NewCards, cardId) } else { - // 正常抽卡 - // 先抽保底卡 - if confCardholder.GuaranteedStarCardId != "0" { - confCardSequence, hasCardSequence := FindCardSequenceConfig(confCardholder.GuaranteedStarCardId, sequenceId, cohort) + getCardFunc := func(cardConfigId string) { + confCardSequence, hasCardSequence := FindCardSequenceConfig(cardConfigId, sequenceId, cohort) if hasCardSequence { - combineId := CombineIdSequenceIdCohort(confCardholder.GuaranteedStarCardId, sequenceId, cohort) + combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) scale := gameData.Details.CardSequenceScales[combineId] cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) cardIdInt := uttype.StringToInt(cardId) @@ -113,10 +113,16 @@ func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHol gameData.Details.CardSequenceScales[combineId] = scale + 1 // 增加卡牌 gameData.Details.Cards[cardIdInt] += 1 - fmt.Println("🐸🐸🐸保底卡ID", cardIdInt) + //logs.Debug("wjwdbg😊 抽取卡牌ID:", cardIdInt) rsp.NewCards = append(rsp.NewCards, cardIdInt) } } + // 正常抽卡 + // 先抽保底卡 + if confCardholder.GuaranteedStarCardId != "0" { + getCardFunc(confCardholder.GuaranteedStarCardId) + //logs.Debug("wjwdbg🐸 保底卡牌配置ID:", confCardholder.GuaranteedStarCardId) + } // 非保底卡 if confCardholder.NormalCardNumber > 0 { count := confCardholder.NormalCardNumber @@ -127,21 +133,11 @@ func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHol starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count) // 增加星级刻度 gameData.Details.StarSequenceScales[combineIdStar] = scaleStar + count + //logs.Debug("wjwdbg🐸 非保底卡星级ID:", confCardholder.MinimumGuaranteeCardId) + //logs.Debug("wjwdbg🐸 非保底卡星级抽取序列:", starIds) // 遍历星级刻度抽取n张卡牌 for _, id := range starIds { - combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) - scale := gameData.Details.CardSequenceScales[combineId] - confCardSequence, hasCardSequence := FindCardSequenceConfig(id, sequenceId, cohort) - if hasCardSequence { - cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) - cardIdInt := uttype.StringToInt(cardId) - // 增加刻度 - gameData.Details.CardSequenceScales[combineId] = scale + 1 - // 增加卡牌 - gameData.Details.Cards[cardIdInt] += 1 - rsp.NewCards = append(rsp.NewCards, cardIdInt) - fmt.Println("😊😊😊非保底卡ID", cardIdInt) - } + getCardFunc(id) } } } @@ -153,6 +149,10 @@ func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHol // 存档 SaveData(gameData) + //logs.Debug("wjwdbg🐸 获取卡牌列表:", rsp.NewCards) + uttype.Shuffle(rsp.NewCards) + //logs.Debug("wjwdbg🐸 获取卡牌列表打乱:", rsp.NewCards) + // 返回信息 rsp.HtCardHolderInfo = gameData.GetInfo() diff --git a/util/uttype/slice.go b/util/uttype/slice.go index 057c76d..4a5c585 100644 --- a/util/uttype/slice.go +++ b/util/uttype/slice.go @@ -1,5 +1,8 @@ package uttype +import "math/rand" + +// Min 最小值 func Min[T Number](values ...T) T { result := values[0] for _, v := range values[1:] { @@ -10,6 +13,7 @@ func Min[T Number](values ...T) T { return result } +// Max 最大值 func Max[T Number](values ...T) T { result := values[0] for _, v := range values[1:] { @@ -19,3 +23,11 @@ func Max[T Number](values ...T) T { } return result } + +// Shuffle 打乱 +func Shuffle[T any](list []T) { + for i := len(list) - 1; i > 0; i-- { + j := rand.Intn(i + 1) + list[i], list[j] = list[j], list[i] + } +} -- libgit2 0.21.0