402 lines
11 KiB
C++
402 lines
11 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#ifndef GameUnitH
|
|
#define GameUnitH
|
|
//---------------------------------------------------------------------------
|
|
#include <system.hpp>
|
|
#include <vector>
|
|
#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<char*> 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<char> aBets; //剩余连续下注项
|
|
|
|
vector<TManBet> aManBets; //手工下注
|
|
|
|
TRankChip * pRankChip; //层级注码
|
|
|
|
//统计相关
|
|
double profit; //当前赢利
|
|
int seqCount[2]; //连赢/连输计数
|
|
|
|
HWND hTable; //台桌句柄,通过消息操作UI
|
|
CSema* pSema;
|
|
|
|
//路单数据
|
|
vector<char> aRes; //历史结果
|
|
vector<char> 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<TGame*>
|
|
{
|
|
public:
|
|
CSema* pSema;
|
|
vector<TGame*> 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<TIPGame*>
|
|
{
|
|
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<TDot> g_aDots[4]; //资金图表数据 总赢利/模拟本金/账户余额/总输赢差
|
|
extern TIPGameArray g_aIPGames; //独立策略台桌
|
|
#endif
|