📄 brewgame.cpp
字号:
((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=TRUE;
}
}
else{
MEMCPY(&m_OppInfo,userInfo,sizeof(UserInfoStruct));
if(m_bMyturn)
hintType=HINT_TOP;
else
hintType=HINT_BOTTOM;
if(m_OppInfo.state==7){
ISHELL_LoadResString(m_pIShell,GAMEVV_RES_FILE,IDC_OPPDISCONNECT,szMsg,14);
frame->showHint(szMsg,60000,hintType);
m_bShowClock=FALSE;
((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=FALSE;
}
if(m_OppInfo.state==4){
m_bShowClock=TRUE;
((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=TRUE;
}
}
}
}
AECHAR* CBrewGame::getShowText(UINT16 state,AECHAR *pszMsg,INT8 help)
{
int stateNUm=22,strNum=16;
int i;
int index;
int bufSize;
UINT16 Gamestate[]={
GAME_STATE_QUITGAME ,
GAME_STATE_EXITGAME ,
GAME_STATE_SELSTART,
GAME_STATE_WAIT,
GAME_STATE_CHANGE ,
0,
0,
GAME_STATE_REGRET ,
0,
0,
GAME_STATE_COMPROMISE ,
0,
0,
GAME_STATE_GIVEUP ,
GAME_STATE_NEXTROUND,
GAME_STATE_MAINMENU,
GAME_STATE_CHAT ,
GAME_STATE_MENU ,
GAME_STATE_HELP ,
GAME_STATE_PLAYERINFO,
GAME_STATE_PLAY
};
int strID[]={
IDC_QUITGAME,
IDC_EXITGAME,
IDC_START,
IDC_MSGWAITFORSTART,
IDC_AGREECHANGE,
IDC_NOCHANGE,
IDC_CHANGE,
IDC_AGREEREGRET,
IDC_NOREGRET,
IDC_REGRET,
IDC_AGREECOMPROMISE,
IDC_NOCOMPROMISE,
IDC_COMPROMISE,
IDC_GIVEUP,
IDC_NEXTROUND,
IDC_NOTMYTURN
};
for(i=0;i<stateNUm;i++){
if(state==Gamestate[i])
break;
}
index=i;
switch(strID[i]){
case IDC_START:
bufSize=6;break;
case IDC_MSGWAITFORSTART:
bufSize=14;break;
case IDC_AGREECOMPROMISE:
case IDC_AGREECHANGE:
case IDC_AGREEREGRET:
index=i+help;
bufSize=20;
break;
case IDC_GIVEUP:
bufSize=20;
break;
case IDC_NEXTROUND:
bufSize=12;
break;
case IDC_QUITGAME:
case IDC_EXITGAME:
bufSize=20;
break;
}
if(help==3){
index=strNum-1;
bufSize=18;
}
ISHELL_LoadResString(m_pIShell,GAMEVV_RES_FILE,strID[index],pszMsg,bufSize);
return pszMsg;
}
void CBrewGame::showMsg(UINT16 state, INT8 help, UINT8 sno, UINT32 color, UINT32 time, UINT32 mode)
{
AECHAR* pszMsg=NULL;
if(state==GAME_STATE_ROUNDOVER){
ShowResult(m_pIShell);
return;
}
pszMsg=(AECHAR*)MALLOC(11*sizeof(AECHAR));
MEMSET(pszMsg,'\0',11*sizeof(AECHAR));
getShowText(state,pszMsg,help);
switch(state){
case GAME_STATE_WAIT:
frame->showHint(pszMsg,time,HINT_TOP|HINT_TEXT_SCROLL);
break;
case GAME_STATE_REGRET:
case GAME_STATE_COMPROMISE:
case GAME_STATE_CHANGE:
if(help==3){
frame->showHint(pszMsg,time,HINT_TOP);
break;
}
default:
frame->postMessage(pszMsg,sno,color,time,mode);
break;
}
FREE(pszMsg);
pszMsg=NULL;
return;
}
void CBrewGame::ProcessMyDecide(UINT16 state, UINT16 wParam, UINT32 dwParam)
{
INT8 buffer[3];
AECHAR szWaitOpp[9];
if(dwParam==8){//退出棋局
if(wParam==MESSAGE_YES){
m_nGameRunFlag = FALSE;
frame->standUp();
freeMyData();
frame->postUserEvent(HALL, SWITCH_INTO, 0);
frame->showHint(NULL,0,HINT_TOP);
frame->showHint(NULL,0,HINT_BOTTOM);
return;
}
else if(wParam==MESSAGE_CLR){
if(state==GAME_STATE_SELSTART){
ShowIntroduce();
return;
}
}
}
if(dwParam==9){//退出游戏
if(wParam==MESSAGE_YES){
m_nGameRunFlag = FALSE;
frame->quitGame();
return ;
}
}
switch(state){
case GAME_STATE_SELSTART:
if(dwParam==0){
if(wParam==MESSAGE_YES){
frame->startGame();
if((( m_sChessState.m_ChessState&0x0F)==0)&& m_bProcessedTIMEIND){
m_nGameState = GAME_STATE_PLAY;
m_bGameStart=TRUE;
frame->showHint(NULL,0,HINT_TOP);
m_bMyturn= CheckWhoTurn();
if( m_bMyturn){
m_bShowClock=TRUE;
m_clock=ISHELL_GetUpTimeMS( m_pIShell);
}
m_setupCnt=( m_sChessState.m_stateID[0]<<8)+( m_sChessState.m_stateID[1]&255);
m_bProcessedTIMEIND=FALSE;
}else{
m_nGameState = GAME_STATE_WAIT;
showMsg(m_nGameState,0,0,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_CENTER);
}
}
else{
showMsg(GAME_STATE_QUITGAME,0,8,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_CENTER|MESSAGE_YES|MESSAGE_CANCEL);
}
}
if((dwParam==8)||(dwParam==9))
if(wParam==MESSAGE_CANCEL)
ShowIntroduce();
return;
case GAME_STATE_WAIT:
if((dwParam==8)||(dwParam==9))
if(wParam==MESSAGE_CANCEL)
showMsg(m_nGameState,0,0,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_CENTER);
break;
case GAME_STATE_GIVEUP:
if(dwParam==0)
if(wParam==MESSAGE_YES)
sendProINT8(MKND_CHESS,MFC_GIVEUP_REQ,0,0,NULL,0);
break;
case GAME_STATE_REGRET:
case GAME_STATE_CHANGE:
case GAME_STATE_COMPROMISE:
if(state==GAME_STATE_COMPROMISE)
buffer[0]=0;
if(state==GAME_STATE_REGRET)
buffer[0]=1;
if(state==GAME_STATE_CHANGE)
buffer[0]=2;
if(dwParam==0){
if(wParam==MESSAGE_YES){
buffer[1]=0;
buffer[2]='\0';
}else{
buffer[1]=1;
buffer[2]='\0';
}
sendProINT8(MKND_CHESS,MFC_CLAIM_REQ,0,0,buffer,2);
m_nGameState =m_nPreGameState;
break;
}
if(dwParam==6){
((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=TRUE;
frame->showHint(NULL,0,HINT_BOTTOM);
m_nGameState =m_nPreGameState;
break;
}
if(m_bMyturn&&(dwParam==2)){
if(wParam==MESSAGE_YES){
buffer[1]='\0';
((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=FALSE;
ISHELL_LoadResString(m_pIShell,GAMEVV_RES_FILE,IDC_PLEASEWAIT,szWaitOpp,18);
frame->showHint(szWaitOpp,0,HINT_BOTTOM);
sendProINT8(MKND_CHESS,MFC_CLAIM_REQ,0,0,buffer,1);
m_nGameState =m_nPreGameState;
break;
}
m_nGameState =m_nPreGameState;
break;
}
showMsg(m_nGameState,3,0,MESSAGE_WARNING_COLOR,3000,MESSAGE_TEXT_CENTER);
m_nGameState =m_nPreGameState;
break;
case GAME_STATE_ROUNDOVER:
m_nGameState=GAME_STATE_NEXTROUND;
showMsg(m_nGameState,0,0,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_CENTER|MESSAGE_YES|MESSAGE_CANCEL);
break;
case GAME_STATE_NEXTROUND:
if(dwParam==0){
if(wParam==MESSAGE_YES){
m_nGameState =GAME_STATE_SELSTART;
ShowIntroduce();
}else{
m_nGameRunFlag = FALSE;
frame->standUp();
freeMyData();
frame->postUserEvent(HALL, SWITCH_INTO, 0);
frame->showHint(NULL,0,HINT_TOP);
frame->showHint(NULL,0,HINT_BOTTOM);
}
}
break;
}
return;
}
void CBrewGame::setProHead(UINT16 gameID, UINT16 msgID, INT8 ver, INT8 crypt)
{
m_pIMWriter->reset();
m_pIMWriter->setModuleKind(gameID);
m_pIMWriter->setMessageID(msgID);
m_pIMWriter->setVersion(ver);
m_pIMWriter->setCrypt(crypt);
return;
}
void CBrewGame::sendProINT8(UINT16 gameID, UINT16 msgID, INT8 ver, INT8 crypt,INT8 *buffer,int msgNum)
{
int i;
setProHead(gameID,msgID,ver,crypt);
for(i=0;i<msgNum;i++){
m_pIMWriter->setInt8(i,buffer[i]);
}
frame->sendPackage( m_pIMWriter);
return;
}
void CBrewGame::sendProBuf(UINT16 gameID, UINT16 msgID, INT8 ver, INT8 crypt, INT8 *buffer, int msgNum)
{
setProHead(gameID,msgID,ver,crypt);
m_pIMWriter->setBuffer(0,buffer,msgNum);
frame->sendPackage( m_pIMWriter);
}
void CBrewGame::ShowResult(IShell *pIShell)
{
AECHAR* szMsgText=NULL;
AECHAR point[10],money[10],format[4];
AECHAR Pt[4],My[5],logo[15];
int len;
frame->showHint(NULL, 0, HINT_TOP);
frame->showHint(NULL, 0, HINT_BOTTOM);
szMsgText=(AECHAR*)MALLOC(60*sizeof(AECHAR)+2);
MEMSET(szMsgText,'\0',60*sizeof(AECHAR)+2);
format[0]='%';
format[1]='+';
format[2]='d';
format[3]='\0';
if((m_sRoundOver.m_result<=8)){
if(m_cOldColor==RED){
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_CONGRATUATION, szMsgText, 20);
}else{
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_FAIL, szMsgText, 16);
}
}else if(((m_sRoundOver.m_result>=30)&&(m_sRoundOver.m_result<=38))){
if(m_cOldColor==BLACK){
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_CONGRATUATION, szMsgText, 20);
}else{
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_FAIL, szMsgText, 16);
}
}else if(((m_sRoundOver.m_result>=20)&&(m_sRoundOver.m_result<=26))){
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_COMPEACE, szMsgText, 12);
}else
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_UNNORMAL, szMsgText, 12);
if(m_cOldColor==RED){
WSPRINTF(point,20,format,m_sRoundOver.m_RedPointChange);
WSPRINTF(money,20,format,m_sRoundOver.m_RedMoneyChange);
}else{
WSPRINTF(point,20,format,m_sRoundOver.m_BlackPointChange);
WSPRINTF(money,20,format,m_sRoundOver.m_BlackMoneyChange);
}
len=WSTRLEN(szMsgText);
szMsgText[len]='\n';
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_POINT, Pt, 8);
WSTRCAT(szMsgText,Pt);
WSTRCAT(szMsgText,point);
len=WSTRLEN(szMsgText);
szMsgText[len]='\n';
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_MONEY, My,10);
WSTRCAT(szMsgText,My);
WSTRCAT(szMsgText,money);
len=WSTRLEN(szMsgText);
szMsgText[len]='\n';
ISHELL_LoadResString(pIShell, GAMEVV_RES_FILE, IDC_COMLOG, logo,30);//公司网站
WSTRCAT(szMsgText,logo);
frame->postMessage(szMsgText,0,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_LEFT|MESSAGE_YES|MESSAGE_CANCEL);
FREE(szMsgText);
szMsgText=NULL;
return;
}
void CBrewGame::ShowIntroduce()
{
int tempLen,bufSize,lenTitle,lenAttack,lenA1,lenA2,lenTarget,lenPoint1,lenPeace;
int lenPePoint;
AECHAR szText1[6],szText2[6],szTarget[6],szWin[4],szPeace[4],szPoint1[3],szPoint2[3],szPePoint1[3],szPePoint2[3],format[3];
AECHAR* pszMsg=NULL;
format[0]='%';
format[1]='d';
format[2]='\0';
lenTitle=WSTRLEN( m_psIDName);
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_REDATTACK, szText1, 10);
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_BLACKDEFEND, szText2, 10);
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_WIN, szWin, 10);
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_PEACE, szPeace, 10);
if( m_pChessMap.m_cWiner!=1)
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_TARGET1, szTarget, 12);
else
ISHELL_LoadResString( m_pIShell, GAMEVV_RES_FILE, IDC_TARGET2, szTarget, 12);
lenA1=WSTRLEN(szText1);
lenA2=WSTRLEN(szText2);
if(lenA1>lenA2){
lenAttack=lenA1;
}else{
lenAttack=lenA2;
}
lenTarget=WSTRLEN(szTarget);
WSPRINTF(szPoint1,6,format, m_pChessMap.m_cScoreRule[0]);
WSPRINTF(szPoint2,6,format, m_pChessMap.m_cScoreRule[2]);
WSPRINTF(szPePoint1,6,format, m_pChessMap.m_cScoreRule[1]);
WSPRINTF(szPePoint2,6,format, m_pChessMap.m_cScoreRule[1]);
lenPoint1=WSTRLEN(szPoint1);
lenPePoint=WSTRLEN(szPePoint1);
lenPeace=WSTRLEN(szPeace);
bufSize=2*(lenTitle+1)+4*(lenAttack+1)+4*(lenTarget+1)+4*(lenPoint1+1)+4*(lenPeace+1)+4*(lenPePoint+1)+78*2+2;//18个欲留空格
pszMsg=(AECHAR*)MALLOC(bufSize);
MEMSET(pszMsg,'\0',bufSize);
MEMCPY(pszMsg, m_psIDName,lenTitle*2+2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
if(m_cMycolor==RED){
WSTRCAT(pszMsg,szText1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szTarget);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szWin);
WSTRCAT(pszMsg,szPoint1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szPeace);
WSTRCAT(pszMsg,szPePoint1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szText2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szTarget);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szWin);
WSTRCAT(pszMsg,szPoint2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szPeace);
WSTRCAT(pszMsg,szPePoint2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
}
else{
WSTRCAT(pszMsg,szText2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szTarget);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szWin);
WSTRCAT(pszMsg,szPoint2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szPeace);
WSTRCAT(pszMsg,szPePoint2);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szText1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szTarget);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szWin);
WSTRCAT(pszMsg,szPoint1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
WSTRCAT(pszMsg,szPeace);
WSTRCAT(pszMsg,szPePoint1);
tempLen=WSTRLEN(pszMsg);
pszMsg[tempLen]='\n';
}
frame->postMessage(pszMsg,0,MESSAGE_INFO_COLOR,0,MESSAGE_TEXT_CENTER|MESSAGE_YES|MESSAGE_CANCEL);
FREE(pszMsg);
return;
}
void CBrewGame::Release(){
delete this;
}
IBrewGame *CreateBrewGame(){
return (IBrewGame *)new CBrewGame();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -