📄 lottomgr.cpp
字号:
// LottoMgr.cpp: implementation of the CLottoMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "LottoMgr.h"
#include "Hangul.h"
#include "network.h"
#include "dragon.h"
#include "CurrentMsgMgr.h"
#include "Menu.h"
extern SMENU SMenu[MAX_MENU];
extern char *g_DestBackBuf;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLottoMgr* CLottoMgr::m_pClass = NULL;
CLottoMgr::CLottoMgr()
{
Clear();
m_pClass = this;
m_nMaxLottoCount = 0;
this->m_nCrruntPage = 0;
this->m_nTotalLottoCount = 0;
this->m_nTotalPage = 0;
}
CLottoMgr::~CLottoMgr()
{
m_pClass = NULL;
}
void CLottoMgr::Generate6Number()
{
for(int i = 0;i < m_nMaxLottoCount;i++)
{
m_anNumbers[i] = CreateOneNumber();
}
m_nInsertCount = m_nMaxLottoCount;
Sort(m_anNumbers,m_nMaxLottoCount);
}
int CLottoMgr::GetMinNumber(int aNumbers[], int size)
{
int nMin = 46;
for(int i = 0;i < size;i++)
{
nMin = __min(aNumbers[i],nMin);
}
return nMin;
}
int CLottoMgr::CreateOneNumber()
{
int nNumber = 0;
while(1)
{
nNumber = RandomNumber();
if(!IsMember(nNumber))break;
}
return nNumber;
}
int CLottoMgr::RandomNumber()
{
int nNumber = rand()%MAXIMUM_LOTTO_NUM + 1;
return nNumber;
}
bool CLottoMgr::IsMember(int nNumber)
{
for(int i = 0;i < m_nMaxLottoCount;i++)
{
if(m_anNumbers[i] == nNumber) return true;
}
return false;
}
void CLottoMgr::Sort(int aNumbers[], int size)
{
if(size > 0)
{
int nMin = this->GetMinNumber(aNumbers,size);
for(int i = 0;i < size;i++)
{
if(nMin == aNumbers[i]) break;
}
int nTemp = aNumbers[i];
aNumbers[i] = aNumbers[0];
aNumbers[0] = nTemp;
Sort(aNumbers + 1,size - 1);
}
}
int CLottoMgr::InsertNumber(int nLottoNumber)
{
if(!IsMember(nLottoNumber))
{
if(m_nMaxLottoCount <= m_nInsertCount)return 1;
m_anNumbers[m_nInsertCount] = nLottoNumber;
m_nInsertCount++;
Sort(m_anNumbers,m_nInsertCount);
}
else
{
if(m_nMaxLottoCount <= m_nInsertCount)return 1;
return 2;
}
return 0;
}
bool CLottoMgr::IsFullNumber()
{
return (m_nInsertCount >= m_nMaxLottoCount);
}
void CLottoMgr::Clear()
{
memset(m_anNumbers,0,sizeof(int) * 10);
memset(m_anWinNumbers,0,sizeof(int) * 10);
memset(m_anBuyLotto,0,sizeof(int) * 10 * 5);
m_nInsertCount = 0;
}
int CLottoMgr::GetCurCount()
{
return m_nInsertCount;
}
void CLottoMgr::LottoMenuTextDisplay(int nMenuNum)
{
if(nMenuNum == MN_LOTTO_MENU && SMenu[MN_LOTTO_MENU].bActive )
{
int x = 330;
const int y = 320;
int nGab = 40;
switch(m_nMaxLottoCount)
{
case 3:
break;
case 4:
x = 330;nGab = 40;
break;
case 5:
x = 310;nGab = 40;
break;
case 6:
x = 300;nGab = 35;
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
}
Hcolor( FONT_COLOR_NAME );
for(int i = 0;i < m_nMaxLottoCount;i++)
{
if(m_anNumbers[i])
Hprint2(x,y,g_DestBackBuf,"%d",m_anNumbers[i]);
x += nGab;
}
}
else if(WinnerMenuTextDisplay(nMenuNum))
{
}
else
{
}
}
void CLottoMgr::SetWinNumbers(int *anNumbers, int nNumCount)
{
if(nNumCount != m_nMaxLottoCount)return;
memcpy(m_anWinNumbers,anNumbers,sizeof(int)*m_nMaxLottoCount);
}
bool CLottoMgr::WinnerMenuTextDisplay(int nMenuNum)
{
if(nMenuNum == MN_WINNER_MENU && SMenu[MN_WINNER_MENU].bActive )
{
int x = 238;
int y = 155;//164;
int nGabX = 40;
int nGabY = 20;
Hcolor( FONT_COLOR_NAME );
Hprint2(x,y,g_DestBackBuf,lan->OutputMessage(4,96));y+= 30;//14;
if(m_anWinNumbers[0])
{
int SaveX = x;
Hcolor( FONT_COLOR_BLIGHT_ORANGE );
for(int i = 0;i < 10;i++)
{
if(m_anWinNumbers[i])
{
Hprint2(SaveX,y,g_DestBackBuf,"%d",m_anWinNumbers[i]);
}
else break;
SaveX += 25;
}
}
else
{
Hcolor( FONT_COLOR_BLIGHT_VIOLET );
Hprint2(x,y,g_DestBackBuf,lan->OutputMessage(4,98));//酒流 眠梅捞 登瘤 臼疽促.
}
y+= 30;//16;
Hcolor( FONT_COLOR_NAME ); //<唱狼 锅龋> 免仿.
Hprint2(x,y,g_DestBackBuf,lan->OutputMessage(4,97));
Hcolor( FONT_COLOR_NUMBER );
Hprint2(x+130,y+170,g_DestBackBuf,"( %d / %d )",this->m_nCrruntPage,this->m_nTotalPage);//其捞瘤免仿.
y+= 28;
for(int i = 0;i < 5;i++)
{
if(this->m_anBuyLotto[i][0])
{
int saveX = x + 5;
for(int k = 0;k < m_nMaxLottoCount;k++)
{
Hprint2(saveX,y,g_DestBackBuf,"%d",m_anBuyLotto[i][k]);
saveX += 30;
}
y+= 19;
}
else break;
}
return true;
}
return false;
}
void CLottoMgr::SendOpenWinnerMenu()
{
// 031110 YGI
#ifdef USA_LOCALIZING_
return ;
#endif
t_packet p;
p.h.header.type = CMD_OPEN_WINNER_MENU;
p.h.header.size = 0;
#ifndef HONGKONG_LOCALIZING_ //<soto-HK030929 过伏 巩力肺 菩摹 楷扁.
::QueuePacket(&p,1);
#endif//>soto-HK030929
// ::AddCurrentStatusMessage(FONT_COLOR_WHITE,lan->OutputMessage(4,82));
}
void CLottoMgr::RecvOpenWinnerMenu(t_WINNER_MENU *pOpenMsg)
{
// if(pOpenMsg->nViewCount == 0)return;//钎矫且霸 绝促.
m_nMaxLottoCount = pOpenMsg->nMaxLottoCount;
memset(m_anWinNumbers,0,sizeof(int)*10);
if(pOpenMsg->anWinNumbers[0])
{
memcpy(m_anWinNumbers,pOpenMsg->anWinNumbers,sizeof(int)*10);
}
m_nViewLottoCount = pOpenMsg->nViewCount;
memset(m_anBuyLotto,0,sizeof(int) * 10 * 5);
for(int i = 0;i < pOpenMsg->nViewCount;i++)
{
for(int j = 0;j < m_nMaxLottoCount;j++)
{
m_anBuyLotto[i][j] = pOpenMsg->anLottoNumber[i][j];
}
}
if(pOpenMsg->nViewCount == 0)
{
this->m_nCrruntPage = 0;
this->m_nTotalLottoCount = 0;
this->m_nTotalPage = 0;
}
else
{
this->m_nCrruntPage = 1;
this->m_nTotalLottoCount = pOpenMsg->nTotalLottoCount;
this->m_nTotalPage = this->CalPageCount(m_nTotalLottoCount);
}
CallSmallMenu(MN_WINNER_MENU);
}
bool CLottoMgr::SendBuyLotto()
{
if(m_nInsertCount < m_nMaxLottoCount)
{
::AddCurrentStatusMessage(255,0,0,lan->OutputMessage(4,85),m_nMaxLottoCount);
return false;
}
t_packet p;
p.h.header.type = CMD_LOTTO_BUY;
p.h.header.size = sizeof(t_BUY_LOTTO);
memset(&p.u.Lotto_Buy,0,sizeof(t_BUY_LOTTO));
strcpy(p.u.Lotto_Buy.strCharName,Hero->name);
memcpy(&p.u.Lotto_Buy.anLottoNumber,m_anNumbers,sizeof(int) * 10);
QueuePacket(&p,1);
return true;
}
void CLottoMgr::RecvBuyLotto(t_BUY_LOTTO *pBuyLotto)
{
if(pBuyLotto->anLottoNumber[0] <= 0)
{
if(pBuyLotto->anLottoNumber[0] == 0)//捣捞 葛磊扼促.
{
::AddCurrentStatusMessage(255,0,0,lan->OutputMessage(4,94));
}
else if(pBuyLotto->anLottoNumber[0] == -1)//荤绰 扁埃捞 酒聪促.
{
::AddCurrentStatusMessage(255,0,0,lan->OutputMessage(4,89));
}
else if(pBuyLotto->anLottoNumber[0] == -2)//混荐 乐绰 父怒 促或促.
{
::AddCurrentStatusMessage(255,0,0,lan->OutputMessage(4,93));
}
else if(pBuyLotto->anLottoNumber[0] == -3)//吝汗 锅龋啊 乐促.
{
::AddCurrentStatusMessage(255,0,0,lan->OutputMessage(4,90));
}
}
else //或促.
{
char* pMsg = NULL;
#ifdef KOREA_LOCALIZING_
pMsg = "Crit";
#else
pMsg = "Point";
#endif
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,95),pBuyLotto->m_nLottoPay,pMsg);//农复捞 家厚等促.
++m_nTotalLottoCount;
this->m_nTotalPage = this->CalPageCount(m_nTotalLottoCount);
}
}
void CLottoMgr::SendCheckWinner()
{
t_packet p;
p.h.header.type = CMD_WINNER_CHECK;
p.h.header.size = 0;
QueuePacket(&p,1);
}
void CLottoMgr::RecvCheckWinner(t_CHECK_WINNER *pCheckWinner)
{
if(pCheckWinner->nWinItemCount > 0)//酒捞袍 瘤鞭.
{
for(int i = 0;i < 5;++i)
{
//kr_lan荐沥 且巴."%俺狼 寸梅酒捞袍捞 寸脚狼 篮青俊 焊包 登菌嚼聪促."
if(pCheckWinner->anWinItemsCount[i])
{
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,88),i+1,i+1,pCheckWinner->anWinItemsCount[i]);
}
}
}
else if(pCheckWinner->nWinItemCount == 0)//参.
{
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,87));
}
else if(pCheckWinner->nWinItemCount == -1)//傍埃 何练.
{
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,86));//::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,86),pCheckWinner->anWinNumbers[0]);//kr_lan荐沥 且巴."寸脚狼 篮青俊 %俺狼 后傍埃捞 鞘夸钦聪促."
}
else if(pCheckWinner->nWinItemCount == -3)//眠梅 登瘤 臼疽促.
{
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,98));
}
//<! BBD 040126 穿焙啊 盲欧吝捞促
else if(pCheckWinner->nWinItemCount == -10)
{
::AddCurrentStatusMessage(0,255,255,lan->OutputMessage(4,101));
}
//> BBD 040126 穿焙啊 盲欧吝捞促
}
int* CLottoMgr::GetCurLottoNumbers()
{
return m_anNumbers;
}
void CLottoMgr::ClearCurLottoNumbers()
{
memset(m_anNumbers,0,sizeof(int) * 10);
m_nInsertCount = 0;
}
void CLottoMgr::SendOpenLottoMenu()
{
// 031110 YGI
#ifdef USA_LOCALIZING_
return ;
#endif
#ifndef HONGKONG_LOCALIZING_
{ //< CSD-TW-030625 //<soto-HK030929 过伏巩力肺 菩摹 楷扁
t_packet p;
p.h.header.type = CMD_OPEN_LOTTOMENU;
p.h.header.size = 0;
::QueuePacket(&p,1); //soto-030611 变鞭荐沥
} //> CSD-TW-030625 //>soto-HK030929
#endif
}
void CLottoMgr::RecvOpenLottoMenu(t_OPEN_LOTTO_MENU *pOpenLotto)
{
this->m_nMaxLottoCount = pOpenLotto->nMaxNumberCount;
CallSmallMenu(MN_LOTTO_MENU);
}
void CLottoMgr::SendLottoViewSeek(bool bNext)
{
int nPage = this->m_nCrruntPage;
t_packet p;
p.h.header.type = CMD_LOTTO_SEEK;
p.h.header.size = sizeof(t_LOTTOPAPER_SEEK);
memset(&p.u.Lotto_Seek,0,sizeof(t_LOTTOPAPER_SEEK));
if(bNext)
{
nPage++;
if( nPage >m_nTotalPage )
{
return;
}
}
else
{
nPage--;
if(nPage < 1) return;
}
p.u.Lotto_Seek.nPage = nPage;
::QueuePacket(&p,1);
}
int CLottoMgr::GetTotalLottoCount()
{
return this->m_nTotalLottoCount;
}
int CLottoMgr::GetCurrentPage()
{
return this->m_nCrruntPage;
}
#define ONEPAGE_MAX 5
int CLottoMgr::CalPageCount(int nTotalLottoCount)
{
int nTotalPage = 0;
if(nTotalLottoCount <= 0)
{
nTotalPage = 0;
}
else
{
nTotalPage = nTotalLottoCount/ONEPAGE_MAX;
nTotalPage += (nTotalLottoCount%ONEPAGE_MAX)?1:0;
}
return nTotalPage;
}
void CLottoMgr::RecvLottoSeek(t_LOTTOPAPER_SEEK* pSeek)
{
if(pSeek->nPage <= 0 || pSeek->nViewCount <= 0)return;
memset(m_anBuyLotto,0,sizeof(int) * 10 * 5);
for(int i = 0;i < pSeek->nViewCount;i++)
{
for(int j = 0;j < m_nMaxLottoCount;j++)
{
m_anBuyLotto[i][j] = pSeek->anLottoNumber[i][j];
}
}
this->m_nCrruntPage = pSeek->nPage;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -