//--------------------------------------------------------------------------- #ifndef GameUnitH #define GameUnitH //--------------------------------------------------------------------------- #include #include #include "PolicyUnit.h" #include "SimpleMutex.h" #include "GameSettings.h" #define EXCODE_SERVERWAIT 0x01 #define EXCODE_OPCOMPLETE 0x010 #define EXCODE_USERCANCEL 0x1000 #define EXCODE_INSUFFICIENT 0x1001 #define EXCODE_REACHWINLIMIT 0x1003 #define EXCODE_REACHLOSLIMIT 0x1004 #define EXCODE_WEBSITEERROR 0x1005 #define EXCODE_GAMEOVER 0x1006 #define EXCODE_USERINVALID 0x1007 #define EXCODE_USEREXPIRE 0x1008 #define EXCODE_USERLOGOUT 0x1009 #define EXCODE_NOBETWAY 0x100A #define EXCODE_REACHLIMIT 0x100B #define EXCODE_SERVERDOWN 0x100C #define EXCODE_RESPONSEERR 0x100D #define EXCODE_CANTSETPAGE 0x100E #define EXCODE_UNKNOWN 0x1100 #define UM_TAB_UPDATE WM_USER+0x2000 #define UM_LOG_UPDATE WM_USER+0x2001 #define UM_CHART_UPDATE WM_USER+0x2002 #define UM_RUN_TIME WM_USER+0x2003 #define UM_STATE_UPDATE WM_USER+0x2004 #define UM_CHANGE_ROAD WM_USER+0x2005 #define UM_MANUAL_SET WM_USER+0x2006 #define UM_ENTER_TABLE WM_USER+0x2007 #define UM_FLOAT_BET WM_USER+0x2008 #define UM_FLOAT_DEAD WM_USER+0x2009 #define UM_GLOBAL_BET WM_USER+0x200A #define UM_GLOBAL_DEAD WM_USER+0x200B #define UPDATE_ROAD 0 #define UPDATE_STATUS 1 #define UPDATE_TIME 2 #define UPDATE_MANBET 3 #define UPDATE_MANRES 4 #define UPDATE_RESET 5 //重置数据 #define UPDATE_IP 6 //重置独立策略 #define STATE_AMOUNT 0 #define STATE_BET_R 1 #define STATE_PEAK 2 #define STATE_COUNT 3 #define STATE_MISC 4 #define STATE_MAN 5 #define STATE_REAL 6 #define STATE_BALANCE 7 #define STATE_LIMIT 8 #define STATE_ALL 0x10 #define LOGEVT_START 0 #define LOGEVT_BET 1 #define LOGEVT_RES 2 #define LOGEVT_ROUND 3 #define LOGEVT_DEAD 4 #define LOGEVT_STOPWIN 5 #define LOGEVT_STOPLOS 6 #define LOGEVT_END 7 #define LOGEVT_RESET 8 #define LOGEVT_SWITCH 9 #define LOGEVT_QUASH 10 #define ST_INIT 0 #define ST_NOBET 1 #define ST_BETSET 2 #define ST_BETTING 3 #define ST_BETTED 4 #define ST_EXPIRED 5 #define ST_PAID 6 #define ST_CANCELED 7 #define ST_FAILED 8 #define ST_QUASH 9 //注单撤销 #define ST_ROUND 10 #define ST_SHUFFLE 11 #define TAB_WAIT -1 #define TAB_NOWAY -2 //--------------------------------------------------------------------------- using namespace std; //图表数据 typedef struct tagDot{ int val; //数值 int ts; //时间 tagDot(){ memset( this, 0, sizeof(tagDot)); }; tagDot(int v, int t){ val=v,ts=t; }; }TDot; //挂机日志 typedef struct tagBetLog{ int ts; //时间 int num; //数值 char tno[14];//台桌名 char ev; //事件 char op; //选项 tagBetLog(){memset( this, 0, sizeof(tagBetLog));}; }TBetLog; // 挂机数据 typedef struct tagBetData{ double profits[8]; //总赢利/总赢利峰值/总赢利谷值/当期赢利/实打总赢利/手工总赢利/当期模拟赢利/当期实打赢利 int amounts[3], //总流水/实打流水/手工流水 counts[4], //赢计数/输计数/最大连赢/连输计数 maxChip, //最大注额 dead; //爆缆次数 tagBetData(){Reset();}; void Reset(){memset( this, 0, sizeof(tagBetData));}; }TBetData; //手工下注 typedef struct tagManBet{ int chips[3]; //注码 0=庄 1=闲 2=平 int state; //状态 ST_INIT/ST_BETTING/ST_BETTED tagManBet(){memset( this, 0, sizeof(tagManBet));}; }TManBet; //阶梯注码 class TRankChip{ protected: int iType, //注码类型 iRank, //注码层数 nRnkChip; //当层注码 bool bWait; //等待结算 TChipPolicy* pPolicy; //注码方案 public: TRankChip(); bool __fastcall IsTypeOf(int type){return type==iType;}; void __fastcall SetPolicy(TChipPolicy* pCP); virtual int __fastcall GetChip(){return bWait || iRank<0 ? -1 : nRnkChip;}; virtual void __fastcall Reset() = 0; virtual int __fastcall HandleResult(int res, double wl) = 0; }; //层级注码 class TTierChip : public TRankChip{ int nWLDiff, //本层赢输差 nAccChip, //累加注码 nLos, //当层输额 nCount; //当层下注计数 public: TTierChip(); virtual void __fastcall Reset(); // virtual int __fastcall GetChip(){return nCurrChip;}; virtual int __fastcall HandleResult(int res, double wl); }; //阶梯注码 class TLevelChip : public TRankChip{ protected: bool bGlobal; //总体计算 double fWLDiff; //本层输赢金额 public: TLevelChip(bool bG=false); virtual void __fastcall Reset(); virtual void __fastcall CalcChip(); virtual void __fastcall CalcLevelChip(bool bLevel, int res); virtual int __fastcall HandleResult(int res, double wl); }; //组合阶梯注码 class TComboChip : public TLevelChip{ int iRnkSeq; //当层注码步骤 int nRnkMul; //当层倍数 TChipPolicy* pRnkPolicy; //当层注码方案 public: TComboChip(bool bG=false); virtual void __fastcall Reset(); virtual void __fastcall CalcChip(); virtual void __fastcall CalcLevelChip(bool bLevel, int res); int __fastcall GetRankSeq(int res, int iRnk, int iSeq); int __fastcall GetComboChip(int& iRnk, int& iSeq); }; //赢输次差注码 class TWLDiffChip : public TRankChip{ protected: bool bGlobal; //总体计算 int nWLDiff; //输赢次差 public: TWLDiffChip(bool bG=false); virtual void __fastcall Reset(); virtual void __fastcall CalcChip(); virtual int __fastcall HandleResult(int res, double wl); }; //路珠图 class TRoadmap{ public: vector aCols; int iCol, iRow, iRoot; bool bBend; TRoadmap(); void __fastcall DrawMap(char curr, char last); void __fastcall Clear(); void __fastcall CheckColumn(); }; //台桌 class TTableFrame; class TGame { public: int iGame; //gameId //台桌相关 String vid; //房间号 String gmcode; int gmstatus; //0=结算 1=下注 2=开牌 11=洗牌 12=维护 int timeout; int countdown; //固定倒计时 char winCount[3]; //庄闲计数 [0]庄 [1]闲 [2]平 String bcard; //庄牌 2-3张 0-9 0,5,2 String pcard; //闲牌 3,4,_ bool bRun, //运行 bRev, //反打 bPause, //暂停 bReset, //是否重置打法注码 bBreak; //是否等待新局 int iRoad; bool bIndPolicy; //是否独立策略 int iBetPolicy, iChipPolicy, nChipMul; //独立策略 //下注相关 int iState; //INIT/BETTING/BETTED int iBet; //下注项 int nChip; //下注金额 int iBetSeq; //下注手数+打法 int iChipSeq; //注码步骤 // bool bGlobalChip; //是否全局注码 bool bReal; //模拟/实打 0=模拟 1=实打 vector aBets; //剩余连续下注项 vector aManBets; //手工下注 TRankChip * pRankChip; //层级注码 //统计相关 double profit; //当前赢利 int seqCount[2]; //连赢/连输计数 HWND hTable; //台桌句柄,通过消息操作UI CSema* pSema; //路单数据 vector aRes; //历史结果 vector aRoad[4]; //大路/大眼路/小路/小强路 char lastRoad[4]; TRoadmap aMap[4]; //路珠图 TGame(int iG); ~TGame(); void __fastcall HandleResult(int op=0); //op =0正常处理 =1数据异常 =2结算超时 =3维护注销 void __fastcall AutoBetOn(bool bReset=false); void __fastcall AutoBetOff(bool bBreak=false); void __fastcall ManualBetOn(int chips[]); void __fastcall ManualBetOff(); void __fastcall BetResp(bool bSuc); void __fastcall Shuffle(); void __fastcall CalcBet(); void __fastcall CalcChip(); int __fastcall CalcResult(int op); void __fastcall Reset(); void __fastcall ResetBet(); void __fastcall ClearBets(); int __fastcall ParseCard(int c); void __fastcall ClearResults(); void __fastcall BuildRoadmap(char wt); bool __fastcall CanBet(); TBetLog* __fastcall NewBetLog(); void __fastcall GameOn(); void __fastcall GameOff(); void __fastcall BetResp(int state, int chips[]=NULL); //state 下注状态 0=成功 10=低于限红 11=高于限红 25=已停止下注 26=余额不足 其它=未知 void __fastcall Pause(bool bP){bPause = bP;}; int __fastcall Color2Bet(TBetPolicy* pBP, char clr); //下三路下注 clr=红蓝 返回庄闲 void __fastcall ClearRankChip(); TRankChip* __fastcall GetRankChip(int type); void __fastcall ResetIP(); }; class TGameArray : public vector { public: CSema* pSema; vector aGames; TBetData betData; //总输赢状态及计数 //游台相关 bool bFloat, //是否游台 bSwitchable; //可否换台 int iFloatGame; //下注台号 //全局注码 int iChipSeq, //全局注码步骤 seqCount[2]; //连赢/连输计数 TRankChip * pRankChip; //层级注码 int runTime, //挂机时长 nBetted[3]; //待结算的下注 模拟/实打/全局计算 double fCurrProfitPeak; //最大当期赢利 TGameArray(); ~TGameArray(); void __fastcall Init(String sRooms); TGame* __fastcall NewGame(int iG, String vid, int ind); TGame* __fastcall GetGame(int iG); int __fastcall FindGame(int iG, TGame*& pGame); void __fastcall ClearAllGames(); void __fastcall CalcBet(); void __fastcall Reset(); void __fastcall ResetFloat(); void __fastcall SetSwitchable(bool bS, int iG); bool __fastcall CanFloatBet(int iG); void __fastcall GameOn(); void __fastcall GameOff(); void __fastcall AllBetOff(); void __fastcall ClearRankChip(); void __fastcall ResetRankChip(); TRankChip* __fastcall GetRankChip(int type); void __fastcall SetCountDown(String s); void __fastcall ResetRankSeq(); }; class TIPGame { public: String vid; //gameId int iBetPolicy, iChipPolicy, nChipMul; //独立策略 TGame* pGame; TIPGame(String v, int b, int c, int m){pGame=NULL, vid=v, iBetPolicy=b, iChipPolicy=c, nChipMul=m;}; TIPGame(TGame* pG){pGame = pG, vid=pG->vid, iBetPolicy=pG->iBetPolicy, iChipPolicy=pG->iChipPolicy, nChipMul=pG->nChipMul;}; }; class TIPGameArray : public vector { public: int iPlatform; int __fastcall FindGame(String vid, TIPGame*& pIG); void __fastcall ClearAll(); void __fastcall AddGame(TGame* pG); void __fastcall DelGame(TGame* pG); void __fastcall AddIPGame(String v, int b, int c, int m); TIPGameArray(){iPlatform==0;}; ~TIPGameArray(); }; //--------------------------------------------------------------------------- int __fastcall Vid2Gid(String vid); extern TSettings g_settings; //基本设置 extern TGameArray g_aGames; extern double g_fBalance; //账户余额 extern int g_iRoad; //全局路珠类型 0=六珠路 1=大路 2=大眼路 3=小路 4=小强路 extern bool g_bSimulate, //模拟/实打 g_bGameOn, //开始挂机 g_bShowSetting, //开始挂机时显示设置页面 g_bDeadPause, //全局爆缆暂停 g_bBetPause; //总体止赢止损暂停 extern int g_MinOnBet, //最小注码 g_MaxOnBet; //最大注码 extern int g_nRBReport; //实打流水上报 extern vector g_aDots[4]; //资金图表数据 总赢利/模拟本金/账户余额/总输赢差 extern TIPGameArray g_aIPGames; //独立策略台桌 #endif