Beispiel #1
0
        bool DispatchTableCard()
        {
            BumperCarInfo bumperCarInfo = (BumperCarInfo)_GameTable._TableInfo;

            int[] cbControlArea = new int[] { 1, 9, 17, 25, 3, 11, 19, 27, 5, 13, 21, 29, 7, 15, 23, 31, 2, 10, 18, 26, 4, 12, 20, 28, 6, 14, 22, 30, 8, 16, 24, 32 };
            int[] cbnChance     = new int[] { 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };

            BumperLogic.ChaosArray(cbControlArea, cbControlArea.Length, cbnChance, cbnChance.Length);

            //随机倍数
            int wTick = 0;// System.Environment.TickCount;

            //几率和值
            int nChanceAndValue = 0;

            for (int n = 0; n < cbnChance.Length; ++n)
            {
                nChanceAndValue += cbnChance[n];
            }

            int nMuIndex = 0;
            int nRandNum = 0;                                   //随机辅助

            nRandNum = (_random.Next() + wTick + nStFluc * 3) % nChanceAndValue;
            for (int j = 0; j < cbnChance.Length; j++)
            {
                nRandNum -= cbnChance[j];
                if (nRandNum < 0)
                {
                    nMuIndex = j;
                    break;
                }
            }
            nStFluc = nStFluc % 3 + 1;

            bumperCarInfo.m_cbTableCardArray[0, 0] = cbControlArea[nMuIndex];
            bumperCarInfo.m_cbCardCount[0]         = 1;

            //发牌标志
            bumperCarInfo.m_bContiueCard = false;

            return(true);
        }
Beispiel #2
0
        void   GetAllWinArea(int[] bcWinArea, int bcAreaCount, int InArea)
        {
            if (InArea == 0xFF)
            {
                return;
            }

            ZeroMemory(bcWinArea);

            int           lMaxSocre     = 0;
            BumperCarInfo bumperCarInfo = (BumperCarInfo)_GameTable._TableInfo;

            for (int i = 0; i < 32; i++)
            {
                int[] bcOutCadDataWin = new int[BumperCarDefine.AREA_COUNT];

                BumperLogic.GetCardType(i + 1, 1, bcOutCadDataWin);

                for (int j = 0; j < BumperCarDefine.AREA_COUNT; j++)
                {
                    if (bcOutCadDataWin[j] > 1 && j == InArea - 1)
                    {
                        int Score = 0;
                        for (int nAreaIndex = 1; nAreaIndex <= BumperCarDefine.AREA_COUNT; ++nAreaIndex)
                        {
                            if (bcOutCadDataWin[nAreaIndex - 1] > 1)
                            {
                                Score += bumperCarInfo.m_lAllJettonScore[nAreaIndex] * (bcOutCadDataWin[nAreaIndex - 1]);
                            }
                        }
                        if (Score >= lMaxSocre)
                        {
                            lMaxSocre = Score;
                            bcWinArea = bcOutCadDataWin;
                        }
                        break;
                    }
                }
            }
        }
Beispiel #3
0
        //试探性判断
        bool ProbeJudge()
        {
            BumperCarInfo bumperCarInfo = (BumperCarInfo)_GameTable._TableInfo;

            int[] bcResulteOut = new int[BumperCarDefine.AREA_COUNT];

            BumperLogic.GetCardType(bumperCarInfo.m_cbTableCardArray[0, 0], 1, bcResulteOut);

            //系统输赢
            int lSystemScore = 0;
            int nBuyerCount  = 0;

            //玩家下注
            int[,] pUserScore = bumperCarInfo.m_lUserJettonScore;

            //庄家是不是机器人
            bool bIsBankerAndroidUser = false;

            //if ( bumperCarInfo.m_wCurrentBanker != GameDefine.INVALID_CHAIR )
            //{
            //    UserInfo userInfo = _GameTable._TableInfo._Players[bumperCarInfo.m_wCurrentBanker];
            //    if (userInfo != null)
            //    {
            //        bIsBankerAndroidUser = pIBankerUserItem->IsAndroidUser();
            //    }
            //}

            //计算积分
            for (int wChairID = 0; wChairID < bumperCarInfo._Players.Count; wChairID++)
            {
                //庄家判断
                if (bumperCarInfo.m_wCurrentBanker == wChairID)
                {
                    continue;
                }

                //获取用户
                UserInfo userInfo = bumperCarInfo._Players[wChairID];

                if (userInfo == null)
                {
                    return(false);
                }

                // added by usc at 2014/03/17
                bool bBuyer = true;

                if (userInfo.Auto > 0 || userInfo.Kind != (int)UserKind.Buyer)
                {
                    bBuyer = false;
                }
                else
                {
                    nBuyerCount++;
                }

                for (int wAreaIndex = 1; wAreaIndex <= BumperCarDefine.AREA_COUNT; ++wAreaIndex)
                {
                    if (bcResulteOut[wAreaIndex - 1] > 0)
                    {
                        if (!bBuyer)
                        {
                            lSystemScore += (pUserScore[wAreaIndex, wChairID] * (bcResulteOut[wAreaIndex - 1]));
                        }

                        if (bumperCarInfo.m_wCurrentBanker == GameDefine.INVALID_CHAIR || bIsBankerAndroidUser)
                        {
                            lSystemScore -= (pUserScore[wAreaIndex, wChairID] * (bcResulteOut[wAreaIndex - 1]));
                        }
                    }
                    else if (bcResulteOut[wAreaIndex - 1] == 0)
                    {
                        if (!bBuyer)
                        {
                            lSystemScore -= pUserScore[wAreaIndex, wChairID];
                        }

                        if (bumperCarInfo.m_wCurrentBanker == GameDefine.INVALID_CHAIR || bIsBankerAndroidUser)
                        {
                            lSystemScore += pUserScore[wAreaIndex, wChairID];
                        }
                    }
                }
            }

            // added by usc at 2014/03/21
            if (nBuyerCount == 0)
            {
                return(true);
            }

            //系统分值计算
            if (bumperCarInfo.m_StorageScore + lSystemScore < 0)
            {
                return(false);
            }
            else
            {
                if (bumperCarInfo.m_StorageScore == HorseDefine.FIRST_EVENT_SCORE)
                {
                    bumperCarInfo.m_StorageScore -= HorseDefine.FIRST_EVENT_SCORE;
                }

                bumperCarInfo.m_StorageScore += lSystemScore;
                bumperCarInfo.m_StorageScore -= (bumperCarInfo.m_StorageScore * bumperCarInfo.m_StorageDeduct / 1000);
                return(true);
            }
        }
Beispiel #4
0
        int CalculateScore()
        {
            BumperCarInfo bumperCarInfo = (BumperCarInfo)_GameTable._TableInfo;

            //变量定义

            //推断玩家
            int TianMultiple, diMultiple, TianXuanltiple, HuangMultiple;

            TianMultiple   = 1;
            diMultiple     = 1;
            TianXuanltiple = 1;
            HuangMultiple  = 1;

            int[] bcResulteOut = new int[BumperCarDefine.AREA_COUNT];

            BumperLogic.GetCardType(bumperCarInfo.m_cbTableCardArray[0, 0], 1, bcResulteOut);

            //游戏记录
            //tagServerGameRecord &GameRecord = m_GameRecordArrary[bumperCarInfo.m_nRecordLast];

            int[] cbMultiple = new int[BumperCarDefine.AREA_COUNT];

            for (int i = 0; i < cbMultiple.Length; i++)
            {
                cbMultiple[i] = 1;
            }

            //for (int wAreaIndex = 1; wAreaIndex <= BumperCarDefine.AREA_COUNT; ++wAreaIndex)
            //{

            //    if(bcResulteOut[wAreaIndex-1]>0)
            //    {
            //        GameRecord.bWinMen[wAreaIndex-1] = 4;
            //    }
            //    else
            //    {
            //        GameRecord.bWinMen[wAreaIndex-1] = 0;
            //    }
            //}

            //移动下标
            //bumperCarInfo.m_nRecordLast = (bumperCarInfo.m_nRecordLast+1) % MAX_SCORE_HISTORY;
            //if ( bumperCarInfo.m_nRecordLast == bumperCarInfo.m_nRecordFirst ) bumperCarInfo.m_nRecordFirst = (bumperCarInfo.m_nRecordFirst+1) % MAX_SCORE_HISTORY;

            //庄家总量
            int lBankerWinScore = 0;

            //玩家成绩
            ZeroMemory(bumperCarInfo.m_lUserWinScore);
            ZeroMemory(bumperCarInfo.m_lUserReturnScore);
            ZeroMemory(bumperCarInfo.m_lUserRevenue);

            int[] lUserLostScore = new int[BumperCarDefine.GAME_PLAYER];

            //玩家下注
            int[,] pUserScore = bumperCarInfo.m_lUserJettonScore;

            //计算积分
            for (int wChairID = 0; wChairID < _GameTable._TableInfo._Players.Count; wChairID++)
            {
                //庄家判断
                if (bumperCarInfo.m_wCurrentBanker == wChairID)
                {
                    continue;
                }

                //获取用户
                UserInfo userInfo = _GameTable._TableInfo._Players[wChairID];

                for (int wAreaIndex = 1; wAreaIndex <= BumperCarDefine.AREA_COUNT; ++wAreaIndex)
                {
                    if (bcResulteOut[wAreaIndex - 1] > 0)
                    {
                        bumperCarInfo.m_lUserWinScore[wChairID]    += (pUserScore[wAreaIndex, wChairID] * (bcResulteOut[wAreaIndex - 1]));
                        bumperCarInfo.m_lUserReturnScore[wChairID] += pUserScore[wAreaIndex, wChairID];
                        lBankerWinScore -= (pUserScore[wAreaIndex, wChairID] * (bcResulteOut[wAreaIndex - 1]));
                    }
                    else
                    {
                        if (bcResulteOut[wAreaIndex - 1] == 0)
                        {
                            lUserLostScore[wChairID] -= pUserScore[wAreaIndex, wChairID];
                            lBankerWinScore          += pUserScore[wAreaIndex, wChairID];
                        }
                        else
                        {
                            //如果为1则不少分
                            bumperCarInfo.m_lUserWinScore[wChairID]    += 0;
                            bumperCarInfo.m_lUserReturnScore[wChairID] += pUserScore[wAreaIndex, wChairID];
                        }
                    }
                }

                //计算税收
                if (0 < bumperCarInfo.m_lUserWinScore[wChairID])
                {
                    float fRevenuePer = (float)cbRevenue / 1000;
                    bumperCarInfo.m_lUserRevenue[wChairID]   = (int)(bumperCarInfo.m_lUserWinScore[wChairID] * fRevenuePer);
                    bumperCarInfo.m_lUserWinScore[wChairID] -= bumperCarInfo.m_lUserRevenue[wChairID];
                }

                //总的分数
                bumperCarInfo.m_lUserWinScore[wChairID] += lUserLostScore[wChairID];
            }

            //庄家成绩
            if (bumperCarInfo.m_wCurrentBanker != GameDefine.INVALID_CHAIR)
            {
                bumperCarInfo.m_lUserWinScore[bumperCarInfo.m_wCurrentBanker] = lBankerWinScore;

                //计算税收
                if (0 < bumperCarInfo.m_lUserWinScore[bumperCarInfo.m_wCurrentBanker])
                {
                    float fRevenuePer = (float)cbRevenue / 1000;
                    bumperCarInfo.m_lUserRevenue[bumperCarInfo.m_wCurrentBanker]   = (int)(bumperCarInfo.m_lUserWinScore[bumperCarInfo.m_wCurrentBanker] * fRevenuePer);
                    bumperCarInfo.m_lUserWinScore[bumperCarInfo.m_wCurrentBanker] -= bumperCarInfo.m_lUserRevenue[bumperCarInfo.m_wCurrentBanker];
                    lBankerWinScore = bumperCarInfo.m_lUserWinScore[bumperCarInfo.m_wCurrentBanker];
                }
            }

            //累计积分
            bumperCarInfo.m_lBankerWinScore += lBankerWinScore;

            //当前积分
            bumperCarInfo.m_lBankerCurGameScore = lBankerWinScore;

            return(lBankerWinScore);
        }
Beispiel #5
0
        //最大下注
        int GetUserMaxJetton(UserInfo userInfo, int Area)
        {
            int           wChairID      = _GameTable.GetPlayerIndex(userInfo);
            BumperCarInfo bumperCarInfo = (BumperCarInfo)_GameTable._TableInfo;

            //已下注额
            int lNowJetton = 0;

            //ASSERT(BumperCarDefine.AREA_COUNT<=CountArray(bumperCarInfo.m_lUserJettonScore));
            for (int nAreaIndex = 1; nAreaIndex <= BumperCarDefine.AREA_COUNT; ++nAreaIndex)
            {
                lNowJetton += bumperCarInfo.m_lUserJettonScore[nAreaIndex, wChairID];
            }

            //庄家金币
            int lBankerScore = 0x7fffffff;

            if (bumperCarInfo.m_wCurrentBanker != GameDefine.INVALID_CHAIR)
            {
                userInfo = _GameTable._TableInfo._Players[bumperCarInfo.m_wCurrentBanker];

                if (null != userInfo)
                {
                    lBankerScore = userInfo.GetGameMoney();
                }
            }

            int[] bcWinArea = new int[BumperCarDefine.AREA_COUNT];
            int   LosScore  = 0;
            int   WinScore  = 0;

            GetAllWinArea(bcWinArea, BumperCarDefine.AREA_COUNT, Area);

            for (int nAreaIndex = 1; nAreaIndex <= BumperCarDefine.AREA_COUNT; ++nAreaIndex)
            {
                if (bcWinArea[nAreaIndex - 1] > 1)
                {
                    LosScore += bumperCarInfo.m_lAllJettonScore[nAreaIndex] * (bcWinArea[nAreaIndex - 1]);
                }
                else
                {
                    if (bcWinArea[nAreaIndex - 1] == 0)
                    {
                        WinScore += bumperCarInfo.m_lAllJettonScore[nAreaIndex];
                    }
                }
            }
            lBankerScore = lBankerScore + WinScore - LosScore;

            if (lBankerScore < 0)
            {
                if (bumperCarInfo.m_wCurrentBanker != GameDefine.INVALID_CHAIR)
                {
                    userInfo = _GameTable._TableInfo._Players[bumperCarInfo.m_wCurrentBanker];

                    if (null != userInfo)
                    {
                        lBankerScore = userInfo.GetGameMoney();
                    }
                }
                else
                {
                    lBankerScore = 0x7fffffff;
                }
            }

            //个人限制
            int lMeMaxScore = Math.Min((userInfo.GetGameMoney() - lNowJetton), bumperCarInfo.m_lUserLimitScore);

            //区域限制
            lMeMaxScore = Math.Min(lMeMaxScore, bumperCarInfo.m_lAreaLimitScore);

            int[] diMultiple = new int[BumperCarDefine.AREA_COUNT];

            for (int i = 0; i < 32; i++)
            {
                int[] bcOutCadDataWin = new int[BumperCarDefine.AREA_COUNT];
                BumperLogic.GetCardType(i + 1, 1, bcOutCadDataWin);

                for (int j = 0; j < BumperCarDefine.AREA_COUNT; j++)
                {
                    if (bcOutCadDataWin[j] > 1)
                    {
                        diMultiple[j] = bcOutCadDataWin[j];
                    }
                }
            }
            //庄家限制
            lMeMaxScore = Math.Min(lMeMaxScore, lBankerScore / (diMultiple[Area - 1]));

            //非零限制
            //ASSERT(lMeMaxScore >= 0);
            lMeMaxScore = Math.Max(lMeMaxScore, 0);

            return((int)(lMeMaxScore));
        }