📄 gameclientview.cpp
字号:
//绘画筹码
LONG lTotalGold=0L;
for (DWORD i=0;i<CountArray(m_GoldView);i++)
{
lTotalGold+=m_GoldView[i].GetGold();
m_GoldView[i].DrawGoldView(pDC,m_GoldStation[i].x,m_GoldStation[i].y);
}
//游戏信息
pDC->SetTextAlign(TA_LEFT|TA_TOP);
pDC->SetTextColor(RGB(250,250,250));
const UINT uDrawFormat=DT_END_ELLIPSIS|DT_CENTER|DT_SINGLELINE|DT_VCENTER;
//最大下注
if (m_lMaxGold!=0)
{
_snprintf(szBuffer,sizeof(szBuffer),TEXT("%ld"),m_lMaxGold);
DrawText(pDC->m_hDC,szBuffer,lstrlen(szBuffer),CRect(m_nXBorder+80,m_nYBorder+10,m_nXBorder+140,m_nYBorder+22),uDrawFormat);
}
//基础下注
if (m_lBasicGold!=0)
{
_snprintf(szBuffer,sizeof(szBuffer),TEXT("%ld"),m_lBasicGold);
DrawText(pDC->m_hDC,szBuffer,lstrlen(szBuffer),CRect(m_nXBorder+80,m_nYBorder+29,m_nXBorder+140,m_nYBorder+41),uDrawFormat);
}
//游戏总注
if (lTotalGold!=0L)
{
_snprintf(szBuffer,sizeof(szBuffer),TEXT("%ld"),lTotalGold);
DrawText(pDC->m_hDC,szBuffer,lstrlen(szBuffer),CRect(m_nXBorder+80,m_nYBorder+48,m_nXBorder+140,m_nYBorder+60),uDrawFormat);
}
//绘画扑克
if (m_SendCardItemArray.GetCount()>0)
{
//变量定义
CImageHandle HandleCard(&m_ImageCardBack);
tagSendCardItem * pSendCardItem=&m_SendCardItemArray[0];
//绘画扑克
INT nCardWidth = m_ImageCardBack.GetWidth()/13;
INT nCardHeight = m_ImageCardBack.GetHeight()/5;
m_ImageCardBack.AlphaDrawImage(pDC,m_SendCardCurPos.x,m_SendCardCurPos.y,nCardWidth,nCardHeight,nCardWidth*2,nCardHeight*4,RGB(255,0,255));
}
//用户梭哈
if( m_bUserShowHand )
{
m_PngShowHand.DrawImage( pDC,(nWidth-m_PngShowHand.GetWidth())/2,(nHeight-m_PngShowHand.GetHeight())/2 );
}
return;
}
//金币标题
void CGameClientView::SetGoldTitleInfo(DWORD lMaxGold, DWORD lBasicGold)
{
//设置变量
m_lMaxGold=lMaxGold;
m_lBasicGold=lBasicGold;
//更新视图
UpdateGameView(NULL);
return;
}
//用户筹码
void CGameClientView::SetUserGoldInfo(WORD wViewChairID, bool bTableGold, DWORD dwGold)
{
//参数判断
WORD wGoldPos=wViewChairID*2+((bTableGold==true)?1:0);
if (wGoldPos>=CountArray(m_GoldStation)) return;
//设置变量
DWORD m_dwAllGold=0L;
m_GoldView[wGoldPos].SetGold(dwGold);
for (int i=0;i<CountArray(m_GoldStation);i++) m_dwAllGold+=m_GoldView[i].GetGold();
//更新视图
UpdateGameView(NULL);
return;
}
//定时器消息
void CGameClientView::OnTimer(UINT nIDEvent)
{
//发送处理
if (nIDEvent==IDI_SEND_CARD)
{
//设置位置
m_SendCardCurPos.x += m_nXStep;
m_SendCardCurPos.y += m_nYStep;
//更新界面
UpdateGameView(NULL);
//停止判断
if ( --m_nStepCount == 0 )
{
//获取扑克
BYTE cbCardData[MAX_COUNT];
WORD wChairID=m_SendCardItemArray[0].wChairID;
BYTE cbCardCount=(BYTE)m_CardControl[wChairID].GetCardData(cbCardData,CountArray(cbCardData));
//设置扑克
if (cbCardCount<MAX_COUNT)
{
cbCardData[cbCardCount++]=m_SendCardItemArray[0].cbCardData;
m_CardControl[wChairID].SetCardData(cbCardData,cbCardCount);
}
//删除动画
m_SendCardItemArray.RemoveAt(0);
//继续动画
if (m_SendCardItemArray.GetCount()>0)
{
//
wChairID = m_SendCardItemArray[0].wChairID;
m_nStepCount = SEND_STEP_COUNT;
m_SendCardCurPos = m_SendCardPos;
m_nXStep = (m_CardControl[wChairID].GetTailPos().x-m_SendCardPos.x)/m_nStepCount;
m_nYStep = (m_CardControl[wChairID].GetTailPos().y-m_SendCardPos.y)/m_nStepCount;
//播放声音
CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView);
pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("SEND_CARD"));
return;
}
else
{
//完成处理
KillTimer(IDI_SEND_CARD);
AfxGetMainWnd()->PostMessage(IDM_SEND_CARD_FINISH,0,0);
return;
}
}
return;
}
#ifdef SHOW_CARD_ANIMATE
else if( nIDEvent == IDI_SHOW_CARD )
{
if( !m_CardControl[2].PlayMoveCard() )
{
KillTimer( IDI_SHOW_CARD );
}
UpdateGameView(NULL);
return;
}
#endif
else if( nIDEvent == IDI_USER_SHOW_HAND )
{
KillTimer( IDI_USER_SHOW_HAND );
m_bUserShowHand = false;
UpdateGameView( NULL );
return;
}
__super::OnTimer(nIDEvent);
}
//动画判断
bool CGameClientView::IsDispatchCard()
{
return m_SendCardItemArray.GetCount()>0;
}
//完成发牌
void CGameClientView::FinishDispatchCard()
{
//完成判断
if (m_SendCardItemArray.GetCount()==0) return;
//完成动画
for (INT_PTR i=0;i<m_SendCardItemArray.GetCount();i++)
{
//获取数据
tagSendCardItem * pSendCardItem=&m_SendCardItemArray[i];
//获取扑克
BYTE cbCardData[MAX_COUNT];
WORD wChairID=pSendCardItem->wChairID;
BYTE cbCardCount=(BYTE)m_CardControl[wChairID].GetCardData(cbCardData,CountArray(cbCardData));
//设置扑克
if (cbCardCount<MAX_COUNT)
{
cbCardData[cbCardCount++]=pSendCardItem->cbCardData;
m_CardControl[wChairID].SetCardData(cbCardData,cbCardCount);
}
}
//删除处理
KillTimer(IDI_SEND_CARD);
m_SendCardItemArray.RemoveAll();
//更新界面
UpdateGameView(NULL);
return;
}
//发送扑克
void CGameClientView::DispatchUserCard(WORD wChairID, BYTE cbCardData)
{
//效验参数
ASSERT(wChairID<GAME_PLAYER);
if (wChairID>=GAME_PLAYER) return;
//设置变量
tagSendCardItem SendCardItem;
SendCardItem.wChairID=wChairID;
SendCardItem.cbCardData=cbCardData;
m_SendCardItemArray.Add(SendCardItem);
//启动动画
if (m_SendCardItemArray.GetCount()==1)
{
//设置定时器
SetTimer(IDI_SEND_CARD,SPEED_SEND_CARD,NULL);
//
m_nStepCount = SEND_STEP_COUNT;
m_SendCardCurPos = m_SendCardPos;
m_nXStep = (m_CardControl[wChairID].GetTailPos().x-m_SendCardPos.x)/m_nStepCount;
m_nYStep = (m_CardControl[wChairID].GetTailPos().y-m_SendCardPos.y)/m_nStepCount;
//
UpdateGameView(NULL);
//播放声音
CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView);
pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("SEND_CARD"));
}
return;
}
//光标消息
BOOL CGameClientView::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage)
{
//获取光标
CPoint MousePoint;
GetCursorPos(&MousePoint);
ScreenToClient(&MousePoint);
//扑克测试
if (m_CardControl[2].OnEventSetCursor(MousePoint)==true) return TRUE;
return __super::OnSetCursor(pWnd,nHitTest,uMessage);
}
//鼠标消息
VOID CGameClientView::OnLButtonDown(UINT nFlags, CPoint Point)
{
__super::OnLButtonDown(nFlags, Point);
//获取光标
CPoint MousePoint;
GetCursorPos(&MousePoint);
ScreenToClient(&MousePoint);
//扑克点击
if (m_CardControl[2].OnEventLeftMouseDown(MousePoint)==true)
{
#ifdef SHOW_CARD_ANIMATE
if( m_CardControl[2].BeginMoveCard() )
{
SetTimer( IDI_SHOW_CARD,SPEED_MOVE_CARD,NULL );
//更新界面
UpdateGameView(NULL);
}
#else
m_CardControl[2].ShowFirstCard(true);
UpdateGameView(NULL);
#endif
}
return;
}
//
VOID CGameClientView::OnLButtonUp(UINT nFlags, CPoint Point)
{
__super::OnLButtonUp(nFlags, Point);
//获取光标
CPoint MousePoint;
GetCursorPos(&MousePoint);
ScreenToClient(&MousePoint);
//扑克点击
if (m_CardControl[2].OnEventLeftMouseUp(MousePoint)==true)
{
#ifndef SHOW_CARD_ANIMATE
m_CardControl[2].ShowFirstCard(false);
UpdateGameView(NULL);
PostMessage( WM_SETCURSOR );
#endif
}
}
//
void CGameClientView::SetUserShowHand( bool bShowHand )
{
if( m_bUserShowHand != bShowHand )
{
m_bUserShowHand = bShowHand;
//
if( m_bUserShowHand )
SetTimer( IDI_USER_SHOW_HAND,TIME_USER_SHOW_HAND,NULL );
UpdateGameView( NULL );
}
}
//
void CGameClientView::SetUserGold( WORD wChairId, LONG lGold )
{
if( wChairId == INVALID_CHAIR )
ZeroMemory( m_lUserGold,sizeof(m_lUserGold) );
else m_lUserGold[wChairId] = lGold;
UpdateGameView( NULL );
}
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -