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

📄 cbmain.cpp

📁 赤壁之战的游戏源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				OutputString( timeEnd-timeBegin,"\n" );
				timeBegin = timeEnd;
#endif
			//---------------
				// load other maps
				if( !::DRAW_LoadMaps() )
				{
					OutputDebugString( "DRAW_LoadMaps: Load battlefield bitmaps failure!\n" );
					return PROGRAM_STATE_ERROR;
				}

				DD_FadeOutScreen( 5, 10 );

				// 游戏开始
				GAME_Network_Begin();

#ifdef	_DEBUG
				timeEnd = timeGetTime();
				OutputString( timeEnd-timeBegin,"\n" );
				timeBegin = timeEnd;
#endif
				DRAW_UpdateScreen( FALSE );

				FACE_SetCommandState(COMMAND_STATE_PLAY);

#ifdef	_DEBUG
				timeEnd = timeGetTime();
				OutputString( timeEnd-timeBegin,"\n" );
				timeBegin = timeEnd;
#endif
			}
			break;

	}
	
	return 	OldProgramState;
}

/*
 * updateFrame
 * 
 * Decide what needs to be blitted next, wait for flip to complete,
 * then flip the buffers.
 */
//BOOL bFirst=TRUE;
void updateFrame( void )
{
	int	j;

	if(GAME_bNetwork!=0)
	{
			DH_NetworkReceive();
	
/*	char	test32[255];
	wsprintf((char *)test32,"================================%d================================\n",CB_Counter);
	WriteLogFile("Test_task.log",(char *)test32);
	for(i=0;i<GAME_PLAYER_MAX;i++)
		{
			for(j=0;j<CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX;j++)
				{
					if(CTRL_TaskList[i][j].nTaskID==0)
						{continue;}
//					char	test32[255]; 
					wsprintf((char *)test32,"%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n",CTRL_TaskList[i][j].bDone,
																						  CTRL_TaskList[i][j].nID,
																						  CTRL_TaskList[i][j].nLevel,
																						  CTRL_TaskList[i][j].bIRQ,
																						  CTRL_TaskList[i][j].nTaskID,
																						  CTRL_TaskList[i][j].nTaskIDEx,
																						  CTRL_TaskList[i][j].nTaskIDEx2,
																						  CTRL_TaskList[i][j].nParam1,
																						  CTRL_TaskList[i][j].nParam2,
																						  CTRL_TaskList[i][j].nParam3,
																						  CTRL_TaskList[i][j].nParam4);//,(char *)pTask);
					WriteLogFile("Test_task.log",(char *)test32);
				}
		}*/

	// run
/*	struct UNIT_STRUCT *p41=MAP_GetUnit(16470);
	struct UNIT_STRUCT *p42=MAP_GetUnit(16469);
	struct UNIT_STRUCT *p43=MAP_GetUnit(16468);
	struct UNIT_STRUCT *p44=MAP_GetUnit(16467);
	struct UNIT_STRUCT *p45=MAP_GetUnit(16466);
	struct UNIT_STRUCT *p46=MAP_GetUnit(16465);
	struct UNIT_STRUCT *p47=MAP_GetUnit(16464);
	struct UNIT_STRUCT *p48=MAP_GetUnit(16463);
	struct UNIT_STRUCT *p49=MAP_GetUnit(16462);
	struct UNIT_STRUCT *p40=MAP_GetUnit(16460);
	struct UNIT_STRUCT *p411=MAP_GetUnit(16461);

	struct UNIT_STRUCT *p21=MAP_GetUnit(8224);
	struct UNIT_STRUCT *p22=MAP_GetUnit(8223);
	struct UNIT_STRUCT *p23=MAP_GetUnit(8222);
	struct UNIT_STRUCT *p24=MAP_GetUnit(8221);
	struct UNIT_STRUCT *p25=MAP_GetUnit(8220);
	struct UNIT_STRUCT *p26=MAP_GetUnit(8219);
	struct UNIT_STRUCT *p27=MAP_GetUnit(8218);
	struct UNIT_STRUCT *p28=MAP_GetUnit(8217);
	struct UNIT_STRUCT *p29=MAP_GetUnit(8216);
	struct UNIT_STRUCT *p20=MAP_GetUnit(8214);
	struct UNIT_STRUCT *p211=MAP_GetUnit(8215);
	wsprintf((char *)test32,"================================%d================================\n",CB_Counter);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16470's X=%d,Y=%d\n",p41->Draw.nX,p41->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16469's X=%d,Y=%d\n",p42->Draw.nX,p42->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16468's X=%d,Y=%d\n",p43->Draw.nX,p43->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16467's X=%d,Y=%d\n",p44->Draw.nX,p44->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16466's X=%d,Y=%d\n",p45->Draw.nX,p45->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16465's X=%d,Y=%d\n",p46->Draw.nX,p46->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16464's X=%d,Y=%d\n",p47->Draw.nX,p47->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16463's X=%d,Y=%d\n",p48->Draw.nX,p48->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16462's X=%d,Y=%d\n",p49->Draw.nX,p49->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16460's X=%d,Y=%d\n",p40->Draw.nX,p40->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"16461's X=%d,Y=%d\n",p411->Draw.nX,p411->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);

	wsprintf((char *)test32,"8224's X=%d,Y=%d\n",p21->Draw.nX,p21->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8223's X=%d,Y=%d\n",p22->Draw.nX,p22->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8222's X=%d,Y=%d\n",p23->Draw.nX,p23->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8221's X=%d,Y=%d\n",p24->Draw.nX,p24->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8220's X=%d,Y=%d\n",p25->Draw.nX,p25->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8219's X=%d,Y=%d\n",p26->Draw.nX,p26->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8218's X=%d,Y=%d\n",p27->Draw.nX,p27->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8217's X=%d,Y=%d\n",p28->Draw.nX,p28->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8216's X=%d,Y=%d\n",p29->Draw.nX,p29->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8214's X=%d,Y=%d\n",p20->Draw.nX,p20->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
	wsprintf((char *)test32,"8215's X=%d,Y=%d\n",p211->Draw.nX,p211->Draw.nY);
	WriteLogFile("Test_x_y.log",(char *)test32);
*/
	}
	::RUN_RunUnits();
	memset(DH_ComputerTaskNum,0,sizeof(DH_ComputerTaskNum));
	for(j=0;j<CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX;j++)
		{
			if(CTRL_TaskList[GAME.nMe][j].nTaskID==0)
				{continue;}
			else{DH_ComputerTaskNum[j]=-1;}
		}




	CB_Counter++;



	// draw sprites
	::DRAW_DrawMaps();

	// display frame rate
	DDC_DisplayFrameRate();
} /* updateFrame */

// replay stoped music, CBDATA.cpp
void DATA_WAVE_Replay();
BOOL MAIN_bNotify = FALSE;
BOOL MAIN_bReplay = FALSE;
BOOL MAIN_bEnding = FALSE;
// declared in file DDAPI.h
long FAR PASCAL DD_WindowProc( HWND hWnd, UINT message, 
                            WPARAM wParam, LPARAM lParam )
{
#ifdef	_DEBUG
	if( bInRun == TRUE ) 
		OutputDebugString( "WindowProc Error: Do with messages when running !\n" );
#endif

	//---- for cheat code 
	static int CHEAT_bEnable = FALSE;
	static DWORD CHEAT_nCompare = 0;
	static char CHEAT_str[]="eternal";
	//---- for cheat code 
    switch( message )
    {
    case WM_ACTIVATEAPP:
        bActive = wParam;
		if( bActive == FALSE )
		{
			// 豪华版,Nov.7.1997
			if( MUSIC_bEnable == TRUE )
			{
				DATA_WAVE_MusicStop();
			}
			if( EFFECT_bEnable == TRUE )
			{
				DS_QuitSound();
			}
			MAIN_bReplay = TRUE;
			if( FACE_GetProgramState() == PROGRAM_STATE_AVI )
			{
				PostMessage( hWnd, MM_MCINOTIFY, 0, nCurrentVideoID );
			}
			else if( FACE_GetProgramState() == PROGRAM_STATE_NONE
				&& MAIN_bEnding == TRUE )
			{	// 如果在播放片尾的时候失去焦点状态,则游戏结束
				// game ending
				GAME_EndingEx( -3 );
				MAIN_bEnding = FALSE;
				DD_QuitGraph();
				PostQuitMessage( 0 );
			}
		}
		else if( bActive == TRUE )
		{
			if( MAIN_bReplay == TRUE )
			{
				if( EFFECT_bEnable == TRUE )
				{
					DS_InitSound( hwndGame );
				}
				if( MUSIC_bEnable == TRUE )
				{
					DATA_WAVE_MusicReplay();
				}
				MAIN_bReplay = FALSE;
			}
			if( MAIN_bNotify == TRUE )
			{
				SetCursor( NULL );
				if( FACE_GetProgramState() == PROGRAM_STATE_AVI ) 
				{
					FACE_Avi_Close2();
				}
				MAIN_bNotify = FALSE;
			}
			if( MAIN_bInitGraph == TRUE )
				FACE_SurfaceLost();
		}
        break;

    case WM_SETCURSOR:
        SetCursor(NULL);
		//LoadCursor(IDC_ARROW);
		return TRUE;

    case WM_CREATE:
        break;

	case	WM_ACTIVATE:
		// 两个只需要一个就可以了
		/*		
		if( LOWORD(wParam) == WA_INACTIVE
			&& FACE_GetProgramState() == PROGRAM_STATE_AVI ) 
		{
			PostMessage( hWnd, MM_MCINOTIFY, 0, 0 );
		}
		*/		
		break;

	case	WM_NCACTIVATE:
		// 两个只需要一个就可以了
		/*
		if( wParam == FALSE 
			&& FACE_GetProgramState() == PROGRAM_STATE_AVI ) 
		{
			PostMessage( hWnd, MM_MCINOTIFY, 0, 0 );
		}
		*/
		break;

	// 用于事件的显示
	// Nov.21.1997
	case	WM_SHOW_EVENT:
		FACE_ShowEvent( wParam );
		break;

	case WM_DD_SURFACELOST:
//WriteLogFile("lhj.log", "\n Have receive the message WM_DD_SURFACELOST") ;
		{
			// move ime window (RU_LI) outside main window rectangle
			HIMC himc = ImmGetContext( hwndGame );
			POINT pt={800,600};
			ImmSetStatusWindowPos( himc, &pt );
		}
		if( FACE_GetProgramState() == PROGRAM_STATE_PLAY )
		{
			DRAW_UpdateScreen( FALSE );
			DDC_UpdateScreen();
		}
		else
		{
			FACE_SurfaceLost();
//WriteLogFile("lhj.log", "\n Have exit the function FACE_SurfaceLost()") ;
		}
		break;
	case	WM_CHAR:

		if( FACE_GetProgramState() == PROGRAM_STATE_NONE )
		{
			break;
		}

		if( (CHEAT_bEnable == TRUE) &&
			(FACE_GetCommandState() == COMMAND_STATE_PLAY)
		  )
		{
			if( wParam == 46 || wParam == 93 )	//"." "]"
			{	// 下一关,第一个分支
				RUN_DEBUG_bEndGame = 1;
				break;
			}
			else if( wParam == 61 )			//"=" 
			{	// 下一关,第二个分支
				RUN_DEBUG_bEndGame = 2;
				break;
			}
			else if( wParam == 44 || wParam == 45 || wParam == 91 )	//"," "-" "["
			{	// 上一关
				RUN_EndGame( -2 );
				break;
			}
		}

		// 寻找敌人的剩余部队
		if ( FACE_GetCommandState() == COMMAND_STATE_PLAY
				&& (wParam == 112 || wParam == 80)	)//"p" "P"
		{
			// 以该部队为中心移动屏幕
			POINT px={-1,-1};

			for( int x = 0; x<GAME_PLAYER_MAX; x ++ )
			{
				if( !EYE_PlayerIsAllied( x, GAME.nMe ) )
				{
					px=DisplayEnemy( x );
					if( px.x != -1 )
						break;
				}
				//px=DisplayEnemy(GAME.nMe);
			}
			DRAW_JumpScreen(px);
		}

		// to hadle the hot-key and set it down
		if( FACE_GetCommandState() == COMMAND_STATE_PLAY )
		{
			FACE_HotKeyDown((int)wParam, lParam) ; 
			FACE_NumKey( (int)wParam, lParam ) ;
		}

		FACE_IsInputString( hWnd, message, wParam, lParam);

		//--- for cheat code
		if( (char)wParam == CHEAT_str[CHEAT_nCompare] )
		{
			CHEAT_nCompare++;
			if( CHEAT_nCompare == 5 )
			{
				CHEAT_bEnable = 1-CHEAT_bEnable;
			}
		}
		else CHEAT_nCompare = 0;
		//--- for cheat code
		break;

	case WM_SYSCHAR:
		{
			char key = (char)wParam ;
			char HExt = (char)HIWORD(lParam) ;
			char LExt = (char)LOWORD(lParam) ;
		}
		break;

	case WM_KEYUP:
		if( FACE_GetProgramState() != PROGRAM_STATE_NONE )
		{
			// to hadle the hot-key and post message to Liu Gang
			FACE_HotKeyUp((int)wParam, lParam) ; 
		}
		break;

	case	WM_TIMER:
		PostMessage( hWnd, MM_MCINOTIFY, 0, nCurrentVideoID );
		break;
	case	MM_MCINOTIFY:
		// changed a lot, to fix a bug
		// If the current program is not in active, and AVI file meet the end,
		// we could not just close AVI file and load other DirectDraw objects,
		// we must only close AVI first, and, after activate the current window,
		// then load other DirectDraw objects.
		if( lParam == MUSIC_hCDHandle && wParam == 1 )
		{// 只认为是在播放CD Audio,而且播放一遍结束
			DATA_WAVE_MusicReplay();
		}
		else if( nCurrentVideoID != -1
			&& lParam == nCurrentVideoID )
		{
			if( bActive == TRUE )
			{
				if( FACE_GetProgramState() == PROGRAM_STATE_AVI ) 
				{
					FACE_Avi_Close();
				}
				else if( FACE_GetProgramState() == PROGRAM_STATE_NONE
					&& MAIN_bEnding == TRUE )
				{	// game ending
					if( GAME_EndingEx() == 2 )
					{
						MAIN_bEnding = FALSE;
						DATA_WAVE_MusicStop();
						DS_QuitSound();
						DD_QuitGraph();
						PostQuitMessage( 0 );
					}
					MAIN_bFirst = TRUE;
				}
			}
			else if( MAIN_bNotify == FALSE )
			{
				FACE_Avi_Close1();
				MAIN_bNotify = TRUE;
			}
		}
		break;

    case WM_KEYDOWN:

		if( FACE_GetProgramState() == PROGRAM_STATE_AVI ) 
		{
			if( FACE_Avi_Close() == TRUE )
				break;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -