📄 brewgamecanvas.cpp
字号:
/*===========================================================================
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 + -