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

📄 cbgame.cpp

📁 赤壁之战的游戏源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#define	GAME_SOUND_STEP0	1
#define	GAME_SOUND_STEP1	-2500
#define	GAME_SOUND_STEP2	-1500
#define	GAME_SOUND_STEP3	-800
#define	GAME_SOUND_STEP4	-300
#define	GAME_SOUND_STEP5	0

// defined in CBMain.cpp
BOOL GAME_ReadOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
	char fname[65];
	FILE *fp;

	if( path != 0 )
	{
		strcpy( fname, path );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	fp = fopen( fname, "rt" );
	if( !fp )
	{
		ErrorMessage( hwnd, GAME_ERROR_ID+10,"Cannot open Option file: ", fname );
		return FALSE;
	}

	// 读
	fscanf( fp, "%d %d %d %d %d\n", 
		&GAME.nSpeed,				// 运行速度,每秒帧数由1000除得
		&GAME.nSpeedScroll,			// 滚屏速度
		&GAME.nVolume,				// 音效的音量大小,range from 0 to -5000,1时关闭
		&GAME.nVolumeCD,			// 音乐的音量大小,range from 0 to -5000,1时关闭
		&GAME.bFightEnabled );		// AVI的开关
		//&GAME.bFogOfWar );			// 开关阴影

	// 直接设置音效大小
	int nVolume;
	switch( GAME.nVolume )
	{
	case	0:
		nVolume = GAME_SOUND_STEP0;		break;
	case	1:
		nVolume = GAME_SOUND_STEP1;		break;
	case	2:
		nVolume = GAME_SOUND_STEP2;		break;
	case	3:
		nVolume = GAME_SOUND_STEP3;		break;
	case	4:
		nVolume = GAME_SOUND_STEP4;		break;
	case	5:
		nVolume = GAME_SOUND_STEP5;		break;
	default:
		nVolume = 0;
	}
	DS_VolumeSound( nVolume );
	if( nVolume > 0 )
	{
		EFFECT_bEnable = FALSE;
		DS_EnableSound( FALSE );
	}
	else if( DS_IfSoundEnable() == FALSE )
	{
		EFFECT_bEnable = TRUE;
		DS_EnableSound( TRUE );
		//-------------
//		DATA_WAVE_MusicPlay( GAME.nMusicID );
		//-------------
	}

	if( GAME_nDisk == 0 )
	{// 标准版和增强版
		GAME.nVolumeCD = GAME.nVolume;	// 目前,音乐和音效是一回事
	}

	// 设置音效和音乐大小
	//MCI_DGV_SETAUDIO_VOLUME 
	// 直接设置CD音乐大小
	switch( GAME.nVolumeCD )
	{
	case	0:
		if( MUSIC_bEnable == TRUE )
		{
			DATA_WAVE_MusicStop();
			MUSIC_bEnable = FALSE;
		}
		break;
	case	1:
	case	2:
	case	3:
	case	4:
	case	5:
		if( MUSIC_bEnable == FALSE )
		{
			MUSIC_bEnable = TRUE;
			DATA_WAVE_MusicReplay();
		}
		break;
	}

	fclose( fp );
	return TRUE;
}

// 写游戏设置文件
BOOL GAME_WriteOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
	char fname[65];
	FILE *fp;

	if( path != 0 )
	{
		strcpy( fname, path );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	fp = fopen( fname, "wt" );
	if( !fp )
	{
		ErrorMessage( hwnd, GAME_ERROR_ID+11,"Cannot open Option file: ", fname );
		return FALSE;
	}

	// 写
	fprintf( fp, "%d %d %d %d %d\n", 
		GAME.nSpeed,				// 运行速度
		GAME.nSpeedScroll,			// 滚屏速度
		GAME.nVolume,				// 音效的音量大小,range from 0 to -5000,1时关闭
		GAME.nVolumeCD,				// 音乐的音量大小,range from 0 to -5000,1时关闭
		GAME.bFightEnabled );			// AVI的开关
		//GAME.bFogOfWar );			// 开关阴影

	// 直接设置音效大小
	int nVolume;
	switch( GAME.nVolume )
	{
	case	0:
		nVolume = GAME_SOUND_STEP0;		break;
	case	1:
		nVolume = GAME_SOUND_STEP1;		break;
	case	2:
		nVolume = GAME_SOUND_STEP2;		break;
	case	3:
		nVolume = GAME_SOUND_STEP3;		break;
	case	4:
		nVolume = GAME_SOUND_STEP4;		break;
	case	5:
		nVolume = GAME_SOUND_STEP5;		break;
	default:
		nVolume = 0;
	}
	DS_VolumeSound( nVolume );
	if( nVolume > 0 )
	{
		EFFECT_bEnable = FALSE;
		DS_EnableSound( FALSE );
	}
	else if( DS_IfSoundEnable() == FALSE )
	{
		EFFECT_bEnable = TRUE;
		DS_EnableSound( TRUE );
		//-------------
//		DATA_WAVE_MusicPlay( GAME.nMusicID );
		//-------------
	}

	if( GAME_nDisk == 0 )
	{// 标准版和增强版
		GAME.nVolumeCD = GAME.nVolume;	// 目前,音乐和音效是一回事
	}

	// 设置音效和音乐大小
	//MCI_DGV_SETAUDIO_VOLUME 
	// 直接设置CD音乐大小
	switch( GAME.nVolumeCD )
	{
	case	0:
		if( MUSIC_bEnable == TRUE )
		{
			DATA_WAVE_MusicStop();
			MUSIC_bEnable = FALSE;
		}
		break;
	case	1:
	case	2:
	case	3:
	case	4:
	case	5:
		if( MUSIC_bEnable == FALSE )
		{
			MUSIC_bEnable = TRUE;
			DATA_WAVE_MusicReplay();
		}
		break;
	}

	fclose( fp );
	return TRUE;
}
///////////

///////////
// 存盘

// Oct.6.1997
// defined in CBEvent.cpp, 保存事件数据
extern WORD EventPos[34][5];
// defined in CBDraw.cpp
// 被选中为目的地的单元,要闪烁显示它的边界
extern int DRAW_BLINK_nCounter;
extern int DRAW_BLINK_nDelay;
extern BOOL DRAW_BLINK_bDraw;
extern WORD DRAW_BLINK_nID;
extern int DRAW_BLINK_nSave;

// 存盘
// nSlot	:	存盘文件号
//#define		_L_DEBUG
#ifdef	_L_DEBUG
char *game_lwc;
char * map_lib_lwc;
char * data_lib_lwc;
char * other_ncounter_lwc ;
char * other_lwc;
char * ctrl_tasklist_lwc;
char * ctrl_nhitcounter_lwc;
char * ctrl_hitsrc_lwc;
char * byte_lwc;
char * strnamemed_lwc;
char * map_wregiondata_lwc;
char * cmap_shadowex_lwc;
char * map_wunitdata_lwc;
char * map_wgrounddata_lwc;
char * savearr_lwc;
char * noffx_lwc;
char * noffy_lwc;
char * face_current_prompt_block_lwc;
char * face_currentcommandunitid_lwc;
char * face_currentcommandunitflag_lwc;
char * ctrl_task_savecmdunit_lwc;
#endif
BOOL GAME_Save( int nSlot )
{
	char name[32];
	GAME_MakeSaveName( nSlot, ".SAV", name );

	FILE *fp;

	fp = fopen( name, "wb" );
	if( !fp )
	{
		OutputDebugString( "GAME_Save Error: Cannot open file!\n" );
		return FALSE;
	}

	// 写存盘头信息
	char strInfo[64];
	GAME_CalcSaveInfo( strInfo );
	BYTE nLen = strlen( strInfo );
	fwrite( &nLen, sizeof(BYTE), 1, fp );
	fwrite( strInfo, nLen, 1, fp );

	//lwc1
	// 保存GAME结构(char *)&
	Lgame_save ( fp ,sizeof ( GAME ) ,(char *)&GAME );
	#ifdef	_L_DEBUG
	//fwrite( &GAME, sizeof( GAME ), 1, fp );
	if ((game_lwc=new char [sizeof(GAME)]) == NULL )
	{
		return ( 0 );
	}
	test (game_lwc ,sizeof ( GAME ) , (char *)&GAME );
	#endif

	// 保存MAP_Lib结构
	Lgame_save ( fp ,sizeof ( MAP_Lib ) ,(char *)&MAP_Lib );
	#ifdef	_L_DEBUG
	if ((map_lib_lwc=new char [sizeof (MAP_Lib)]) == NULL )
	{
		return ( 0 );
	}
	test ( map_lib_lwc ,sizeof ( MAP_Lib ) ,(char *)&MAP_Lib );
	//fwrite( &MAP_Lib, sizeof( MAP_Lib ), 1, fp );
	#endif

	// 保存DATA结构
	Lgame_save ( fp ,sizeof ( DATA_Lib ) ,(char *)&DATA_Lib );
	#ifdef	_L_DEBUG
	if (( data_lib_lwc=new char [ sizeof(DATA_Lib)]) == NULL )
	{
		return ( 0 );
	}
	test ( data_lib_lwc,sizeof ( DATA_Lib ) ,(char *)&DATA_Lib );
	//fwrite( &DATA_Lib, sizeof( DATA_Lib ), 1, fp );
	#endif

	// 保存OTHER结构
	Lgame_save ( fp ,sizeof ( OTHER_nCounter ) ,(char *)&OTHER_nCounter );
	#ifdef	_L_DEBUG
	if (( other_ncounter_lwc=new char [sizeof ( OTHER_nCounter) ]) == NULL )
	{
		return ( 0 );
	}
	test ( other_ncounter_lwc ,sizeof ( OTHER_nCounter ) ,(char *)&OTHER_nCounter );
	#endif

	Lgame_save ( fp ,sizeof ( OTHER ) ,(char *)&OTHER );
	#ifdef	_L_DEBUG
	if ((other_lwc =new char [sizeof (OTHER) ]) == NULL )
	{
		return ( 0 );
	}
	test ( other_lwc ,sizeof ( OTHER ) ,(char *)&OTHER );
	//fwrite( &OTHER_nCounter, sizeof( int ), 1, fp );
	//fwrite( &OTHER, sizeof( OTHER ), 1, fp );
	#endif

	// 保存命令队列
	Lgame_save ( fp ,sizeof ( CTRL_TaskList ) ,(char *)&CTRL_TaskList );
	#ifdef	_L_DEBUG
	if (( ctrl_tasklist_lwc=new char [sizeof (CTRL_TaskList ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( ctrl_tasklist_lwc ,sizeof ( CTRL_TaskList ) ,(char *)&CTRL_TaskList );
	//fwrite( &CTRL_TaskList, sizeof( CTRL_TaskList ), 1, fp );
	#endif

	// 保存焦点
	Lgame_save ( fp ,sizeof ( CTRL_nHitCounter ) ,(char *)&CTRL_nHitCounter );
	#ifdef	_L_DEBUG
	if ((ctrl_nhitcounter_lwc =new char [sizeof (CTRL_nHitCounter) ]) == NULL )
	{
		return ( 0 );
	}
	test ( ctrl_nhitcounter_lwc ,sizeof ( CTRL_nHitCounter ) ,(char *)&CTRL_nHitCounter );
	#endif

	Lgame_save ( fp ,sizeof ( CTRL_hitSrc ) ,(char *)&CTRL_hitSrc );
	#ifdef	_L_DEBUG
	if (( ctrl_hitsrc_lwc=new char [sizeof (CTRL_hitSrc ) ]) == NULL )
	{
		return ( 0 );
	}
	test( ctrl_hitsrc_lwc ,sizeof ( CTRL_hitSrc ) ,(char *)&CTRL_hitSrc );
	//fwrite( &CTRL_nHitCounter, sizeof( CTRL_nHitCounter ), 1, fp );
	//fwrite( &CTRL_hitSrc, sizeof( CTRL_hitSrc ), 1, fp );
	#endif

	// 保存战场图文件名
	nLen = strlen( GAME.strNameMED );
	Lgame_save ( fp ,sizeof ( BYTE ) ,(char *)&nLen );
	#ifdef	_L_DEBUG
	if ((byte_lwc =new char [sizeof (BYTE ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( byte_lwc ,sizeof ( BYTE ) ,(char *)&nLen );
	#endif

	Lgame_save ( fp ,sizeof ( nLen ) ,GAME.strNameMED );
	#ifdef	_L_DEBUG
	if (( strnamemed_lwc=new char [sizeof (nLen ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( strnamemed_lwc ,sizeof ( nLen ) ,GAME.strNameMED );
	//fwrite( &nLen, sizeof( BYTE ), 1, fp );
	//fwrite( GAME.strNameMED, nLen, 1, fp );
	#endif

	// 保存阴影数组
	Lgame_save ( fp ,sizeof ( MAP_wRegionData ) ,(char *)MAP_wRegionData );
	#ifdef	_L_DEBUG
	if (( map_wregiondata_lwc=new char [sizeof ( MAP_wRegionData) ]) == NULL )
	{
		return ( 0 );
	}
	test ( map_wregiondata_lwc,sizeof ( MAP_wRegionData ) ,(char *)MAP_wRegionData );
	#endif

	Lgame_save ( fp ,sizeof (cMap_shadowEx ) ,(char *)cMap_shadowEx );
	#ifdef	_L_DEBUG
	if (( cmap_shadowex_lwc=new char [sizeof (cMap_shadowEx ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( cmap_shadowex_lwc ,sizeof (cMap_shadowEx ) ,(char *)cMap_shadowEx );
	//fwrite( MAP_wRegionData, sizeof( MAP_wRegionData ), 1, fp );
	//fwrite( cMap_shadowEx, sizeof( cMap_shadowEx ), 1, fp );
	#endif

	// 保存UNIT数组
	Lgame_save ( fp ,sizeof (MAP_wUnitData ) ,(char *)MAP_wUnitData );
	#ifdef	_L_DEBUG
	if ((map_wunitdata_lwc =new char [sizeof (MAP_wUnitData ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( map_wunitdata_lwc ,sizeof (MAP_wUnitData ) ,(char *)MAP_wUnitData );
	//fwrite( MAP_wUnitData, sizeof( MAP_wUnitData ), 1, fp );
	#endif

	// 保存地形数组(第一层即可)
	Lgame_save ( fp ,sizeof ( MAP_wGroundData ) ,(char *)MAP_wGroundData );
	#ifdef	_L_DEBUG
	if ((map_wgrounddata_lwc =new char [sizeof (MAP_wGroundData ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( map_wgrounddata_lwc ,sizeof ( MAP_wGroundData ) ,(char *)MAP_wGroundData );
	//fwrite( MAP_wGroundData, sizeof( MAP_wGroundData ), 1, fp );
	#endif

	// 保存计算机策略
	SaveAIPos();
	Lgame_save ( fp ,sizeof ( SaveArr ) ,(char *)SaveArr );
	#ifdef	_L_DEBUG
	if (( savearr_lwc=new char [sizeof (SaveArr ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( savearr_lwc ,sizeof ( SaveArr ) ,(char *)SaveArr );
	//fwrite( SaveArr, sizeof( SaveArr ), 1, fp );
	#endif

	// 保存当前屏幕位置
	int width = DRAW_rcScreen.right - DRAW_rcScreen.left;
	int height = DRAW_rcScreen.bottom - DRAW_rcScreen.top;
	int nOffX = DRAW_rcScreen.left + (width>>1);
	int nOffY = DRAW_rcScreen.top + (height>>2)+12;
	Lgame_save ( fp ,sizeof ( int ) ,(char *)&nOffX );
	#ifdef	_L_DEBUG
	if ((noffx_lwc =new char [sizeof (int ) ]) == NULL )
	{
		return ( 0 );
	}
	test( noffx_lwc ,sizeof ( int ) ,(char *)&nOffX );
	#endif

	Lgame_save ( fp ,sizeof ( int ) ,(char *)&nOffY );
	#ifdef	_L_DEBUG
	if ((noffy_lwc =new char [sizeof ( int ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( noffy_lwc ,sizeof ( int ) ,(char *)&nOffY );
	//fwrite( &nOffX, sizeof( int ), 1, fp );
	//fwrite( &nOffY, sizeof( int ), 1, fp );
	#endif

	// 保存信息显示栏
	Lgame_save ( fp, sizeof ( FACE_CURRENT_PROMPT_BLOCK ), (char *)&FACE_CURRENT_PROMPT_BLOCK);
	#ifdef	_L_DEBUG
	if ((face_current_prompt_block_lwc =new char [sizeof ( FACE_CURRENT_PROMPT_BLOCK) ]) == NULL )
	{
		return ( 0 );
	}
	test ( face_current_prompt_block_lwc ,sizeof ( FACE_CURRENT_PROMPT_BLOCK ), (char *)&FACE_CURRENT_PROMPT_BLOCK);
	//fwrite(	&FACE_CURRENT_PROMPT_BLOCK, sizeof( PROMPT_BLOCK ), 1, fp );
	#endif
	// 保存命令组
	Lgame_save ( fp ,sizeof ( int ) ,(char *)&FACE_CurrentCommandUnitID );
	#ifdef	_L_DEBUG
	if ((face_currentcommandunitid_lwc =new char [sizeof ( int ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( face_currentcommandunitid_lwc ,sizeof ( int ) ,(char *)&FACE_CurrentCommandUnitID );
	#endif

	Lgame_save ( fp ,sizeof ( DWORD ) ,(char *)&FACE_CurrentCommandUnitFlag );
	#ifdef	_L_DEBUG
	if (( face_currentcommandunitflag_lwc=new char [sizeof ( DWORD ) ]) == NULL )
	{
		return ( 0 );
	}
	test ( face_currentcommandunitflag_lwc ,sizeof ( DWORD ) ,(char *)&FACE_CurrentCommandUnitFlag );
	//fwrite( &FACE_CurrentCommandUnitID, sizeof( int ), 1, fp );
	//fwrite(	&FACE_CurrentCommandUnitFlag, sizeof( DWORD ), 1, fp );
	#endif

	// 用来保存当前的命令组

⌨️ 快捷键说明

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