示例#1
0
/**
 * 定时器消息
 */
bool CServerGameDesk::OnTimer(UINT uTimerID)
{
	if (uTimerID==TIME_GAME_FINISH)	//结束定时器
	{
		KillTimer(TIME_GAME_FINISH);
		if (m_bGameStation==GS_PLAY_GAME) GameFinish(0,GF_NORMAL);
	}
	else if(uTimerID == TIME_USER_OUT_CARD)
	{
		m_iTimerCount --;

		if(m_iTimerCount < 0 )
		{
			KillTimer(TIME_USER_OUT_CARD) ; 

			if(m_bGameStation == GS_PLAY_GAME)
			{
				H021_UserPass(m_Logic.m_iNowOutPeople ,NULL ,NULL ,0,0,false) ;
			}
		}

		return true ;
	}
	return __super::OnTimer(uTimerID);
}
示例#2
0
/**
 * 同意用户离开
 * @param bDeskStation 玩家ID
 * @param pNetHead 参数基类
 * @param pData 网络数据包
 * @param uSize 数据包大小
 * @param uSocketID 参数基类
 * @param bWatchUser 是否旁观
 */
bool CServerGameDesk::H048_ArgeeStopThing(BYTE bDeskStation, NetMessageHead * pNetHead, void * pData, UINT uSize, UINT uSocketID, bool bWatchUser)
{
			if(bWatchUser)
				return false;
			StopResultStruct * pStop=(StopResultStruct *)pData;
			if(pStop->bArgee==1)
			{
				//同意
				StopResultStruct stop;
				stop.bArgee=true;
				SendGameData((bDeskStation+2)%4,&stop,sizeof(stop),MDM_GM_GAME_NOTIFY,ASS_AGREE_STOP,0);

				MessageStruct Mess;
				memset(&Mess,0,sizeof(Mess));
				lstrcpy(Mess.Message,"敌家经过商量,提前结束了本局!");
				SendGameData((bDeskStation+1)%4,&Mess,sizeof(Mess),MDM_GM_GAME_NOTIFY,ASS_MESSAGE,0);
				SendGameData((bDeskStation+3)%4,&Mess,sizeof(Mess),MDM_GM_GAME_NOTIFY,ASS_MESSAGE,0);

				memset(&Mess,0,sizeof(Mess));
				lstrcpy(Mess.Message,"拣分的双方经过商量,提前结束了本局!");
				SendWatchData(m_bMaxPeople,&Mess,sizeof(Mess),MDM_GM_GAME_NOTIFY,ASS_MESSAGE,0);
				//结束游戏
				if (m_bGameStation==GS_PLAY_GAME) 
					GameFinish(bDeskStation, GF_PREEND);//提前结束
			}
			else
			{
				StopResultStruct stop;
				stop.bArgee=false;
				SendGameData((bDeskStation+2)%4,&stop,sizeof(stop),MDM_GM_GAME_NOTIFY,ASS_AGREE_STOP,0);
			}
			return true;
}
示例#3
0
bool CServerGameDesk::UserNetCut(BYTE bDeskStation, CGameUserInfo *pLostUserInfo)
{
	DebugPrintf("用户掉线  位置=【%d】",bDeskStation);

	 __super:: UserNetCut(bDeskStation, pLostUserInfo);

	m_bIsCut[bDeskStation] = true;

	int iTempCount = 0;
	for(int i = 0;i < PLAY_COUNT; ++i)
	{
		if(m_bIsCut[i])
		{
			iTempCount++;
		}
	}

	//所有人断线 结束游戏
	if(iTempCount == CountPlayer())
	{
		GameFinish(bDeskStation,GF_SALE);	//安全结束游戏
	}

	return true;
}
示例#4
0
/**
 * 用户离开游戏桌
 */
BYTE CServerGameDesk::UserLeftDesk(BYTE bDeskStation, CGameUserInfo * pUserInfo)
{
	if(m_bGameStation>GS_WAIT_ARGEE &&m_bGameStation<GS_WAIT_NEXT)
		GameFinish(bDeskStation,GF_SALE);
	if(GS_WAIT_ARGEE==m_bGameStation)
	{//清理布局
		m_Logic.UserLeft(bDeskStation);
	}
	return __super::UserLeftDesk(bDeskStation,pUserInfo);
}
示例#5
0
//用户离开游戏桌
BYTE CServerGameDesk::UserLeftDesk(BYTE bDeskStation, CGameUserInfo * pUserInfo)
{
	DebugPrintf("用户离开  位置=【%d】",bDeskStation);

	m_bIsAuto[bDeskStation] = false;

	m_bIsCut[bDeskStation] = false;

	if(IsPlayGame(bDeskStation))
	{	
		GameFinish(bDeskStation,GF_SALE);	//安全结束游戏
	}

	return __super::UserLeftDesk(bDeskStation,pUserInfo);
}
示例#6
0
/**
 * 用户请求离开
 * @param bDeskStation 请求玩家ID
 * @param szMessage 请求消息内容
 */
BOOL CServerGameDesk::H041_UserHaveThing(BYTE bDeskStation, char * szMessage)
{
	if (m_bGameStation<GS_BUZHEN) return TRUE;
	m_bdesk=bDeskStation;
	m_iLeaveArgee|=1<<bDeskStation;
	if (m_iLeaveArgee!=15)
	{
		HaveThingStruct HaveThing;
		HaveThing.pos=bDeskStation;
		::CopyMemory(HaveThing.szMessage,szMessage,60*sizeof(char));
		for (int i=0;i<m_bMaxPeople;i++)
			if (i!=bDeskStation) SendGameData(i,&HaveThing,sizeof(HaveThing),MDM_GM_GAME_NOTIFY,ASS_HAVE_THING,0);
	}
	else GameFinish(bDeskStation,GF_SALE);

	return TRUE;
}
示例#7
0
/**
 * 同意用户离开
 * @param bDeskStation 玩家ID
 * @param bArgee 是否同意
 */
BOOL CServerGameDesk::H044_ArgeeUserLeft(BYTE bDeskStation, BOOL bArgee)
{
	if (bArgee) m_iLeaveArgee|=1<<bDeskStation;
	else //m_iLeaveArgee&=~1<<bDeskStation;
	{
		m_iLeaveArgee = 0;
	}
	if (m_iLeaveArgee!=15)
	{
		m_bQueryQuit=true;
		LeaveResultStruct Leave;
		Leave.bDeskStation=bDeskStation;
		Leave.bArgeeLeave=bArgee;
		for (int i=0;i<m_bMaxPeople;i++) 
			if (i!=bDeskStation) SendGameData(i,&Leave,sizeof(Leave),MDM_GM_GAME_NOTIFY,ASS_LEFT_RESULT,0);
	}
	else GameFinish(m_bdesk,GF_SALE);

	return TRUE;
}
示例#8
0
//--------------------------------------------------------------------------------
//处理玩家摊牌动作;
void CServerGameDesk::HandTanPaiAction(BYTE byDStation,BYTE byDownCard[])
{
	//安全判断
	if(!m_bIsInGame[byDStation] || NULL == byDownCard || m_bHaveBaiPai[byDStation] || m_bGameStation != GS_PLAY_GAME)
	{
		return;
	}

	::CopyMemory(m_bBullCard[byDStation],byDownCard,sizeof(BYTE)*USER_HAND_CARD);		//摆牌数据

	m_byCardShape[byDStation] = m_Logic.GetShape(m_byUCard[byDStation],m_iUCCount[byDStation],byDownCard);

	TanPaiStruct tanpai;
	
	tanpai.byStaiton = byDStation;
	tanpai.byShape = m_byCardShape[byDStation];

	if(m_bWatchOther[byDStation])
	{
		::CopyMemory(tanpai.byDownCard,m_bBullCard[byDStation],sizeof(m_bBullCard[byDStation]));
	}
		
	for (int i = 0; i < PLAY_COUNT; ++i)
	{
		if(m_pUserInfo[i])
		{
			SendGameData(i,&tanpai,sizeof(tanpai),MDM_GM_GAME_NOTIFY,ASS_TAN_PAI,0);
		}
	}
	SendWatchData(m_bMaxPeople,&tanpai,sizeof(tanpai),MDM_GM_GAME_NOTIFY,ASS_TAN_PAI,0);

	m_bHaveBaiPai[byDStation] = true;

	//检测是否所有人都已摊牌
	if(CheckTanPaiFinish())
	{
		GameFinish(byDStation,GF_NORMAL);
	}
}
示例#9
0
//*****************************************************************************
// 更新
//*****************************************************************************
void CGame::Update(void)
{
	m_pManager->GetCameraManager()->Update();
	m_pFieldManager->Update();
	m_pManager->GetLightManager()->Update();
	m_pCrowdManager->Update();

	// ディレクターの更新処理			よく考えたらこれはここだとダメな気がするけどまぁとりあえず
	m_pDirectorManager->Update();

	// 現モードの初期化処理&前モードの終了処理
	if (m_PrevMode != m_Mode)
	{
		// 前モードの終了処理
		switch (m_PrevMode)
		{
		case GAME_INTRO:
			UninitGameIntro();
			break;

		case GAME_BATTLE:
			UninitGameBattle();
			break;

		case GAME_FINISH:
			UninitGameFinish();
			break;
		}

		// 現モードの初期化処理
		switch (m_Mode)
		{
		case GAME_INTRO:
			InitGameIntro();
			break;

		case GAME_BATTLE:
			InitGameBattle();
			break;

		case GAME_FINISH:
			InitGameFinish();
			break;
		}
	}
	m_PrevMode = m_Mode;

	// 現モードの実行
	switch (m_Mode)
	{
	case GAME_INTRO:
		GameIntro();
		break;

	case GAME_BATTLE:
		GameBattle();
		break;

	case GAME_FINISH:
		GameFinish();
		break;
	}

	// 緊急用
	if (CInputKeyboard::GetKeyboardTrigger(KEYBOARD_CODE_GO_TITLE))
	{
		m_Mode = GAME_FINISH;
	}

#ifdef _DEBUG
	// test
	if( CInputKeyboard::GetKeyboardTrigger( KEYBOARD_CODE_FORCE_BATTLE_MODE ) )
	{
		m_pManager->GetPlayerManager()->SetPos( PLAYER_1, D3DXVECTOR3( -25.0f, 0.0f, 0.0f ) );
		m_pManager->GetPlayerManager()->SetPos( PLAYER_2, D3DXVECTOR3( +25.0f, 0.0f, 0.0f ) );

		m_pManager->GetJudgeManager()->SetBattleMode( BATTLE_FIGHT );
	}

	if( CInputKeyboard::GetKeyboardTrigger( KEYBOARD_CODE_FORCE_MOVE_MODE ) )
	{
		m_pManager->GetPlayerManager()->SetPos( PLAYER_1, D3DXVECTOR3( -50.0f, 0.0f, 0.0f ) );
		m_pManager->GetPlayerManager()->SetPos( PLAYER_2, D3DXVECTOR3( +50.0f, 0.0f, 0.0f ) );
		
		m_pManager->GetJudgeManager()->SetBattleMode( BATTLE_MOVE );
	}


	if (CInputKeyboard::GetKeyboardTrigger(KEYBOARD_CODE_UI_START_TEST))
	{
		m_pUiManager->StartAnimation(INTORO_ANIMATION_FRAME);
	}

	if (CInputKeyboard::GetKeyboardTrigger(KEYBOARD_CODE_DECIDE))
	{
		// フェードアウト開始
		m_pFade->Start( MODE_FADE_OUT, DEFFAULT_FADE_OUT_COLOR, DEFFAULT_FADE_TIME );

		// タイトルヘ
		m_pManager->SetNextPhase( MODE_PHASE_TITLE );
	}
#endif

#ifdef _DEBUG
	CDebugProc::PrintR( "[GAME]\n" );
	CDebugProc::PrintR( "Timer:%d\n", (int)( m_BattleTimer / TARGET_FPS ) );
	CDebugProc::PrintR( "GameMode:" );
	switch( m_Mode )
	{
		m_BattleTimer = DEFAULT_BATTLE_TIMER;
	case GAME_INTRO:
		CDebugProc::PrintR( "GAME_INTRO" );
		break;

	case GAME_BATTLE:
		CDebugProc::PrintR( "GAME_BATTLE" );
		break;

	case GAME_FINISH:
		CDebugProc::PrintR( "GAME_FINISH" );
		break;
	}
	CDebugProc::PrintR( "\n" );
	CDebugProc::PrintR( "BattleMode:" );

	switch( m_pJudgeManager->GetBattleMode() )
	{
		// 移動モード
	case BATTLE_MOVE:
		CDebugProc::PrintR( "BATTLE_MOVE" );
		break;


		// 戦闘モード
	case BATTLE_FIGHT:
		CDebugProc::PrintR( "BATTLE_FIGHT" );
		break;
	}

	CDebugProc::PrintR( "\n\n" );

#endif

}
示例#10
0
//游戏开始
bool CServerGameDesk::GameBegin(BYTE bBeginFlag)
{
	
	if (__super::GameBegin(bBeginFlag)==false) 
	{
		GameFinish(0,GF_SALE);
		return false;
	}

	m_bGameStation = GS_SEND_CARD;				//游戏状态

	//-ADD--BY---DWJ-20121203
	//这里每盘根据房间ID读取下配置文件中的ReSetAIHaveWinMoney 参数 设定下机器人赢了多少钱;
	GetAIContrlSetFromIni(m_pDataManage->m_InitData.uRoomID);

	//牛牛玩家人数
	m_byCowUserNum = 0;
	//是否牛牛玩家
	memset(m_bIsCowUser, false, sizeof(m_bIsCowUser));

	for (int i = 0; i < PLAY_COUNT; ++i) 
	{
		if(m_pUserInfo[i])
		{
			m_bIsInGame[i] = true;
		}
	}

	//分发扑克
	m_Logic.RandCard(m_iTotalCard,m_iAllCardCount,m_bHaveKing);
	int temp = rand()%100;

	//洗到好牌
	if (temp < m_iGoodCard)
	{
		for (int i=0; i<20; i++)
		{
			if (GetMaxCardShape(m_iTotalCard,m_iAllCardCount) > UG_BULL_SEVEN)
			{
				break;
			}

			m_Logic.RandCard(m_iTotalCard,m_iAllCardCount,m_bHaveKing);
		}
	}

	srand(GetTickCount());

	m_bGameStation = GS_SEND_CARD;

	BeginUpgradeStruct begindata;

	::CopyMemory(begindata.bIsInGame,m_bIsInGame,sizeof(m_bIsInGame));

	for(int i = 0; i < PLAY_COUNT; ++i)
	{
		if(NULL == m_pUserInfo[i])
			continue;
	
		SendGameData(i,&begindata,sizeof(BeginUpgradeStruct),MDM_GM_GAME_NOTIFY,ASS_BEGIN_UPGRADE,0);
	}
	SendWatchData(m_bMaxPeople,&begindata,sizeof(BeginUpgradeStruct),MDM_GM_GAME_NOTIFY,ASS_BEGIN_UPGRADE,0);

	SendCard();

	DebugPrintf("游戏开始__ happy landowner gamebing end!");

	return true;
}