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

📄 brewgamecanvas.cpp

📁 象棋框架
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*===========================================================================
FILE: BrewGameCanvas.c
===========================================================================*/
#include "BrewGameCanvas.h"
#include "BrewHelpAndIntro.h"



CBrewGameCanvas::CBrewGameCanvas(){
	int i;
	frame = NULL;
	paintCounter = 0;
	m_bShowMenu=FALSE;
	m_bMainMenu=FALSE;
	m_bHaveMainMenu=FALSE;	
	m_bUp=m_bDown=m_bLeft=m_bRight=FALSE;
	m_bExit=FALSE;
	m_bClockJust=FALSE;
	m_bShowHand=TRUE;
	pHand=NULL;
	for(i=0;i<6;i++){
		pImage[i]=NULL;
	}
	for(i=0;i<14;i++){
		pChess[i]=NULL;
	}
	pGeneral=NULL;
	pRiver=NULL;
}
/*
IBITMAP_CreateCompatibleBitmap 
(
IBITMAP *po, 
IBitmap **ppIBitmap, 
uint16 w, 
uint16 h 
) 
*/
CBrewGameCanvas::~CBrewGameCanvas(){
	int i;
	if(pRiver){
		IBITMAP_Release(pRiver);
		pRiver=NULL;
	}
	for(i=0;i<6;i++){
		if(pImage[i]){			
			IBITMAP_Release(pImage[i]);
			pImage[i]=NULL;
		}
	}
	for(i=0;i<14;i++){
		if(pChess[i]){
			IBITMAP_Release(pChess[i]);
			pChess[i]=NULL;
		}
	}
	if(pHand){
		IBITMAP_Release(pHand);
		pHand=NULL;
	}
	if(pGeneral){
		IBITMAP_Release(pGeneral);
		pGeneral=NULL;
	}
}

void CBrewGameCanvas::setFrame(void *f){
	frame = f;
}

void CBrewGameCanvas::paint(IDisplay *d, IGraphics *g){
	CBrewGame *f = (CBrewGame *)frame;
	if (f == NULL)
		return;
	if (f->frame == NULL)
		return;
	if(f->m_bNextRound){//复位
		m_bShowMenu=FALSE;
		m_bMainMenu=FALSE;
		m_bHaveMainMenu=FALSE;	
		m_bUp=m_bDown=m_bLeft=m_bRight=FALSE;
		m_bExit=FALSE;
		m_bClockJust=FALSE;
		f->m_bNextRound=FALSE;
		m_bShowHand=TRUE;
		xPos=f->m_pBoard->m_joinPt[48].x;
		yPos=f->m_pBoard->m_joinPt[48].y;
		IMENUCTL_Reset(f->m_pMainMenuCtl);//清除菜单项目
		IMENUCTL_Redraw(f->m_pMainMenuCtl);
	}
//	boolean active;
	/////////////////////////////////
    switch (f->m_nGameState){
	case GAME_STATE_SELSTART:
		DrawChessBoard(d,g);
		DrawChess(d);
		xPos=f->m_pBoard->m_joinPt[48].x;
		yPos=f->m_pBoard->m_joinPt[48].y;	
		break;
	case GAME_STATE_WAIT:
	case GAME_STATE_PLAYERINFO:
		DrawChessBoard(d,g);			
		DrawChess(d);
		if(f->m_pDlg){
			f->m_pDlg->paint(d,g);
		}
	break;
	case GAME_STATE_CHANGE:
	case GAME_STATE_GIVEUP:
	case GAME_STATE_REGRET:
	case GAME_STATE_COMPROMISE:	
	case GAME_STATE_PLAY:
		DrawChessBoard(d,g);			
		DrawChess(d);
		if(m_bShowHand)
			DrawClock(d);
		if(f->m_bMyturn&&m_bShowHand){//轮到我的时候,对家不掉线,对家已经对请求有了回复出现手指
			DrawHand(d);
		}
		DrawRect(d);
		if((f->m_nGameState==GAME_STATE_PLAY)&&f->m_bShowGeneral){//7-16
			if(pGeneral==NULL){
				CreateBitmap(d,&pGeneral,f->cx,f->cy);
				IBITMAP_BltIn(pGeneral,0,0,f->cx,f->cy,f->m_pGeneral,0,0,AEE_RO_COPY); 
			}			
			IDISPLAY_BitBlt(d, f->m_GeneralPos.x,f->m_GeneralPos.y,f->cx,f->cy ,(void*)pGeneral,0,0,AEE_RO_TRANSPARENT);
		}
		m_cOldColor=f->m_cMycolor;
		break;
	case GAME_STATE_MAINMENU://主菜单界面7-20号去掉了REDRAW
		DrawChessBoard(d,g);
		DrawChess(d);
		DrawClock(d);
		IMENUCTL_Redraw(f->m_pMainMenuCtl);
		break;
	case GAME_STATE_MENU:	
		DrawChessBoard(d,g);
		DrawChess(d);
		DrawClock(d);
		IMENUCTL_Redraw(f->m_pMenu);
		break;
	case GAME_STATE_ROUNDOVER:
		DrawChessBoard(d,g);
		DrawChess(d);
		break;
	case GAME_STATE_NEXTROUND:
		DrawChessBoard(d,g);
		DrawChess(d);
		break;
	case GAME_STATE_CHAT:
		IMENUCTL_Redraw(f->m_pChatMenu);
		break;
	case GAME_STATE_HELP:
		if(f->m_pHelp != NULL){
			f->m_pHelp->paint(d,g);			
			break;
		}
		break;
	default:
		break;
	}
	
	return;
}

boolean CBrewGameCanvas::keyPressed(UINT16 code, UINT32 param){
	return FALSE;
}

boolean CBrewGameCanvas::keyReleased(UINT16 code, UINT32 param){
	return FALSE;
}

boolean CBrewGameCanvas::keyRepeated(UINT16 code, UINT32 param){
	return FALSE;
}

boolean CBrewGameCanvas::key(UINT16 code, UINT32 param){
	CBrewGame *f = (CBrewGame *)frame;	
	if (f == NULL)
		return FALSE;
	if (f->frame == NULL)
		return FALSE;
    switch (f->m_nGameState){
	case GAME_STATE_MAINMENU:
		if (IMENUCTL_HandleEvent(f->m_pMainMenuCtl, EVT_KEY, code, param) == TRUE)
			return TRUE;
		break;
	case GAME_STATE_MENU:
		if (IMENUCTL_HandleEvent(f->m_pMenu, EVT_KEY, code, param) == TRUE)
			return TRUE;
		break;
	case GAME_STATE_HELP:
		if(f->m_pHelp != NULL){
			if(f->m_pHelp->key(code,param)){			
				f->m_pHelp->Release();
				f->m_pHelp=NULL;
				f->m_nGameState=f->m_nPreGameState;
			}
			return true;
		}
		break;
	case GAME_STATE_CHAT:
		if (IMENUCTL_HandleEvent(f->m_pChatMenu, EVT_KEY, code, param) == TRUE)
			return TRUE;
		break;
	case GAME_STATE_PLAYERINFO:
		if(f->m_pDlg->key(code,param)){
			f->m_pDlg->Release();
			f->m_pDlg=NULL;
			f->m_nGameState=f->m_nPreGameState;
			return TRUE;
		}
		break;
	default:
		break;
	}
							
	switch (code){	
	case AVK_SOFT1:
		if(m_bShowHand==TRUE){
			switch (f->m_nGameState){
			case GAME_STATE_MAINMENU:					
				IMENUCTL_SetActive(f->m_pMainMenuCtl,FALSE);
				IMENUCTL_Redraw(f->m_pMainMenuCtl);
				f->m_nGameState=f->m_nPreGameState;				
				return TRUE;
			case GAME_STATE_MENU:
				IMENUCTL_SetActive(f->m_pMenu,FALSE);
				IMENUCTL_Redraw(f->m_pMenu);
				f->m_nGameState=f->m_nPreGameState;				
				return TRUE;
			case GAME_STATE_SELSTART:										
				f->m_nGameState=GAME_STATE_MENU;
				f->m_nPreGameState=GAME_STATE_SELSTART;				
				BuildMenu();
				return TRUE;
			case GAME_STATE_WAIT:					
				f->m_nGameState=GAME_STATE_MENU;
				f->m_nPreGameState=GAME_STATE_WAIT;
				BuildMenu();
				return TRUE;
			case GAME_STATE_PLAY:									
				f->m_nGameState=GAME_STATE_MAINMENU;
				f->m_nPreGameState=GAME_STATE_PLAY;
				BuildMainMenu();//7-20
				return TRUE;
			default:
				return FALSE;
			}
		}
		return FALSE;
		case AVK_UP://增加于7-9
		case AVK_2:
			if(m_bShowHand==TRUE){
				switch (f->m_nGameState){
				case GAME_STATE_PLAY:
					f->m_eMove=EUP;
					m_bUp=TRUE;
					return TRUE;
				}
			}
			return FALSE;
		case AVK_DOWN://增加于7-9
		case AVK_8:
			if(m_bShowHand==TRUE){
				switch (f->m_nGameState){
				case GAME_STATE_PLAY:
					f->m_eMove=EDOWN;
					m_bDown=TRUE;
					return TRUE;
				}
			}
			return FALSE;
		case AVK_LEFT://增加于7-9
		case AVK_4:
			if(m_bShowHand==TRUE){
				switch (f->m_nGameState){
				case GAME_STATE_PLAY:
					f->m_eMove=ELEFT;
					m_bLeft=TRUE;
					return TRUE;
				}
			}
			return FALSE;
		case AVK_RIGHT://增加于7-9
		case AVK_6:
			if(m_bShowHand==TRUE){
				switch (f->m_nGameState){
				case GAME_STATE_PLAY:
					f->m_eMove=ERIGHT;
					m_bRight=TRUE;
					return TRUE;
				}
			}
			return FALSE;
	case AVK_SELECT://7-11日晚
	case AVK_5:
		if(Process_5_SelectKey(code,param))
				return TRUE;
		return FALSE;
	case AVK_CLR:
		if(Process_CLR_Key(code,param))
			return TRUE;
		return FALSE;
	default:
		break;
	}
	
	return FALSE;
}

boolean CBrewGameCanvas::Process_CLR_Key(UINT16 code, UINT32 param){
	CBrewGame *f = (CBrewGame *)frame;
	UINT16 MsgID=0;
	switch (f->m_nGameState){//这里用来实现转变状态,按下CLS后,应该恢复到前个位置
	case GAME_STATE_NEXTROUND:
	case GAME_STATE_SELSTART://这几种情况下先询问是否退出
	case GAME_STATE_WAIT:
	case GAME_STATE_PLAY:
		f->showMsg(GAME_STATE_QUITGAME,0,8,MESSAGE_WARNING_COLOR,0,MESSAGE_TEXT_CENTER|MESSAGE_YES|MESSAGE_CANCEL);
		return TRUE;
	case GAME_STATE_MAINMENU://主菜单界面	
		IMENUCTL_SetActive(f->m_pMainMenuCtl,FALSE);
		f->m_nGameState=f->m_nPreGameState;
		return TRUE;
	case GAME_STATE_CHAT://7-26
		IMENUCTL_Release(f->m_pChatMenu);
		f->m_pChatMenu=NULL;
		f->m_nGameState=f->m_nPreGameState;
		return TRUE;	
	case GAME_STATE_MENU:
		IMENUCTL_SetActive(f->m_pMenu,FALSE);
		f->m_nGameState=f->m_nPreGameState;
		return TRUE;
	case GAME_STATE_GIVEUP:
		f->m_nGameState =f->m_nPreGameState;
		return TRUE;
	case GAME_STATE_HELP:
		f->m_nGameState=f->m_nPreGameState;
		return TRUE;
	default:
		return FALSE;
	}
	return FALSE;
}
boolean CBrewGameCanvas::Process_5_SelectKey(UINT16 code, UINT32 param){
	CBrewGame *f = (CBrewGame *)frame;
	UINT16 MsgID=0;
	switch (f->m_nGameState){
	case GAME_STATE_PLAY:
		f->CheckPos();
		return TRUE;
	case GAME_STATE_GIVEUP://认输
		MsgID=MFC_GIVEUP_REQ;
		f->m_nGameState =f->m_nPreGameState;
		f->m_pIMWriter->reset(); 
		f->m_pIMWriter->setModuleKind(MKND_CHESS); 
		f->m_pIMWriter->setMessageID(MsgID);
		f->m_pIMWriter->setVersion(0); 
		f->m_pIMWriter->setCrypt(0);
		f->frame->sendPackage(f->m_pIMWriter);
		return TRUE;		
	case GAME_STATE_HELP:
		f->m_nGameState=f->m_nPreGameState;
		return TRUE;
	default:
		return FALSE;
	}	
	return FALSE;

}

void CBrewGameCanvas::Release(){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -