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); }
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; } } } }
//试探性判断 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); } }
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); }
//最大下注 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)); }