亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? brewgame.cpp

?? 象棋框架
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*===========================================================================
FILE: BrewGame.c
===========================================================================*/
#include "BrewGame.h"
#include "BrewHelpAndIntro.h"

CBrewGame::CBrewGame(){
	UINT16 x,y;
	m_nCurrentGameId = MKND_CHESS;
	m_nGameRunFlag = FALSE;
	frame = NULL;
	m_pIShell = NULL;
	//  m_nGameState = GAME_INIT;
	m_nCurrentTableId = 0;
	m_nCurrentSeatId = 0;
	m_pIGameCanvas = CreateGameCanvas();
	if (m_pIGameCanvas != NULL)
		m_pIGameCanvas->setFrame(this);
	m_pUList = NULL;
	m_nUCount = 0;
	////////////////////////////////
	m_bInitData=FALSE;
	m_bGameStart=FALSE;
	m_bShowMenuOnly=TRUE;
	m_bNextRound=FALSE;
	m_pMainMenuCtl=NULL;   
	m_pMenu=NULL;
    m_pRiver=NULL;
	m_pHand=NULL;
	m_pGeneral=NULL;//7-16
	m_pChatMenu=NULL;
	m_pDlg=NULL;
	m_pHelp=NULL;
	m_pApplyResult[0]='\0';
	m_pApplyResult[1]='\0';
	m_ApplyInd[0]='\0';
	m_ApplyInd[1]='\0';
    m_bShowGeneral=FALSE;
	m_time=0;
	m_clock=0;
	m_bMsgResponse=FALSE;
	m_bProcessedTIMEIND=FALSE;
	m_bShowClock=FALSE;
	for(x=0;x<9;x++)
		for(y=0;y<10;y++)
			m_cChessVal[x][y]=0;
	m_cSelectedChess=0;
	m_cEndChess=0;
	m_setupCnt=0;	
	m_pChess=NULL;	
	m_pImage=NULL;
	m_bChessSelected=FALSE;
	m_bShowRect=FALSE;
	m_bMyturn=FALSE;
	m_eMove=ENONE;	
	m_bShowOppRect=FALSE;
	m_pIMWriter=NULL;
	m_pBoard=NULL;
	m_pLastLayout=NULL;	
	MEMSET(m_psIDName,'\0',sizeof(m_psTypeName));
	MEMSET(m_psTypeName,'\0',sizeof(m_psTypeName));
	MEMSET(m_psLayout,'\0',sizeof(m_psLayout));
	MEMSET(m_ChessMapField,'\0',sizeof(m_ChessMapField));
	m_bChessCanMove=FALSE;//7-19改為false,因為會在悔棋等動作時出現上一次的框
    m_bMainMenuCtl=FALSE;
	m_bMainMenu=FALSE;
	m_bChatMenu=FALSE;
	m_bHelpView=FALSE;
	m_bYouBack=FALSE;
}

void CBrewGame::freeData(){
	freeMyData();
  m_pIShell = NULL;

  if (m_pIGameCanvas != NULL){
	m_pIGameCanvas->Release();
	m_pIGameCanvas = NULL;
  }
  clearUserList();
}

void CBrewGame::clearUserList(){
  struct UserItemStruct *uItem;
  UINT16 i;

  for (i = 0; i < m_nUCount; i ++){
    if (m_pUList == NULL)
	  break;
	uItem = m_pUList;
	m_pUList = m_pUList->userNext;
	FREE(uItem);
  }
  m_nUCount = 0;
}

CBrewGame::~CBrewGame(){
  freeData();
}

void CBrewGame::setGameFrame(IBrewGameFrame *f){
  frame = f;
  if (frame != NULL){
    m_pIShell = frame->getCurrentShell();
	m_pIDi = frame->getDeviceInfo();
  }
}

UINT16 CBrewGame::getCurrentGameId(){
  return m_nCurrentGameId;
}

void CBrewGame::onUserInfo(UINT8 ret, UINT16 num, struct UserItemStruct *uItem){
	if (m_nGameRunFlag == FALSE)
			return;
  UINT16 i;
  UINT16 j;
  struct UserItemStruct *uFromItem;
  struct UserItemStruct *uToItem;
  struct UserItemStruct *uLastItem;

  uLastItem = NULL;
  uFromItem = uItem;
  for (i = 0; i < num; i ++){
	  if (uFromItem == NULL)
		  break;
	  uToItem = m_pUList;
	  uLastItem = NULL;
	  for (j = 0; j < m_nUCount; j ++){
		  if (uToItem == NULL)
			  break;
		  if ((uToItem->userItem.userNameLength == uItem->userItem.userNameLength)
			  && (MEMCMP(uToItem->userItem.userName, uItem->userItem.userName, uItem->userItem.userNameLength) == 0))
			  break;
		  uLastItem = uToItem;
		  uToItem = uToItem->userNext;
	  }
	  if (uToItem == NULL){
		  uToItem = (struct UserItemStruct *)MALLOC(sizeof(struct UserItemStruct));
		  if (uToItem == NULL)
			  break;
		  m_nUCount ++;
		  if (uLastItem == NULL){
			  uToItem->userNext = NULL;
			  m_pUList = uToItem;
		  }else{
			  uToItem->userNext = uLastItem->userNext;
			  uLastItem->userNext = uToItem;
		  }
	  }
	  MEMCPY(&(uToItem->userItem), &(uFromItem->userItem), sizeof(struct UserInfoStruct));
	  ProcessUserInfo(&uToItem->userItem);
	  uFromItem = uFromItem->userNext;
  }
}

void CBrewGame::onInviteUser(UINT16 num, struct InviteItemStruct *inviteItem){
}

void CBrewGame::onChat(UINT16 num, struct ChatItemStruct *chatItem){
	AECHAR* szMsg=NULL;
	int i,j,k;	
	for(k=0;k<num;k++){	
		i=0;j=0;
		while(chatItem[k].chatItem.info[i]!=0){
			if(szMsg==NULL){
				szMsg=(AECHAR*)MALLOC(chatItem[k].chatItem.infoLength+2);
				MEMSET(szMsg,'\0',chatItem[k].chatItem.infoLength+2);
			}
			szMsg[j]=*(UINT16*)&chatItem[k].chatItem.info[i];
			szMsg[j]=NTOHS(szMsg[j]);
			i+=2;
			j++;
		}
		szMsg[j]='\0';	
		frame->postMessage(szMsg,0,MESSAGE_WARNING_COLOR,5000,MESSAGE_TEXT_CENTER);
		if(szMsg)
			FREE(szMsg);		
		szMsg=NULL;
	}
	return;
}

void CBrewGame::onDisconnectGameServer(UINT8 retCode){
	if(m_nGameRunFlag == FALSE)
		return;
	AECHAR* pszMsg=NULL;
	if((m_nGameState==GAME_STATE_SELSTART)||(m_nGameState==GAME_STATE_WAIT)||(m_nGameState==GAME_STATE_ROUNDOVER)||(m_nGameState==GAME_STATE_NEXTROUND)){
		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;
	}
	UINT16 hintType;
	if(m_bMyturn)
		hintType=HINT_TOP;
	else
		hintType=HINT_BOTTOM;
	pszMsg=(AECHAR*)MALLOC(40);
	MEMSET(pszMsg,'\0',40);
	ISHELL_LoadResString(m_pIShell,GAMEVV_RES_FILE,IDC_MYDISCONNECT,pszMsg,20);
	frame->showHint(pszMsg,0,hintType);
	clearUserList();
	m_bShowClock=FALSE;
	((CBrewGameCanvas*)m_pIGameCanvas)->m_bShowHand=FALSE;
	FREE(pszMsg);
	pszMsg=NULL;
}

void CBrewGame::onStart(){
}

void CBrewGame::onStop(){
  freeData();
}

void CBrewGame::onSuspend(){
	if((m_pMainMenuCtl!=NULL)){
		m_bMainMenuCtl=IMENUCTL_IsActive(m_pMainMenuCtl);
		if(m_bMainMenuCtl)
			IMENUCTL_SetActive(m_pMainMenuCtl,FALSE);
	}
	if(m_pMenu!=NULL){
		m_bMainMenu=IMENUCTL_IsActive(m_pMenu);
		if(m_bMainMenu)
			IMENUCTL_SetActive(m_pMenu,FALSE);
	}
	if(m_pChatMenu!=NULL){
		m_bChatMenu=IMENUCTL_IsActive(m_pChatMenu);
		if(m_bChatMenu)
			IMENUCTL_SetActive(m_pChatMenu,FALSE);
	}
	
	return;
}

void CBrewGame::onResume(){
	if((m_pMainMenuCtl!=NULL)&&m_bMainMenuCtl)
		IMENUCTL_SetActive(m_pMainMenuCtl,TRUE);	
	if((m_pMenu!=NULL)&&m_bMainMenu)		
		IMENUCTL_SetActive(m_pMenu,TRUE);	
	if((m_pChatMenu!=NULL)&&m_bChatMenu)		
		IMENUCTL_SetActive(m_pChatMenu,TRUE);	
	
	return;
}

void CBrewGame::onPlay(){
	if (m_nGameRunFlag == FALSE)
		return;
	UINT32 nowTime;
	switch (m_nGameState){
	case GAME_STATE_NONE: 						
		break;
	case GAME_STATE_SELSTART://舉手
		m_bShowMenuOnly=TRUE;
		break;
	case GAME_STATE_WAIT:	
		break;
	case GAME_STATE_PLAY:
		m_bShowMenuOnly=FALSE;
		m_bMyturn=CheckWhoTurn();//7-14為了顯示下過棋的框而調用	
		if(m_bShowGeneral){//7-16
			nowTime=ISHELL_GetUpTimeMS(m_pIShell);
			if(((nowTime-m_time)>=2000))//將字顯示延遲時間到達1秒后就不再顯示
				m_bShowGeneral=FALSE;
		}
		break;
	case GAME_STATE_CHAT:
		break;
	case GAME_STATE_MENU:	
		break;
	case GAME_STATE_ROUNDOVER:
		break;
	case GAME_STATE_NEXTROUND:
		break;
		
	default:
		break;
	}
}

void CBrewGame::onYouBack(UINT8 roomId, UINT8 tableId, UINT8 seatId){
//	m_nCurrentTableId=tableId;
//	m_nCurrentSeatId=seatId;
	m_bShowClock=TRUE;
	m_bYouBack=TRUE;
	m_nGameRunFlag=TRUE;
	if(m_bInitData==FALSE){
		m_bInitData=InitData();
		if((m_sChessState.m_turn&0xF0)==1){
			if(m_nCurrentSeatId==1)
				m_cMycolor=BLACK;
			else
				m_cMycolor=RED;
		}else {
			if(m_nCurrentSeatId==1)
				m_cMycolor=RED;
			else
				m_cMycolor=BLACK;
		}
	}
	m_nGameState=GAME_STATE_PLAY;
}
void CBrewGame::ProcessReConnect()
{	
	MEMSET(m_psLayout,'\0',sizeof(m_psLayout));					
	MEMCPY(m_psLayout,m_ChessMapField,sizeof(m_ChessMapField));
	SetOrigin(m_cMycolor);//實時更新棋譜
	m_setupCnt=(m_sChessState.m_stateID[0]<<8)+(m_sChessState.m_stateID[1]&255);
	m_bMyturn=CheckWhoTurn();
	if(m_bMyturn){
		m_bShowClock=TRUE;
		m_clock=ISHELL_GetUpTimeMS(m_pIShell);
	}
	m_bChessCanMove=FALSE;
	m_bShowOppRect=FALSE;
	m_cSelectedChess=0;
	m_cEndChess=0;	
	m_bChessSelected=FALSE;
	m_bShowRect=FALSE;
}
void CBrewGame::onPackage(IMessageReader *mReader){
	INT8 i=0;
	INT16 num;
	if(m_nGameRunFlag ==FALSE)
		return;
	switch (mReader->getModuleKind()){
	case MKND_CHESS:
		switch (mReader->getMessageID()){		
        case MFC_M_IND://棋譜信息
			ProcessMFC_M_INDmsg(mReader);
			switch(m_nGameState){
			case GAME_STATE_NONE:								
				SetOrigin(m_cMycolor);
				if(m_bInitData){
					m_nGameState = GAME_STATE_SELSTART;
					ShowIntroduce();
				}
				break;
			case GAME_STATE_ROUNDOVER:
				gameReset();//新的一局開始7-18
				SetOrigin(m_cMycolor);
				break;
			default:
				break;
			}
			break;
		case MFC_TIME_IND://局況指示
			ProcessMFC_TIME_INDmsg(mReader);
			i=(INT8)(m_sChessState.m_ChessState&0x0F);
			switch(i){
			case 0:
				switch(m_nGameState){
				case GAME_STATE_WAIT:
				case GAME_STATE_MAINMENU:
				case GAME_STATE_MENU:
				case GAME_STATE_HELP:
				case GAME_STATE_PLAYERINFO:
					ProcessSelStart();
					break;
				}				
				break;
			case 1://走子結果
				ProcessGoResult();
				break;
			case 2://悔棋結果
				ProcessRegret();//7-16
				break;
			case 3://重聯結果
				ProcessReConnect();
				break;
			case 4://雙方交換棋子
				ProcessChange();
				break;
			case 5://將軍
				m_bShowGeneral=TRUE;
				m_time=ISHELL_GetUpTimeMS(m_pIShell);//為了在自己這里畫出將軍
				ProcessGoResult();
				break;
			}
			if(i!=0){				
				num=(m_sChessState.m_stateID[0]<<8)+(m_sChessState.m_stateID[1]&255);
				if((num-m_setupCnt)==1)
					m_setupCnt=num;
				else{
					MEMSET(m_psLayout,'\0',sizeof(m_psLayout));					
					MEMCPY(m_psLayout,m_ChessMapField,sizeof(m_ChessMapField));
					SetOrigin(m_cMycolor);//實時更新棋譜
					m_setupCnt=num;
				}
			}
			break;
		case MFC_ROUNDEND_IND://棋局結束指示
			ProcessMFC_ROUNDEND_INDmsg(mReader);
			m_cOldColor=m_cMycolor;
			m_nGameState = GAME_STATE_ROUNDOVER;
			showMsg(m_nGameState,0,0,0,0,0);
			break;
		case MFC_CLAIM_IND://請求
			ProcessMFC_CLAIM_INDmsg(mReader);
			break;
		case MFC_ACTION_IND://走棋結果
			ProcessMFC_ACTION_INDmsg(mReader);
			break;
		case MFC_CLAIM_REQ://求和、悔棋、交換的指示
			ProcessMFC_CLAIM_REQmsg(mReader);
		default:
			break;
		}	
		break;
		default:
			break;
	}
	
}

void CBrewGame::onEvent(AEEEvent eCode, UINT16 wParam, UINT32 dwParam){
	if (frame == NULL)
		return;
//	struct UserItemStruct *userItem=NULL;
	switch (eCode){
    case EVT_COMMAND:
		if (m_nGameRunFlag == FALSE)
			break;
		///////////////////////////////////////////////
		switch (m_nGameState){ 
		case GAME_STATE_PLAY:		    	
		case GAME_STATE_GIVEUP:
		case GAME_STATE_SELSTART:			
        case GAME_STATE_WAIT:
		case GAME_STATE_CHANGE:
		case GAME_STATE_REGRET:
		case GAME_STATE_COMPROMISE:
		case GAME_STATE_ROUNDOVER:
		case GAME_STATE_NEXTROUND:
			ProcessMyDecide(m_nGameState,wParam,dwParam);
			break;
		case GAME_STATE_CHAT:
			DispatchChatMsg(wParam);
			m_nGameState=m_nPreGameState;
				break;
		case GAME_STATE_MAINMENU://主菜單界面			
			switch (wParam){//菜單選項
			case IDC_MENUCHAT:
				m_nGameState = GAME_STATE_CHAT;//聊天
				ProcessChat();
				break;
			case IDC_MENUCHANGE:
				m_nGameState = GAME_STATE_CHANGE;//交換
				showMsg(m_nGameState,2,2,MESSAGE_WARNING_COLOR,0,MESSAGE_YES|MESSAGE_NO|MESSAGE_TEXT_CENTER);	
				break;
			case IDC_MENUGIVEUP://放棄
				m_nGameState = GAME_STATE_GIVEUP;
				showMsg(GAME_STATE_GIVEUP,0,0,MESSAGE_WARNING_COLOR,10000,MESSAGE_YES|MESSAGE_NO|MESSAGE_TEXT_CENTER);
				break;
			case IDC_MENUREGRET:
				m_nGameState = GAME_STATE_REGRET;//悔棋
				showMsg(m_nGameState,2,2,MESSAGE_WARNING_COLOR,0,MESSAGE_YES|MESSAGE_NO|MESSAGE_TEXT_CENTER);					
				break;
			case IDC_MENUCOMPROMISE:
				m_nGameState = GAME_STATE_COMPROMISE;//求和
				showMsg(m_nGameState,2,2,MESSAGE_WARNING_COLOR,0,MESSAGE_YES|MESSAGE_NO|MESSAGE_TEXT_CENTER);	
				break;
			case IDC_MAINMENU:
				m_nGameState = GAME_STATE_MENU;//菜單
				((CBrewGameCanvas*)m_pIGameCanvas)->BuildMenu();
				break;				
			default:
				break;
			}		
			break;				

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合一区二区三区| 亚洲欧美视频在线观看视频| 亚洲欧美日韩久久精品| 懂色av一区二区三区蜜臀| 欧美精品一区二区三区蜜臀 | 色综合天天做天天爱| 国产精品免费视频网站| 波多野结衣亚洲一区| 国产欧美日韩亚州综合| 国产一区二区美女诱惑| 久久免费国产精品| 国产精品66部| 国产精品久久久久久久久久久免费看| 粉嫩高潮美女一区二区三区| 国产欧美日韩三区| 色一情一乱一乱一91av| 一区二区激情小说| 欧美sm极限捆绑bd| 成人91在线观看| 一区二区视频在线| 亚洲人成影院在线观看| 精品88久久久久88久久久| 久久精品视频网| 91视频免费观看| 午夜电影网亚洲视频| 91老司机福利 在线| 精品国产一区久久| 日本在线不卡一区| 欧美日韩国产经典色站一区二区三区| 日韩理论片在线| 91精品啪在线观看国产60岁| 久久久电影一区二区三区| 婷婷开心久久网| 99久久国产综合精品色伊| 久久伊人蜜桃av一区二区| 亚洲欧洲日韩女同| 国产三级精品三级在线专区| 国产精品123区| 欧美男人的天堂一二区| 中文字幕一区二区三区色视频| 国产成人在线电影| 寂寞少妇一区二区三区| 国产欧美一区二区三区网站| 欧美亚洲高清一区| 成人免费在线播放视频| 51精品视频一区二区三区| 激情欧美日韩一区二区| 亚洲三级免费电影| 欧美日韩激情一区二区| 91精彩视频在线| 国产综合色视频| 日本麻豆一区二区三区视频| 亚洲一区二区成人在线观看| 国产日韩欧美精品电影三级在线 | 欧美激情在线一区二区三区| 在线电影国产精品| 99久久国产综合精品色伊| www.亚洲精品| 成人深夜福利app| 国产不卡在线视频| 国产又黄又大久久| 国产一区 二区 三区一级| 日韩中文字幕不卡| 极品少妇一区二区| 99久久久精品| 在线免费观看视频一区| 欧美在线视频日韩| 欧美日韩不卡在线| 精品国产凹凸成av人网站| 色菇凉天天综合网| 国产成人精品亚洲日本在线桃色| 国产一区在线观看麻豆| 不卡的av网站| 欧美一区二区三区喷汁尤物| 国产肉丝袜一区二区| 中文字幕欧美日本乱码一线二线 | 免费观看一级欧美片| 一区二区三区在线影院| 奇米精品一区二区三区四区| 国产成人综合精品三级| 色88888久久久久久影院按摩| 欧美精品免费视频| 国产精品日韩成人| 一本一道综合狠狠老| 亚洲精品免费播放| 亚洲人成亚洲人成在线观看图片| 日韩专区中文字幕一区二区| 337p亚洲精品色噜噜| 日日夜夜一区二区| 久久久三级国产网站| 国产成人午夜精品影院观看视频| 久久精品在线观看| 99热这里都是精品| 亚洲一区二区三区自拍| 日韩一区二区在线播放| 大胆欧美人体老妇| 亚洲午夜免费电影| 日韩欧美一二区| 风间由美性色一区二区三区| 亚洲综合区在线| 欧美不卡视频一区| 色香蕉成人二区免费| 久久狠狠亚洲综合| 亚洲色欲色欲www| 精品国产一区二区三区久久久蜜月| 成人国产精品免费网站| 天天综合网天天综合色| 中日韩av电影| 欧美成人精品高清在线播放| 色婷婷综合久久久中文一区二区 | 综合久久久久久| 欧美在线观看一区| 狠狠狠色丁香婷婷综合激情| 国产精品大尺度| 欧美一级一区二区| 91麻豆文化传媒在线观看| 亚洲欧洲三级电影| 欧美一区二区三区视频| 91丨porny丨国产入口| 日韩中文字幕麻豆| 中文字幕一区二区在线播放| 欧美精品1区2区| 国产精品麻豆一区二区| 欧美一区二区三区系列电影| 91蜜桃婷婷狠狠久久综合9色| 久久精品人人做人人综合| 国产原创一区二区三区| 亚洲天堂精品在线观看| 欧亚洲嫩模精品一区三区| 日韩国产在线一| 中文字幕不卡一区| 日本韩国欧美在线| 视频在线观看91| 国产精品乱码妇女bbbb| 欧美精品18+| 91亚洲精品久久久蜜桃网站| 亚洲综合色视频| 国产日韩欧美a| 欧美丰满美乳xxx高潮www| 日本不卡一区二区| **性色生活片久久毛片| 欧美一卡二卡三卡| 91捆绑美女网站| 国产乱码精品1区2区3区| 国产精品免费视频网站| 久久九九影视网| 欧美成人欧美edvon| 色综合色狠狠天天综合色| 成人精品视频一区二区三区| 免费成人小视频| 日本三级韩国三级欧美三级| 亚洲视频在线观看一区| 国产精品国产三级国产aⅴ中文| 日韩美女一区二区三区四区| 欧美日韩国产免费| 成人黄色电影在线| caoporn国产一区二区| 国产精品77777| 国产一区二区毛片| 国产一区二区0| 精品一区免费av| 国产成人综合视频| 成人av中文字幕| 97精品国产露脸对白| 99九九99九九九视频精品| eeuss鲁片一区二区三区| zzijzzij亚洲日本少妇熟睡| 91小视频免费观看| 91在线视频18| 欧美老年两性高潮| 欧美xfplay| 中文字幕永久在线不卡| 洋洋av久久久久久久一区| 日韩专区欧美专区| 免费成人在线视频观看| 日本美女视频一区二区| 国产一区日韩二区欧美三区| 成人app在线| 欧美日韩一区成人| 久久久久久久综合色一本| 亚洲免费视频中文字幕| 亚洲午夜久久久久| 国产乱子轮精品视频| 在线中文字幕一区二区| 日韩免费视频线观看| 中文字幕一区在线| 九色porny丨国产精品| 不卡的av中国片| 精品久久人人做人人爰| 亚洲精品国产无套在线观| 日本欧美久久久久免费播放网| 国产福利电影一区二区三区| 欧美三级视频在线观看| 久久久久国产精品免费免费搜索| 亚洲一区二区三区四区的| 麻豆精品精品国产自在97香蕉| 成a人片亚洲日本久久| 久久久久国产精品厨房| 日产欧产美韩系列久久99| 91福利在线看|