📄 gameclientdlg.cpp
字号:
}
//用户放弃
bool CGameClientDlg::OnSubGiveUp(const void * pBuffer, WORD wDataSize)
{
//效验数据
if (wDataSize!=sizeof(CMD_S_GiveUp)) return false;
CMD_S_GiveUp * pGiveUp=(CMD_S_GiveUp *)pBuffer;
//设置变量
m_bPlayStatus[pGiveUp->wUserChairID]=FALSE;
if (pGiveUp->wUserChairID==GetMeChairID()) SetGameStatus(GS_FREE);
//设置界面
BYTE bCard[5]={0,0,0,0,0};
WORD wViewStation=SwitchViewChairID(pGiveUp->wUserChairID);
WORD bCount=m_GameClientView.m_CardControl[wViewStation].GetCardCount();
m_GameClientView.m_CardControl[wViewStation].AllowPositively(false);
m_GameClientView.m_CardControl[wViewStation].ShowFirstCard(false);
m_GameClientView.m_CardControl[wViewStation].SetCardData(bCard,bCount);
//更新数据
if( m_lTurnMaxGold != pGiveUp->lTurnMaxGold )
{
//设置数据
m_lTurnMaxGold = pGiveUp->lTurnMaxGold;
//设置最大下注
m_GameClientView.SetGoldTitleInfo( m_lTurnMaxGold,m_GameClientView.m_lBasicGold );
if( !IsLookonMode() && m_wCurrentUser==GetMeChairID() && pGiveUp->wUserChairID != m_wCurrentUser )
UpdateScoreControl();
}
//其他处理
if (pGiveUp->wUserChairID==GetTimeChairID()) KillGameTimer(IDI_GIVE_UP);
PlayGameSound(AfxGetInstanceHandle(),TEXT("GIVE_UP"));
return true;
}
//发牌消息
bool CGameClientDlg::OnSubSendCard(const void * pBuffer, WORD wDataSize)
{
//效验数据
if (wDataSize!=sizeof(CMD_R_SendCard)) return false;
CMD_R_SendCard * pSendCard=(CMD_R_SendCard *)pBuffer;
//设置变量
m_lGoldShow=0L;
m_lTurnBasicGold=0L;
m_lTurnMaxGold=pSendCard->lMaxGold;
m_wCurrentUser = pSendCard->wCurrentUser;
//更新界面
LONG lUserTableGold=0L;
for (WORD i=0;i<GAME_PLAYER;i++)
{
//获取位置
WORD wViewChairID=SwitchViewChairID(i);
//设置金币
lUserTableGold=m_GameClientView.m_GoldView[wViewChairID*2].GetGold();
lUserTableGold+=m_GameClientView.m_GoldView[wViewChairID*2+1].GetGold();
m_GameClientView.SetUserGoldInfo(wViewChairID,false,0L);
m_GameClientView.SetUserGoldInfo(wViewChairID,true,lUserTableGold);
}
//派发扑克,从上次最大玩家开始发起
WORD wLastMostUser = pSendCard->wStartChairId;
ASSERT( wLastMostUser != INVALID_CHAIR );
for (BYTE i=0;i<pSendCard->cbSendCardCount;i++)
{
for (WORD j=0;j<GAME_PLAYER;j++)
{
WORD wChairId = (wLastMostUser+j)%GAME_PLAYER;
if (m_bPlayStatus[wChairId]==TRUE&&pSendCard->bUserCard[wChairId][i]!=0)
{
WORD wViewChairID=SwitchViewChairID(wChairId);
m_GameClientView.DispatchUserCard(wViewChairID,pSendCard->bUserCard[wChairId][i]);
}
}
}
//播放声音
if( !m_bShowHand )
PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE"));
return true;
}
//游戏结束
bool CGameClientDlg::OnSubGameEnd(const void * pBuffer, WORD wDataSize)
{
//效验参数
if (wDataSize!=sizeof(CMD_S_GameEnd)) return false;
CMD_S_GameEnd * pGameEnd=(CMD_S_GameEnd *)pBuffer;
//播放声音
if( !IsLookonMode() )
{
if (pGameEnd->lGameGold[GetMeChairID()]>0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WIN"));
else PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_LOST"));
}
else PlayGameSound(GetModuleHandle(NULL),TEXT("GAME_END"));
//设置状态
SetGameStatus(GS_FREE);
KillGameTimer(IDI_GIVE_UP);
//复制数据
CopyMemory( &m_GameEnd,pGameEnd,sizeof(m_GameEnd) );
if( !m_GameClientView.IsDispatchCard() )
PerformGameEnd();
return true;
}
//开始按钮
LRESULT CGameClientDlg::OnStart(WPARAM wParam, LPARAM lParam)
{
//删除时间
KillGameTimer(IDI_START_GAME);
//设置控件
for (WORD i=0;i<GAME_PLAYER;i++)
{
m_GameClientView.m_GoldView[i*2].SetGold(0L);
m_GameClientView.m_GoldView[i*2+1].SetGold(0L);
m_GameClientView.m_CardControl[i].SetCardData(NULL,0);
m_GameClientView.m_CardControl[i].ShowFirstCard(false);
}
//设置控件
m_GameClientView.m_btStart.ShowWindow(SW_HIDE);
HideScoreControl();
//隐藏控件
m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE);
//更新界面
m_GameClientView.UpdateGameView(NULL);
//发送消息
SendUserReady(NULL,0);
return 0;
}
//加注按钮
LRESULT CGameClientDlg::OnAddGold(WPARAM wParam, LPARAM lParam)
{
OnFollow(0,0);
return 0;
}
//放弃按钮
LRESULT CGameClientDlg::OnGiveUp(WPARAM wParam, LPARAM lParam)
{
//放弃游戏
KillGameTimer(IDI_GIVE_UP);
HideScoreControl();
m_GameClientView.SetUserGoldInfo(2,false,m_lGoldShow);
//发送消息
SendData(SUB_C_GIVE_UP);
return 0;
}
//跟注按钮
LRESULT CGameClientDlg::OnFollow(WPARAM wParam, LPARAM lParam)
{
//获取金币
LONG lGold=m_GameClientView.m_GoldView[4].GetGold();
LONG lShowHandScore = __min(m_lUserScore[GetMeChairID()],m_lShowHandScore);
if( lGold+m_GameClientView.m_GoldView[5].GetGold() < lShowHandScore )
lGold=__max(lGold,m_lTurnBasicGold);
//设置变量
if ( lShowHandScore == lGold+m_GameClientView.m_GoldView[5].GetGold() )
{
if( !m_bShowHand )
m_GameClientView.SetUserShowHand( true );
m_bShowHand=true;
}
//设置界面
HideScoreControl();
m_GameClientView.SetUserGoldInfo(2,false,lGold);
//删除定时器
KillGameTimer(IDI_GIVE_UP);
//发送数据
CMD_C_AddGold AddPoint;
AddPoint.lGold=lGold;
SendData(SUB_C_ADD_GOLD,&AddPoint,sizeof(AddPoint));
return 0;
}
//梭哈按钮
LRESULT CGameClientDlg::OnShowHand(WPARAM wParam, LPARAM lParam)
{
LONG lShowHandScore = __min(m_lUserScore[GetMeChairID()],m_lShowHandScore);
LONG lGold=lShowHandScore-m_GameClientView.m_GoldView[5].GetGold();
m_GameClientView.SetUserGoldInfo(2,false,lGold);
OnFollow(0,0);
return 0;
}
//加注消息
LRESULT CGameClientDlg::OnAddGoldControl(WPARAM wParam, LPARAM lParam)
{
//设置加注
if( LONG(wParam) == 0 )
m_GameClientView.m_GoldView[4].SetGold(0);
else
m_GameClientView.m_GoldView[4].SetGold(m_lTurnBasicGold+(LONG)wParam);
//设置按钮
if( LONG(wParam) != 0L )
{
m_GameClientView.m_btFollow.ShowWindow(SW_HIDE);
m_GameClientView.m_btAddGold.ShowWindow(SW_SHOW);
}else
{
m_GameClientView.m_btFollow.ShowWindow(SW_SHOW);
m_GameClientView.m_btAddGold.ShowWindow(SW_HIDE);
}
//更新界面
m_GameClientView.UpdateGameView(NULL);
//播放声音
PlayGameSound(AfxGetInstanceHandle(),TEXT("CHOOSE_SCORE"));
return 0;
}
//发牌完成
LRESULT CGameClientDlg::OnSendCardFinish(WPARAM wParam, LPARAM lParam)
{
if( m_bPlayStatus[GetMeChairID()] && GetGameStatus() == GS_FREE )
{
PerformGameEnd();
return 0;
}
//下注判断
if ((IsLookonMode()==false)&&(m_wCurrentUser==GetMeChairID()))
{
UpdateScoreControl();
}
//设置定时器
SetGameTimer(m_wCurrentUser,IDI_GIVE_UP,30);
return 0;
}
//
void CGameClientDlg::UpdateScoreControl()
{
WORD wMeChairID = GetMeChairID();
//设置数据
m_lGoldShow=m_GameClientView.m_GoldView[4].GetGold();
//变量定义
WORD wCardCount=m_GameClientView.m_CardControl[2].GetCardData(NULL,0);
//禁止按钮
LONG lLeaveScore=m_lTurnMaxGold-m_GameClientView.m_GoldView[4].GetGold()-m_GameClientView.m_GoldView[5].GetGold();
m_GameClientView.m_btShowHand.EnableWindow((wCardCount>=3&&(lLeaveScore>0||m_bShowHand))?TRUE:FALSE);
lLeaveScore=m_lTurnBasicGold-m_GameClientView.m_GoldView[4].GetGold();
LONG lShowHandScore = __min(m_lUserScore[wMeChairID],m_lShowHandScore);
if( !m_bShowHand &&
( m_lTurnBasicGold == 0 || lLeaveScore>0L&&lShowHandScore>m_lTurnBasicGold+m_GameClientView.m_GoldView[5].GetGold() )
)
m_GameClientView.m_btFollow.EnableWindow(TRUE);
else m_GameClientView.m_btFollow.EnableWindow(FALSE);
//自己下注
ActiveGameFrame();
m_GameClientView.m_btFollow.ShowWindow(SW_SHOW);
m_GameClientView.m_btGiveUp.ShowWindow(SW_SHOW);
m_GameClientView.m_btShowHand.ShowWindow(SW_SHOW);
//加注界面
lLeaveScore=m_lTurnMaxGold-m_lTurnBasicGold-m_GameClientView.m_GoldView[5].GetGold();
if( lLeaveScore > 0L )
m_GameClientView.m_GoldControl.SetScoreControl(lLeaveScore,0,0);
return;
}
//
void CGameClientDlg::HideScoreControl()
{
m_GameClientView.m_GoldControl.ShowWindow(SW_HIDE);
m_GameClientView.m_btFollow.ShowWindow(SW_HIDE);
m_GameClientView.m_btGiveUp.ShowWindow(SW_HIDE);
m_GameClientView.m_btAddGold.ShowWindow(SW_HIDE);
m_GameClientView.m_btShowHand.ShowWindow(SW_HIDE);
}
//
void CGameClientDlg::PerformGameEnd()
{
CMD_S_GameEnd *pGameEnd = &m_GameEnd;
//设置积分
CString strTemp ,strEnd = "\n";
for( WORD i = 0; i < GAME_PLAYER; i++ )
{
if(pGameEnd->lGameGold[i]>0)
strTemp.Format("%s: %+ld\n",m_szName[i],pGameEnd->lGameGold[i]);
else if( m_szName[i][0] != 0 )
strTemp.Format("%s: %ld\n",m_szName[i],pGameEnd->lGameGold[i]);
else strTemp.Empty();
strEnd += strTemp;
}
//消息积分
InsertSystemString((LPCTSTR)strEnd);
//游戏正常结束
BYTE bCardData[5];
m_GameClientView.m_ScoreView.ResetScore();
for (WORD i=0;i<GAME_PLAYER;i++)
{
//设置信息
if (pGameEnd->lGameGold[i]!=0L)
{
if (m_szName[i][0]==0) m_GameClientView.m_ScoreView.SetGameScore(i,TEXT("已离开"),pGameEnd->lGameGold[i]);
else m_GameClientView.m_ScoreView.SetGameScore(i,m_szName[i],pGameEnd->lGameGold[i]);
if (pGameEnd->bUserCard[i]!=0)
{
WORD wViewStation=SwitchViewChairID(i);
WORD wCardCount=m_GameClientView.m_CardControl[wViewStation].GetCardData(bCardData,CountArray(bCardData));
bCardData[0]=pGameEnd->bUserCard[i];
m_GameClientView.m_CardControl[wViewStation].SetCardData(bCardData,wCardCount);
m_GameClientView.m_CardControl[wViewStation].ShowFirstCard(true);
}
}
}
m_GameClientView.m_ScoreView.SetTax(pGameEnd->lTax);
m_GameClientView.m_ScoreView.ShowWindow(SW_SHOW);
//设置控件
m_GameClientView.SetUserShowHand( false );
HideScoreControl();
//游戏变量
m_lTurnMaxGold=0L;
m_lTurnBasicGold=0L;
memset(m_bPlayStatus,0,sizeof(m_bPlayStatus));
m_wCurrentUser = INVALID_CHAIR;
m_lShowHandScore = 0L;
//辅助变量
m_lGoldShow=0L;
m_bShowHand=false;
memset(m_szName,0,sizeof(m_szName));
//设置界面
if (IsLookonMode()==false)
{
m_GameClientView.m_btStart.ShowWindow(SW_SHOW);
m_GameClientView.m_btStart.SetFocus();
SetGameTimer(GetMeChairID(),IDI_START_GAME,30);
}
}
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -