百人碰碰车(机器人+控制+真人下注显示)【源码】

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2017-6-13 11:34:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
#include "Stdafx.h"
#include "AndroidUserItemSink.h"
#include "math.h"

//////////////////////////////////////////////////////////////////////////

//时间标识
#define IDI_PLACE_JETTON1            103                                    //下注定时
#define IDI_PLACE_JETTON2            104                                    //下注定时
#define IDI_PLACE_JETTON3            105                                    //下注定时
#define IDI_PLACE_JETTON4            106                                    //下注定时
#define IDI_PLACE_JETTON5            107                                    //下注定时
#define IDI_CHECK_BANKER            108                                    //检查上庄
#define IDI_REQUEST_BANKER            101                                    //申请定时
#define IDI_GIVEUP_BANKER            102                                    //下庄定时
#define IDI_PLACE_JETTON            110                                    //下注定义 (预留110-160)

//////////////////////////////////////////////////////////////////////////

int CAndroidUserItemSink::m_stlApplyBanker = 0L;

//构造函数
CAndroidUserItemSink::CAndroidUserItemSink()
{
    //游戏变量
    m_lMaxChipBanker = 0;
    m_lMaxChipUser = 0;
    m_wCurrentBanker = 0;
    m_nChipTime = 0;
    m_nChipTimeCount = 0;
    m_cbTimeLeave = 0;
    ZeroMemory(m_lAreaChip, sizeof(m_lAreaChip));
    ZeroMemory(m_nChipLimit, sizeof(m_nChipLimit));

    //上庄变量
    m_bMeApplyBanker=false;
    m_nWaitBanker=0;
    m_nBankerCount=0;

    return;
}

//析构函数
CAndroidUserItemSink::~CAndroidUserItemSink()
{
}

//接口查询
void *  CAndroidUserItemSink:ueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
    QUERYINTERFACE(IAndroidUserItemSink,Guid,dwQueryVer);
    QUERYINTERFACE_IUNKNOWNEX(IAndroidUserItemSink,Guid,dwQueryVer);
    return NULL;
}

//初始接口
bool  CAndroidUserItemSink::Initialization(IUnknownEx * pIUnknownEx)
{
    //查询接口
    m_pIAndroidUserItem=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IAndroidUserItem);
    if (m_pIAndroidUserItem==NULL) return false;

    return true;
}

//重置接口
bool  CAndroidUserItemSink::RepositionSink()
{
    //游戏变量
    m_lMaxChipBanker = 0;
    m_lMaxChipUser = 0;
    m_wCurrentBanker = 0;
    m_nChipTime = 0;
    m_nChipTimeCount = 0;
    m_cbTimeLeave = 0;
    ZeroMemory(m_lAreaChip, sizeof(m_lAreaChip));
    ZeroMemory(m_nChipLimit, sizeof(m_nChipLimit));

    //上庄变量
    m_bMeApplyBanker=false;
    m_nWaitBanker=0;
    m_nBankerCount=0;

    return true;
}

//时间消息
bool  CAndroidUserItemSink::OnEventTimer(UINT nTimerID)
{
    switch (nTimerID)
    {
    case IDI_CHECK_BANKER:        //检查上庄
        {
            m_pIAndroidUserItem->KillGameTimer(nTimerID);

            if (m_wCurrentBanker == m_pIAndroidUserItem->GetChairID())
                return false;

            if (m_wCurrentBanker == INVALID_CHAIR)
            {
                //空庄
                m_nWaitBanker++;

                //MyDebug(_T("机器人上庄(End) %d [%d %d] [%d %d]"), m_pIAndroidUserItem->GetChairID(), m_nWaitBanker,
                //    m_nRobotWaitBanker, m_stlApplyBanker, m_nRobotApplyBanker);

                //机器人上庄
                if ( m_bRobotBanker && m_nWaitBanker > m_nRobotWaitBanker && m_stlApplyBanker < m_nRobotApplyBanker)
                {
                    //合法判断
                    IServerUserItem *pIUserItemBanker = m_pIAndroidUserItem->GetMeUserItem();
                    if (pIUserItemBanker->GetUserScore() > m_lBankerCondition)
                    {
                        //机器人上庄
                        m_nBankerCount = 0;
                        m_stlApplyBanker++;
                        m_pIAndroidUserItem->SetGameTimer(IDI_REQUEST_BANKER, (rand() % m_cbTimeLeave) + 1);
                    }
                }
            }
            else if ( m_wCurrentBanker != INVALID_CHAIR )
            {
                //其他人坐庄
                m_nWaitBanker = 0;
            }

            return false;
        }
    case IDI_REQUEST_BANKER:    //申请上庄
        {
            m_pIAndroidUserItem->KillGameTimer(nTimerID);

            m_pIAndroidUserItem->SendSocketData(SUB_C_APPLY_BANKER);

            return false;
        }
    case IDI_GIVEUP_BANKER:        //申请下庄
        {
            m_pIAndroidUserItem->KillGameTimer(nTimerID);

            m_pIAndroidUserItem->SendSocketData(SUB_C_CANCEL_BANKER);

            return false;
        }
    default:
        {
            if (nTimerID >= IDI_PLACE_JETTON && nTimerID <= IDI_PLACE_JETTON+MAX_CHIP_TIME)
            {
                //m_pIAndroidUserItem->SendChatMessage(INVALID_CHAIR,TEXT("机器人下注"),RGB());
                srand(GetTickCount());

                //变量定义
                int nRandNum = 0, nChipArea = 0, nCurChip = 0, nACTotal = 0, nCurJetLmt[2] = {};
                LONGLONG lMaxChipLmt = __min(m_lMaxChipBanker, m_lMaxChipUser);            //最大可下注值
                WORD wMyID = m_pIAndroidUserItem->GetChairID();
                for (int i = 0; i < AREA_COUNT; i++)
                    nACTotal += m_RobotInfo.nAreaChance;

                //统计次数
                m_nChipTimeCount++;

                //检测退出
                if (lMaxChipLmt < m_RobotInfo.nChip[m_nChipLimit[0]])    return false;
                for (int i = 0; i < AREA_COUNT; i++)
                {
                    if (m_lAreaChip >= m_RobotInfo.nChip[m_nChipLimit[0]])    break;
                    if (i == AREA_COUNT-1)    return false;
                }

                //下注区域
                ASSERT(nACTotal>0);
                static int nStFluc = 1;                //随机辅助
                if (nACTotal <= 0)    return false;
                do {
                    nRandNum = (rand()+wMyID+nStFluc*3) % nACTotal;
                    for (int i = 0; i < AREA_COUNT; i++)
                    {
                        nRandNum -= m_RobotInfo.nAreaChance;
                        if (nRandNum < 0)
                        {
                            nChipArea = i;
                            break;
                        }
                    }
                }
                while (m_lAreaChip[nChipArea] < m_RobotInfo.nChip[m_nChipLimit[0]]);
                nStFluc = nStFluc%3 + 1;

                //下注大小
                if (m_nChipLimit[0] == m_nChipLimit[1])
                    nCurChip = m_nChipLimit[0];
                else
                {
                    //设置变量
                    lMaxChipLmt = __min(lMaxChipLmt, m_lAreaChip[nChipArea]);
                    nCurJetLmt[0] = m_nChipLimit[0];
                    nCurJetLmt[1] = m_nChipLimit[0];

                    //计算当前最大筹码
                    for (int i = m_nChipLimit[1]; i > m_nChipLimit[0]; i--)
                    {
                        if (lMaxChipLmt > m_RobotInfo.nChip)
                        {
                            nCurJetLmt[1] = i;
                            break;
                        }
                    }

                    //随机下注
                    nRandNum = (rand()+wMyID) % (nCurJetLmt[1]-nCurJetLmt[0]+1);
                    nCurChip = nCurJetLmt[0] + nRandNum;
                    //nCurChip=nCurJetLmt[1];

                    //多下控制 (当庄家金币较少时会尽量保证下足次数)
                    if (m_nChipTimeCount < m_nChipTime)
                    {
                        LONGLONG lLeftJetton = LONGLONG( (lMaxChipLmt-m_RobotInfo.nChip[nCurChip])/(m_nChipTime-m_nChipTimeCount) );

                        //不够次数 (即全用最小限制筹码下注也少了)
                        if (lLeftJetton < m_RobotInfo.nChip[m_nChipLimit[0]] && nCurChip > m_nChipLimit[0])
                            nCurChip--;
                    }
                }

                /*ASSERT( MyDebug(_T("机器人下注 %d 下注次数 [%d/%d] 下注 [%d %d] 范围 [%d %d] 限制 [%I64d %I64d %I64d]"), wMyID, nTimerID-IDI_PLACE_JETTON, m_nChipTime,
                    nChipArea, m_RobotInfo.nChip[nCurChip], m_nChipLimit[0], m_nChipLimit[1], m_lMaxChipBanker, m_lMaxChipUser, lMaxChipLmt) );*/

                //变量定义
                CMD_C_PlaceJetton PlaceJetton = {};
            

                //构造变量
                PlaceJetton.cbJettonArea = nChipArea+1;        //区域宏从1开始
                PlaceJetton.lJettonScore = m_RobotInfo.nChip[nCurChip];


                //发送消息
                m_pIAndroidUserItem->SendSocketData(SUB_C_PLACE_JETTON, &laceJetton, sizeof(PlaceJetton));
            }
   
            m_pIAndroidUserItem->KillGameTimer(nTimerID);
            return false;
        }
    }
    return false;
}

//游戏消息
bool  CAndroidUserItemSink::OnEventGameMessage(WORD wSubCmdID, void * pBuffer, WORD wDataSize)
{
    switch (wSubCmdID)
    {
    case SUB_S_GAME_FREE:            //游戏空闲
        {
            return OnSubGameFree(pBuffer, wDataSize);
        }
    case SUB_S_GAME_START:            //游戏开始
        {
            return OnSubGameStart(pBuffer, wDataSize);
        }
    case SUB_S_PLACE_JETTON:        //用户加注
        {
            return OnSubPlaceJetton(pBuffer, wDataSize);
        }
    case SUB_S_APPLY_BANKER:        //申请做庄
        {
            return OnSubUserApplyBanker(pBuffer,wDataSize);
        }
    case SUB_S_CANCEL_BANKER:        //取消做庄
        {
            return OnSubUserCancelBanker(pBuffer,wDataSize);
        }
    case SUB_S_CHANGE_BANKER:        //切换庄家
        {
            return OnSubChangeBanker(pBuffer,wDataSize);
        }
    case SUB_S_GAME_END:            //游戏结束
        {
            return OnSubGameEnd(pBuffer, wDataSize);
        }
    case SUB_S_SEND_RECORD:            //游戏记录 (忽略)
        {
            return true;
        }
    case SUB_S_PLACE_JETTON_FAIL:    //下注失败 (忽略)
        {
            return true;
        }
    }

    //错误断言
    ASSERT(FALSE);

    return true;
}

//游戏消息
bool  CAndroidUserItemSink::OnEventFrameMessage(WORD wSubCmdID, void * pData, WORD wDataSize)
{
    return true;
}

//场景消息
bool  CAndroidUserItemSink::OnEventSceneMessage(BYTE cbGameStatus, bool bLookonOther, void * pData, WORD wDataSize)
{
    switch (cbGameStatus)
    {
    case GAME_STATUS_FREE:            //空闲状态
        {
            //效验数据
            ASSERT(wDataSize==sizeof(CMD_S_StatusFree));
            if (wDataSize!=sizeof(CMD_S_StatusFree)) return false;

            //消息处理
            CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pData;

            m_lUserLimitScore = pStatusFree->lUserMaxScore;
            m_lAreaLimitScore = pStatusFree->lAreaLimitScore;
            m_lBankerCondition = pStatusFree->lApplyBankerCondition;

            memcpy(m_szRoomName, pStatusFree->szGameRoomName, sizeof(m_szRoomName));

            ReadConfigInformation(m_RobotInfo.szCfgFileName, m_szRoomName, true);

            //MyDebug(_T("机器人上庄(Free) %d [%d %d] [%d %d]"), m_pIAndroidUserItem->GetChairID(), m_nWaitBanker,
            //    m_nRobotWaitBanker, m_stlApplyBanker, m_nRobotApplyBanker);

            //上庄处理
            if (pStatusFree->wBankerUser == INVALID_CHAIR)
            {
                if (m_bRobotBanker && m_nRobotWaitBanker == 0  && m_stlApplyBanker < m_nRobotApplyBanker)
                {
                    //合法判断
                    IServerUserItem *pIUserItemBanker = m_pIAndroidUserItem->GetMeUserItem();
                    if (pIUserItemBanker->GetUserScore() > m_lBankerCondition)
                    {
                        //机器人上庄
                        m_nBankerCount = 0;
                        m_stlApplyBanker++;
                        
                        BYTE cbTime = (pStatusFree->cbTimeLeave>0?(rand()%pStatusFree->cbTimeLeave+1):2);
                        if (cbTime == 0) cbTime = 2;

                        m_pIAndroidUserItem->SetGameTimer(IDI_REQUEST_BANKER, cbTime);
                    }
                }
            }

            return true;
        }
    case GS_PLACE_JETTON:        //游戏状态
    case GS_GAME_END:        //结束状态
        {
            //效验数据
            ASSERT(wDataSize==sizeof(CMD_S_StatusPlay));
            if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false;

            //消息处理
            CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pData;

            //庄家信息
            m_wCurrentBanker = pStatusPlay->wBankerUser;

            m_lUserLimitScore = pStatusPlay->lUserMaxScore;
            m_lAreaLimitScore = pStatusPlay->lAreaLimitScore;
            m_lBankerCondition = pStatusPlay->lApplyBankerCondition;

            memcpy(m_szRoomName, pStatusPlay->szGameRoomName, sizeof(m_szRoomName));

            ReadConfigInformation(m_RobotInfo.szCfgFileName, m_szRoomName, true);

            return true;
        }
    }

    return true;
}

//用户进入
void  CAndroidUserItemSink::OnEventUserEnter(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
    return;
}

//用户离开
void  CAndroidUserItemSink::OnEventUserLeave(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
    return;
}

//用户积分
void  CAndroidUserItemSink::OnEventUserScore(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
    return;
}

//用户状态
void  CAndroidUserItemSink::OnEventUserStatus(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
    return;
}

//用户段位
void  CAndroidUserItemSink::OnEventUserSegment(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
    return;
}

//游戏空闲
bool CAndroidUserItemSink::OnSubGameFree(const void * pBuffer, WORD wDataSize)
{
    //读取配置
    if (m_bRefreshCfg)
        ReadConfigInformation(m_RobotInfo.szCfgFileName, m_szRoomName, false);

    //消息处理
    CMD_S_GameFree* pGameFree=(CMD_S_GameFree *)pBuffer;

    m_cbTimeLeave = pGameFree->cbTimeLeave;

    bool bMeGiveUp = false;
    if (m_wCurrentBanker == m_pIAndroidUserItem->GetChairID())
    {
        m_nBankerCount++;
        if ( m_nBankerCount >= m_nRobotBankerCount )
        {
            //机器人走庄
            m_nBankerCount = 0;
            m_pIAndroidUserItem->SetGameTimer(IDI_GIVEUP_BANKER, rand()%2 + 1);

            bMeGiveUp = true;
        }
    }

    //检查上庄
    if (m_wCurrentBanker != m_pIAndroidUserItem->GetChairID() || bMeGiveUp)
    {
        m_cbTimeLeave = pGameFree->cbTimeLeave - 3;
        m_pIAndroidUserItem->SetGameTimer(IDI_CHECK_BANKER, 3);
    }

    return true;
}

//游戏开始
bool CAndroidUserItemSink::OnSubGameStart(const void * pBuffer, WORD wDataSize)
{   
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_GameStart));
    if (wDataSize!=sizeof(CMD_S_GameStart)) return false;

    //消息处理
    CMD_S_GameStart * pGameStart=(CMD_S_GameStart *)pBuffer;

    srand(GetTickCount());

    //自己当庄或无下注机器人
    if (pGameStart->wBankerUser == m_pIAndroidUserItem->GetChairID() || pGameStart->nChipRobotCount <= 0)
        return true;

    //设置变量
    //m_lMaxChipBanker = pGameStart->lBankerScore/m_RobotInfo.nMaxTime;
    //m_lMaxChipUser = pGameStart->lUserMaxScore/m_RobotInfo.nMaxTime;

    m_lMaxChipBanker = pGameStart->lBankerScore;
    m_lMaxChipUser = pGameStart->lUserMaxScore;
    m_wCurrentBanker = pGameStart->wBankerUser;
    m_nChipTimeCount = 0;
    ZeroMemory(m_nChipLimit, sizeof(m_nChipLimit));
    m_nChipLimit[1]=5;
    m_nChipLimit[0]=0;

    for (int i = 0; i < AREA_COUNT; i++)
        m_lAreaChip = m_lAreaLimitScore;

    //系统当庄
    if (pGameStart->wBankerUser == INVALID_CHAIR)
    {
        m_stlApplyBanker = 0;
        m_lMaxChipBanker = 2147483647/m_RobotInfo.nMaxTime;
    }
    else
        m_lMaxChipUser = __min( m_lMaxChipUser, m_lMaxChipBanker );

    //计算下注次数
    int nElapse = 0;                                                
    WORD wMyID = m_pIAndroidUserItem->GetChairID();

    if (m_nRobotBetTimeLimit[0] == m_nRobotBetTimeLimit[1])
        m_nChipTime = m_nRobotBetTimeLimit[0];
    else
        m_nChipTime = (rand()+wMyID)%(m_nRobotBetTimeLimit[1]-m_nRobotBetTimeLimit[0]+1) + m_nRobotBetTimeLimit[0];
    ASSERT(m_nChipTime>=0);        
    if (m_nChipTime <= 0)    return false;                                //的确,2个都带等于
    if (m_nChipTime > MAX_CHIP_TIME)    m_nChipTime = MAX_CHIP_TIME;    //限定MAX_CHIP次下注

    //计算范围
    //if (!CalcJettonRange(__min(m_lMaxChipBanker, m_lMaxChipUser), m_lRobotJettonLimit, m_nChipTime, m_nChipLimit))
        //return true;

    //设置时间
    int nTimeGrid = int(pGameStart->cbTimeLeave-2)*800/m_nChipTime;        //时间格,前2秒不下注,所以-2,800表示机器人下注时间范围千分比
    for (int i = 0; i < m_nChipTime; i++)
    {
        int nRandRage = int( nTimeGrid * i / (1500*sqrt((double)m_nChipTime)) ) + 1;        //波动范围
        nElapse = 2 + (nTimeGrid*i)/1000 + ( (rand()+wMyID)%(nRandRage*2) - (nRandRage-1) );
        ASSERT(nElapse>=2&&nElapse<=pgamestart->cbTimeLeave);
        if (nElapse < 2 || nElapse > pGameStart->cbTimeLeave)    continue;
        
        m_pIAndroidUserItem->SetGameTimer(IDI_PLACE_JETTON+i+1, nElapse);

    }
    //ASSERT( MyDebug(_T("机器人 %d 下注次数 %d 范围 [%d %d] 总人数 %d 限制 [%I64d %I64d] 上庄 [%d %d]"), wMyID, m_nChipTime, m_nChipLimit[0], m_nChipLimit[1],
    //    pGameStart->nChipRobotCount, m_lMaxChipBanker, m_lMaxChipUser, m_stlApplyBanker, m_nRobotApplyBanker) );

    return true;
}

//用户加注
bool CAndroidUserItemSink::OnSubPlaceJetton(const void * pBuffer, WORD wDataSize)
{
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_PlaceJetton));
    if (wDataSize!=sizeof(CMD_S_PlaceJetton)) return false;

    //消息处理
    CMD_S_PlaceJetton * pPlaceJetton=(CMD_S_PlaceJetton *)pBuffer;

    //设置变量
    m_lMaxChipBanker -= pPlaceJetton->lJettonScore;
    m_lAreaChip[pPlaceJetton->cbJettonArea-1] -= pPlaceJetton->lJettonScore;
    if (pPlaceJetton->wChairID == m_pIAndroidUserItem->GetChairID())
        m_lMaxChipUser -= pPlaceJetton->lJettonScore;

    return true;
}

//下注失败
bool CAndroidUserItemSink::OnSubPlaceJettonFail(const void * pBuffer, WORD wDataSize)
{
    return true;
}

//游戏结束
bool CAndroidUserItemSink::OnSubGameEnd(const void * pBuffer, WORD wDataSize)
{
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_GameEnd));
    if (wDataSize!=sizeof(CMD_S_GameEnd)) return false;

    //消息处理
    CMD_S_GameEnd * pGameEnd=(CMD_S_GameEnd *)pBuffer;

    //KK JIA 如果机器分数高于设置分数,则切换庄家
    if (m_pIAndroidUserItem->GetMeUserItem()->GetUserScore()> m_pIAndroidUserItem->GetAndroidParameter()->lMaxTakeScore)
    {
        m_pIAndroidUserItem->SendSocketData(SUB_C_CANCEL_BANKER);

    }

    return true;
}

//申请做庄
bool CAndroidUserItemSink::OnSubUserApplyBanker(const void * pBuffer, WORD wDataSize)
{
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_ApplyBanker));
    if (wDataSize!=sizeof(CMD_S_ApplyBanker)) return false;

    //消息处理
    CMD_S_ApplyBanker * pApplyBanker=(CMD_S_ApplyBanker *)pBuffer;

    //自己判断
    if (m_pIAndroidUserItem->GetChairID()==pApplyBanker->wApplyUser)
        m_bMeApplyBanker=true;

    return true;
}

//取消做庄
bool CAndroidUserItemSink::OnSubUserCancelBanker(const void * pBuffer, WORD wDataSize)
{
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_CancelBanker));
    if (wDataSize!=sizeof(CMD_S_CancelBanker)) return false;

    //消息处理
    CMD_S_CancelBanker * pCancelBanker=(CMD_S_CancelBanker *)pBuffer;

    //自己判断
    if (lstrcmp(m_pIAndroidUserItem->GetMeUserItem()->GetNickName(),pCancelBanker->szCancelUser)==0)
        m_bMeApplyBanker=false;

    return true;
}

//切换庄家
bool CAndroidUserItemSink::OnSubChangeBanker(const void * pBuffer, WORD wDataSize)
{
    //效验数据
    ASSERT(wDataSize==sizeof(CMD_S_ChangeBanker));
    if (wDataSize!=sizeof(CMD_S_ChangeBanker)) return false;

    //消息处理
    CMD_S_ChangeBanker * pChangeBanker = (CMD_S_ChangeBanker *)pBuffer;

    if ( m_wCurrentBanker == m_pIAndroidUserItem->GetChairID() && m_wCurrentBanker != pChangeBanker->wBankerUser )
    {
        m_stlApplyBanker--;
    }
    m_wCurrentBanker = pChangeBanker->wBankerUser;
    m_nWaitBanker = 0;

    return true;
}

//读取配置
void CAndroidUserItemSink::ReadConfigInformation(TCHAR szFileName[], TCHAR szRoomName[], bool bReadFresh)
{
    //设置文件名
    TCHAR szPath[MAX_PATH] = TEXT("");
    TCHAR szConfigFileName[MAX_PATH] = TEXT("");
    TCHAR OutBuf[255] = TEXT("");
    GetCurrentDirectory(sizeof(szPath), szPath);
    _sntprintf(szConfigFileName, sizeof(szConfigFileName), _T("%s\\%s"), szPath, szFileName);

    //每盘刷新
    if (bReadFresh)
    {
        //每盘刷新
        BYTE cbRefreshCfg = GetPrivateProfileInt(szRoomName, TEXT("Refresh"), 0, szConfigFileName);
        m_bRefreshCfg = cbRefreshCfg?true:false;
    }

    //筹码限制
    ZeroMemory(OutBuf, sizeof(OutBuf));
    GetPrivateProfileString(szRoomName, TEXT("RobotMaxJetton"), _T("5000000"), OutBuf, 255, szConfigFileName);
    _sntscanf(OutBuf, _tcslen(OutBuf), _T("%I64d"), &m_lRobotJettonLimit[1]);

    ZeroMemory(OutBuf, sizeof(OutBuf));
    GetPrivateProfileString(szRoomName, TEXT("RobotMinJetton"), _T("100"), OutBuf, 255, szConfigFileName);
    _sntscanf(OutBuf, _tcslen(OutBuf), _T("%I64d"), &m_lRobotJettonLimit[0]);

    if (m_lRobotJettonLimit[1] > 5000000)                    m_lRobotJettonLimit[1] = 5000000;
    if (m_lRobotJettonLimit[0] < 1000)                        m_lRobotJettonLimit[0] = 100;
    if (m_lRobotJettonLimit[1] < m_lRobotJettonLimit[0])    m_lRobotJettonLimit[1] = m_lRobotJettonLimit[0];

    //次数限制
    m_nRobotBetTimeLimit[0] = GetPrivateProfileInt(szRoomName, _T("RobotMinBetTime"), 4, szConfigFileName);;
    m_nRobotBetTimeLimit[1] = GetPrivateProfileInt(szRoomName, _T("RobotMaxBetTime"), 8, szConfigFileName);;

    if (m_nRobotBetTimeLimit[0] < 0)                            m_nRobotBetTimeLimit[0] = 0;
    if (m_nRobotBetTimeLimit[1] < m_nRobotBetTimeLimit[0])        m_nRobotBetTimeLimit[1] = m_nRobotBetTimeLimit[0];

    //是否坐庄
    m_bRobotBanker = (GetPrivateProfileInt(szRoomName, _T("RobotBanker"), 0, szConfigFileName) == 1);

    //坐庄次数
    m_nRobotBankerCount = GetPrivateProfileInt(szRoomName, _T("RobotBankerCount"), 3, szConfigFileName);

    //空盘重申
    m_nRobotWaitBanker = GetPrivateProfileInt(szRoomName, _T("RobotWaitBanker"), 3, szConfigFileName);

    //最多个数
    m_nRobotApplyBanker = GetPrivateProfileInt(szRoomName, _T("RobotApplyBanker"), 3, szConfigFileName);

    //降低限制
    m_bReduceJettonLimit = (GetPrivateProfileInt(szRoomName, TEXT("RobotReduceLimit"), 0, szConfigFileName)!=0);

    //MyDebug(_T("机器人 读取配置 [%I64d %I64d %d %d] %d [%d %d %d] 下注 %d 下降 %d"), m_lRobotJettonLimit[0], m_lRobotJettonLimit[1],
    //    m_nRobotBetTimeLimit, m_nRobotBetTimeLimit, m_bRobotBanker, m_nRobotBankerCount, m_nRobotWaitBanker, m_nRobotApplyBanker, m_bReduceJettonLimit);
}

//计算范围    (返回值表示是否可以通过下降下限达到下注)
bool CAndroidUserItemSink::CalcJettonRange(LONGLONG lMaxScore, LONGLONG lChipLmt[], int & nChipTime, int lJetLmt[])
{
    //定义变量
    bool bHaveSetMinChip = false;

    //不够一注
    if (lMaxScore < m_RobotInfo.nChip[0])    return false;

    //配置范围
    for (int i = 0; i < CountArray(m_RobotInfo.nChip); i++)
    {
        if (!bHaveSetMinChip && m_RobotInfo.nChip >= lChipLmt[0])
        {
            lJetLmt[0] = i;
            bHaveSetMinChip = true;
        }
        if (m_RobotInfo.nChip <= lChipLmt[1])
            lJetLmt[1] = i;
    }
    if (lJetLmt[0] > lJetLmt[1])    lJetLmt[0] = lJetLmt[1];

    //是否降低下限
    if (m_bReduceJettonLimit)
    {
        if (nChipTime * m_RobotInfo.nChip[lJetLmt[0]] > lMaxScore)
        {
            //是否降低下注次数
            if (nChipTime * m_RobotInfo.nChip[0] > lMaxScore)
            {
                nChipTime = int(lMaxScore/m_RobotInfo.nChip[0]);
                lJetLmt[0] = 0;
                lJetLmt[1] = 0;
            }
            else
            {
                //降低到合适下限
                while (nChipTime * m_RobotInfo.nChip[lJetLmt[0]] > lMaxScore)
                {
                    lJetLmt[0]--;
                    ASSERT(lJetLmt[0]>=0);
                }
            }
        }
    }

    return true;
}

//组件创建函数
DECLARE_CREATE_MODULE(AndroidUserItemSink);
//////////////////////////////////////////////////////////////////////////

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表