public void SetVictoryDefeatVSResult(GuessBet obj, Guess guess) { if (obj.LeftScore > obj.RightScore) { string victoryName = ""; if (obj.GuessVSDetail.LeftName.Length > 5)//保留5个汉字 { victoryName = obj.GuessVSDetail.LeftName.Substring(0, 5) + "..." + " 胜"; } else { victoryName = obj.GuessVSDetail.LeftName + " 胜"; } obj.VSResult = victoryName; } else { string victoryName = ""; if (obj.GuessVSDetail.RightName.Length > 5)//保留5个汉字 { victoryName = obj.GuessVSDetail.RightName.Substring(0, 5) + "..." + " 胜"; } else { victoryName = obj.GuessVSDetail.RightName + " 胜"; } obj.VSResult = victoryName; } }
public void SetBingoResult(GuessBet guessBet, Guess guess) { if (guess.State != GuessDic.AlreadySettlement)//未结算 { guessBet.BingoResult = "等待结算"; guessBet.BingoResultState = GuessDic.WaitSettlement; } if (guess.State == GuessDic.AlreadySettlement) //已结算 { if (guessBet.BetType == GuessDic.VictoryDefeat) //胜负竞猜 { SetVictoryDefeatBingoResult(guessBet, guess); } else if (guessBet.BetType == GuessDic.Score)//比分竞猜 { SetScoreBingoResult(guessBet, guess); } else if (guessBet.BetType == GuessDic.DeclarerVictoryDefeat)//胜负坐庄 { int victoryDefeatBackYueDou = GetBackYueDouToDeclarer(guess.Id, GuessDic.DeclarerVictoryDefeat); int victoryDefeatDeposit = Convert.ToInt32(guess.VictoryDefeatDeclarerDeposit); SetDeclarerBingoResult(guessBet, victoryDefeatDeposit, victoryDefeatBackYueDou); } else if (guessBet.BetType == GuessDic.DeclarerScore)//比分坐庄 { int scoreBackYueDou = GetBackYueDouToDeclarer(guess.Id, GuessDic.DeclarerScore); int scoreDeposit = Convert.ToInt32(guess.ScoreDeclarerDeposit); SetDeclarerBingoResult(guessBet, scoreDeposit, scoreBackYueDou); } } }
/// <summary> /// 检查在投注池中还能不能投注 /// 如果投注的悦豆数 超过了最大可投注数, 这样会破坏投注池平衡, /// 导致猜错方的悦豆数无法抵扣猜对方,故用此方法来限制 /// </summary> /// <returns></returns> public string CheckCanBetInPool(Guess guess, GuessBet guessBet) { int maxValue = 0; string errorMsg = ""; maxValue = GetBetCanMaxAmount(guess, guessBet); var difference = maxValue - guessBet.Amount; if (difference >= 0) { errorMsg = ""; } else //超过了最大可投注悦豆数 { //将最后一位处理成0,这样就是10的倍数了 string maxValueStr = ""; if (maxValue < 10) { maxValueStr = "0"; } else { maxValueStr = maxValue.ToString(); maxValueStr = maxValueStr.Substring(0, maxValueStr.Length - 1) + "0";//把最后一位变为0 } errorMsg = "当前可以投注的最大数量为:[ " + maxValueStr + " ] ,请稍后再投注"; } return(errorMsg); }
/// <summary> /// 保存庄家的投注 /// </summary> /// <param name="amount">庄家的投注总悦豆</param> /// <param name="guess"></param> /// <returns></returns> private void SaveDeclarerBet(string betType, int amount, Guess guess) { Response rsp = ResultHelper.CreateResponse(); //扣除庄家的悦豆 rsp = GuessHelper.Instance.AddOrSubYueDou(-amount, guess.CreatorId); SystemHelper.CheckResponseIfError(rsp); // 插入庄家的投注记录 GuessBet obj = new GuessBet(); List <EntityBase> entites = new List <EntityBase>(); entites.Add(obj); obj.RowState = RowState.Added; obj.Amount = amount; obj.GuessId = guess.Id; obj.UserId = guess.CreatorId; obj.BetType = betType; obj.TrySetNewEntity(); rsp = DbContext.GetInstance().Execute(CommandHelper.CreateSave(entites)); SystemHelper.CheckResponseIfError(rsp); //插入悦豆消费账单 var yueDouFlow = new YueDouFlow(); yueDouFlow.Amount = -amount; yueDouFlow.UserId = guess.CreatorId; yueDouFlow.FlowType = GuessDic.GuessCost; yueDouFlow.GuessId = guess.Id; rsp = GuessHelper.Instance.AddYueDouFlow(yueDouFlow); SystemHelper.CheckResponseIfError(rsp); }
/// <summary> /// 设置胜负竞猜猜中的结果 /// </summary> /// <param name="guessBet"></param> /// <param name="guess"></param> public void SetVictoryDefeatBingoResult(GuessBet guessBet, Guess guess) { GuessHelper.Instance.SetVictoryIdAndOdds(guess, guessBet.GuessVSDetail); if (guessBet.BetVSId == guess.VictoryId) //猜中了 { decimal earnYueDou = guessBet.Amount * (guessBet.BetOdds - 1); //算出赚的悦豆 guessBet.BingoResult = "猜中 +" + earnYueDou + "悦豆"; guessBet.BingoResultState = GuessDic.Bingo; } else { guessBet.BingoResult = "未猜中"; } }
/// <summary> /// 设置比分竞猜猜中的结果 /// </summary> /// <param name="guessBet"></param> /// <param name="guess"></param> public void SetScoreBingoResult(GuessBet guessBet, Guess guess) { GuessHelper.Instance.SetBingoScoreAndOdds(guess, guessBet.GuessVSDetail); if (guessBet.LeftScore == guess.BingoLeftScore && guessBet.RightScore == guess.BingoRightScore) { decimal earnYueDou = guessBet.Amount * (guessBet.BetOdds - 1);//算出赚的悦豆 guessBet.BingoResult = "猜中 +" + earnYueDou + "悦豆"; guessBet.BingoResultState = GuessDic.Bingo; } else { guessBet.BingoResult = "未猜中"; } }
public void SetDeclarerBingoResult(GuessBet guessBet, int originYueDou, int backYueDou) { var differenceValue = originYueDou - backYueDou; if (differenceValue == 0)//不赚不亏 { guessBet.BingoResult = "0"; } else if (differenceValue > 0)//亏了 { guessBet.BingoResult = "-" + differenceValue + "悦豆"; } else if (differenceValue < 0)//赚了 { guessBet.BingoResult = "+" + (-differenceValue) + "悦豆"; } }
/// <summary> /// 设置对阵结果 /// </summary> /// <param name="obj"></param> /// <param name="guess"></param> public void SetVSResult(GuessBet obj, Guess guess) { if (obj.GuessVSDetail.State == GameLoopState.FINISH.Id) { if (obj.BetType == GuessDic.VictoryDefeat)//胜负竞猜 { SetVictoryDefeatVSResult(obj, guess); } else if (obj.BetType == GuessDic.Score)//比分竞猜 { obj.VSResult = string.Format("全场比分 {0}:{1}" , obj.GuessVSDetail.LeftScore, obj.GuessVSDetail.RightScore); } else if (obj.BetType == GuessDic.DeclarerVictoryDefeat)//胜负竞猜坐庄 { obj.VSResult = "胜负坐庄"; } else if (obj.BetType == GuessDic.DeclarerScore)//比分竞猜坐庄 { obj.VSResult = "比分坐庄"; } } else //进行中 { if (obj.BetType == GuessDic.DeclarerVictoryDefeat)//胜负竞猜坐庄 { obj.VSResult = "进行中(胜负坐庄)"; } else if (obj.BetType == GuessDic.DeclarerScore)//比分竞猜坐庄 { obj.VSResult = "进行中(比分坐庄)"; } else { obj.VSResult = "进行中"; } } }
/// <summary> /// 设置用户这条投注记录 对应的赔率 /// </summary> public void SetOdds(GuessBet obj, Guess guess) { if (obj.BetType == GuessDic.VictoryDefeat) //胜负竞猜 { if (obj.BetVSId == guess.VSLeftId) //如果相等, 说明我投的是左边 { obj.BetOdds = guess.VSLeftOdds; } else { obj.BetOdds = guess.VsRightOdds; } } else if (obj.BetType == GuessDic.Score)//比分竞猜 { //获取投注的这个比分对应的赔率 var guessScore = GuessHelper.Instance.GetGuessScore(guess.Id, obj.LeftScore , obj.RightScore); if (guessScore != null) { obj.BetOdds = guessScore.Odds; } } }
/// <summary> /// 获取可以投注的最大悦豆数 /// </summary> /// <returns></returns> public int GetBetCanMaxAmount(Guess guess, GuessBet guessBet) { int bingoTotalYuedou = 0; //猜对方总已投 int notBingoYuedou = 0; //猜错方悦豆总数 decimal bingoOdds = 0; //猜对方的赔率 if (guessBet.BetType == GuessDic.VictoryDefeat) //胜负投注 { //猜对方悦豆总数, 这是用户投注的一方 (默认用户投注的一方都是猜对) bingoTotalYuedou = GuessHelper.Instance .GetVictoryOrDefeatTotalYueDou(guess.Id, guessBet.BetVSId); //取出对阵失败方的Id var defeatVSId = ""; if (guess.GuessVSDetail.LeftId == guessBet.BetVSId) { defeatVSId = guess.GuessVSDetail.RightId; } else { defeatVSId = guess.GuessVSDetail.LeftId; } //猜错方悦豆总数 notBingoYuedou = GuessHelper.Instance .GetVictoryOrDefeatTotalYueDou(guess.Id, defeatVSId); //猜对方赔率 if (guess.GuessVSDetail.LeftId == guessBet.BetVSId) { bingoOdds = guess.VSLeftOdds; } else { bingoOdds = guess.VsRightOdds; } } else if (guessBet.BetType == GuessDic.Score)//比分投注 { //默认用户投注的比分是猜对的比分 guess.BingoLeftScore = guessBet.LeftScore; guess.BingoRightScore = guessBet.RightScore; //猜对方悦豆总数 bingoTotalYuedou = GuessHelper.Instance .GetBingoScoreTotalYueDou(guess); //猜错方悦豆总数 notBingoYuedou = GuessHelper.Instance .GetNotBingoScoreTotalYueDou(guess); //猜对方赔率 var guessScore = GuessHelper.Instance.GetGuessScore(guess.Id, guess.BingoLeftScore, guess.BingoRightScore); bingoOdds = guessScore.Odds; } //公式: 可以投的最大悦豆数 =( (猜错方总已投 + 庄家)/ (猜对方赔率-1) ) - 猜对方总已投 注意: 默认用户投的一方都是猜对方 var notBingoToatal = notBingoYuedou + guess.VictoryDefeatDeclarerDeposit; var canBetMaxYueDou = (notBingoToatal / (bingoOdds - 1)) - bingoTotalYuedou; //如果算出来小于零 ,说明不能投, 就设置为0 if (canBetMaxYueDou < 0) { canBetMaxYueDou = 0; } return(Convert.ToInt32(canBetMaxYueDou)); }