⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brewgame.cpp

📁 象棋框架
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				((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 + -