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

📄 gameclientdlg.cpp

📁 网狐2008最新版本梭哈游戏代码!很难得到的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

//用户放弃
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 + -