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

📄 cbfile.cpp

📁 赤壁之战(游戏原码)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/////////////////
// CBFile.cpp	:	《赤壁》地图图素全局数据结构
// CBFile.cpp	:	<< chibi >> global map data structure
//
// 版本0010		:	1996年9月18日
// v0012		:	Nov.7.1996
// v0013		:	Feb.5.1997
// v0020		:	Feb.28.1997,add function named DATA_ReadDATAFile()
//
// 编写			:	刘刚
// written by	:	Liu Gang
//
// 编译器		:	Visual C++ 4.2
// Compiler		:	Visual C++ 4.2
//
// 版权			:	北京前导软件有限公司		1996-1997
// Copyright	:	WayAhead Software Co.Ltd.	1996-1997
/////////////////
// 此文件包所有对地形和单元图素的读取
#include "stdafx.h"
#include <stdio.h>	// for FILE
#include "Assert.h"	// Error message

#include "CBMap.h"
#include "CBGame.h"	
#include "L_Scan.h"    //lwc
#ifdef	_GAME_
	#include "CBDraw.h"
	#include "CBData.h"
	#include "CBMini.h"
#endif

///////////
// 从文件读取数据
// 读取地形数据
BOOL MAP_ReadGroundFile( HWND hwnd, LPCTSTR filename , LPCTSTR pathDAT, LPCTSTR pathBMP )
{
	char fname[_MAX_FNAME];
	if( pathDAT != 0 )
	{
		strcpy( fname, pathDAT );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );

	CScan_read FSCAN;
	FSCAN.scan_open (fname);//lwc ground.dat
	//FILE * fp=fopen(fname,"rt");
	/*if(!fp)
	{
		ErrorMessage( hwnd, MAP_ERROR_ID+0,"Cannot open ground map data file: ",fname );
		return FALSE;
	}
	*/
	
	// reset value to zero
	memset( MAP_Lib.Ground, MAP_DATA_NONE, sizeof(struct MAP_GROUND_LIB_STRUCT)*MAP_GROUND_LIB_NUM );
	
	// read number of graphic files
	FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.nGLibNum ) );
	//fscanf( fp, "%d\n", &MAP_Lib.nGLibNum );
	for( int i=0; i< MAP_Lib.nGLibNum; i++ )
	{
		// read file, layer and type attributes
		/*		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d,%d\n", 
					  &MAP_Lib.Other[i].nMaxFrame, 
					  &MAP_Lib.Other[i].szItem.cx, &MAP_Lib.Other[i].szItem.cy,
					  &MAP_Lib.Other[i].nID );
		*/
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n",
			                  &MAP_Lib.Ground[i].nFile,
							  &MAP_Lib.Ground[i].nLayer,
							  &MAP_Lib.Ground[i].nType) );
		/*fscanf(fp,"%d,%d,%d\n",
			&MAP_Lib.Ground[i].nFile,&MAP_Lib.Ground[i].nLayer,&MAP_Lib.Ground[i].nType);*/
		// read graphic file names
		//char strFile1[33], strFile2[33], strFile[_MAX_FNAME];
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n",&MAP_Lib.Ground[i].nID));
		//fscanf( fp, "%s %s\n", strFile1, strFile2 );
		/*strcpy( strFile, pathBMP );
		strcat( strFile, strFile1 );
		strcat( strFile, ".bmp");
		strcpy( MAP_Lib.Ground[i].strMaskFile, strFile );
		strcpy( strFile, pathBMP );
		strcat( strFile, strFile2 );
		strcat( strFile, ".bmp");
		strcpy( MAP_Lib.Ground[i].strFile, strFile );*/

		// read window name
		/*fscanf( fp,"%s\n", strFile1 );
		strcpy( fname, pathBMP ); strcat( fname, strFile1 );
		strcpy( MAP_Lib.Ground[i].strWnd, fname );*/

		// read window rectangle
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d,%d\n",
			&MAP_Lib.Ground[i].rcWnd.left,
			&MAP_Lib.Ground[i].rcWnd.top,
			&MAP_Lib.Ground[i].rcWnd.right,
			&MAP_Lib.Ground[i].rcWnd.bottom) );
		//fscanf(fp,"%d,%d,%d,%d\n",&MAP_Lib.Ground[i].rcWnd.left,&MAP_Lib.Ground[i].rcWnd.top,&MAP_Lib.Ground[i].rcWnd.right,&MAP_Lib.Ground[i].rcWnd.bottom);
		// read item size and height
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n",
							  &MAP_Lib.Ground[i].szItem.cx,
							  &MAP_Lib.Ground[i].szItem.cy,
							  &MAP_Lib.Ground[i].nHeight) );
		//fscanf(fp,"%d,%d,%d\n",
		//	&MAP_Lib.Ground[i].szItem.cx,&MAP_Lib.Ground[i].szItem.cy,&MAP_Lib.Ground[i].nHeight);
		// read data arrage style, column and row numbers
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d\n",&MAP_Lib.Ground[i].szNum.cx,&MAP_Lib.Ground[i].szNum.cy));
		//fscanf(fp,"%d,%d\n",&MAP_Lib.Ground[i].szNum.cx,&MAP_Lib.Ground[i].szNum.cy);
		//ASSERT(MAP_Lib.Ground[i].szNum.cx<=GROUND_ITEM_COL);
		//ASSERT(MAP_Lib.Ground[i].szNum.cy<=GROUND_ITEM_ROW);

		// read data for each column and encode
		for(int j=0; j<MAP_Lib.Ground[i].szNum.cx; j++)
		{
			FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,",&MAP_Lib.Ground[i].nItemHeights[j]));
			//fscanf(fp,"%d,",&MAP_Lib.Ground[i].nItemHeights[j]);
			for( int s=0; s<MAP_GROUND_ITEM_ROW; s++)
				MAP_Lib.Ground[i].nItems[j][s] = MAP_DATA_NONE;
			for(int k=0; k<MAP_Lib.Ground[i].nItemHeights[j]; k++)
			{
				struct MAP_GROUND_CODE_STRUCT code_struct;
				code_struct.nFile=MAP_Lib.Ground[i].nFile;
				code_struct.nAttr = MAP_SPECIAL_NONE;
				//code_struct.nLayer=MAP_Lib.Ground[i].nLayer;
				//code_struct.nType=MAP_Lib.Ground[i].nType;
				code_struct.nCol=j;
				code_struct.nRow=k;
				MAP_Lib.Ground[i].nItems[j][k]=MAP_GroundEnCode(code_struct);
			}
		}
	}
	FSCAN.scan_close ();
	//fclose(fp);
	return TRUE;
}// end of MAP_ReadGroundFile()
//////////////////////

//////////////////////
// 读取单元数据
BOOL MAP_ReadUnitFile( HWND hwnd, LPCTSTR filename , LPCTSTR pathDAT, LPCTSTR pathBMP )
{
	char fname[_MAX_FNAME];
	CScan_read FSCAN;

	if( pathDAT != 0 )
	{
		strcpy( fname, pathDAT );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	FSCAN.scan_open (fname);
	/*
	FILE * fp = fopen( fname, "rt" );//unit.dat
	if( !fp )
	{
		ErrorMessage( hwnd, MAP_ERROR_ID+1, "Cannot open unit map data file: ", fname );
		return FALSE;
	}
	*/
	// reset value to zero
	memset( MAP_Lib.Unit, MAP_DATA_NONE, sizeof(struct MAP_UNIT_LIB_STRUCT)*MAP_UNIT_LIB_NUM );

	// read number of graphic files
	FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.nULibNum ));
	//fscanf( fp, "%d\n", &MAP_Lib.nULibNum );
	for( int i=0; i< MAP_Lib.nULibNum ; i++ )
	{
		// read file number
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.Unit[i].nFile ));
		//fscanf( fp, "%d\n", &MAP_Lib.Unit[i].nFile );
		// read graphic file names
		// read graphic file names
		char strFile1[33], strFile2[33], strFile[_MAX_FNAME];
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%s %s\n", strFile1, strFile2 ));
		//fscanf( fp, "%s %s\n", strFile1, strFile2 );
		strcpy( strFile, pathBMP );
		strcat( strFile, strFile1 );
		strcat( strFile, ".bmp");
		strcpy( MAP_Lib.Unit[i].strMaskFile, strFile );
		strcpy( strFile, pathBMP );
		strcat( strFile, strFile2 );
		strcat( strFile, ".bmp");
		strcpy( MAP_Lib.Unit[i].strFile, strFile );

		// read item size and type 
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,
			"%d,%d,%d,%d\n", 
			&MAP_Lib.Unit[i].szItem.cx, &MAP_Lib.Unit[i].szItem.cy, 
			&MAP_Lib.Unit[i].nType, &MAP_Lib.Unit[i].nLocationSize ));
		/*
		fscanf( fp, "%d,%d,%d,%d\n", 
			&MAP_Lib.Unit[i].szItem.cx, &MAP_Lib.Unit[i].szItem.cy, 
			&MAP_Lib.Unit[i].nType, &MAP_Lib.Unit[i].nLocationSize );
		*/
		// read data column and row numbers
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d\n", &MAP_Lib.Unit[i].szNum.cx, &MAP_Lib.Unit[i].szNum.cy ));
		//fscanf( fp, "%d,%d\n", &MAP_Lib.Unit[i].szNum.cx, &MAP_Lib.Unit[i].szNum.cy );
		// encode
		for( int j=0; j< MAP_Lib.Unit[i].szNum.cy; j++ )
		{
			struct MAP_UNIT_CODE_STRUCT code_struct;
			code_struct.nPlayer = 0;
			code_struct.nFile = MAP_Lib.Unit[i].nFile;
			code_struct.nCol = 0;
			code_struct.nRow = j;
			code_struct.nLayer = 0;
			code_struct.nFrame = 0;
			MAP_Lib.Unit[i].nItems[j] = MAP_UnitEnCode( code_struct );
		}
	}
	FSCAN.scan_close ();
	//fclose( fp );

	return TRUE;
}// end of MAP_ReadUnitFile()
//////////////////////

//////////////////////
// 读取特殊数据
BOOL MAP_ReadSpecFile( HWND hwnd, LPCTSTR filename , LPCTSTR path )
{
	char fname[_MAX_FNAME];
	CScan_read FSCAN;

	if( path != 0 )
	{
		strcpy( fname, path );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	
	FSCAN.scan_open (fname);//lwc
/*	FILE * fp = fopen( fname, "rt" );	//data\spec.dat
	if( !fp )
	{
		ErrorMessage( hwnd, MAP_ERROR_ID+2, "Cannot open special unit map data file: ", fname );
		return FALSE;
	}
*/
	// reset
	memset( MAP_Lib.Special, 0, sizeof(DWORD)*MAP_SPECIAL_MAX );
	int num=0, i=0;
	FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
	//fscanf( fp, "%d\n", &num );
	while( num != -1 )
	{
		
		struct MAP_UNIT_CODE_STRUCT code_s;
		code_s.nPlayer=0;
		code_s.nCol=0;
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d \n", &code_s.nFile, &code_s.nRow ));
		//fscanf( fp, "%d,%d\n", &code_s.nFile, &code_s.nRow );
		MAP_Lib.Special[i]=MAP_UnitEnCode( code_s );
		i++;
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d", &num ));
		//fscanf( fp, "%d", &num );
	}
	FSCAN.scan_close ();
	//fclose( fp );
	return TRUE;
}// end of MAP_ReadSpecFile()
//////////////////////

//////////////////////
// 读取探测数据
// read senser file, declared in CBMap.h
BOOL MAP_ReadSenserFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
	char fname[_MAX_FNAME];
	CScan_read FSCAN;

	if( path != 0 )
	{
		strcpy( fname, path );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	FSCAN.scan_open (fname);//lwc   senser.dat
	/*
	FILE * fp = fopen( fname, "rb" );
	if( !fp )
	{
		ErrorMessage( hwnd, MAP_ERROR_ID+3, "Cannot open senser data file: ", fname );
		return FALSE;
	}
	*/
	// initialize
	memset( MAP_ptSenser, 0, sizeof(POINT)*2*MAP_SENSER_MAX*MAP_SENSER_MAX*8 );

	// y为偶数时
	for( int i=0; i<MAP_SENSER_MAX; i++ )
	{
		int num=0;
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
		//fscanf( fp, "%d\n", &num );
		for( int j=0; j<num; j++ )
		{
			FSCAN.l_scan (sscanf (FSCAN.expand_buf,
						  "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
				          &MAP_ptSenser[0][i][j*8+0].x,&MAP_ptSenser[0][i][j*8+0].y,
				          &MAP_ptSenser[0][i][j*8+1].x,&MAP_ptSenser[0][i][j*8+1].y,
						  &MAP_ptSenser[0][i][j*8+2].x,&MAP_ptSenser[0][i][j*8+2].y,
						  &MAP_ptSenser[0][i][j*8+3].x,&MAP_ptSenser[0][i][j*8+3].y,
						  &MAP_ptSenser[0][i][j*8+4].x,&MAP_ptSenser[0][i][j*8+4].y,
						  &MAP_ptSenser[0][i][j*8+5].x,&MAP_ptSenser[0][i][j*8+5].y,
						  &MAP_ptSenser[0][i][j*8+6].x,&MAP_ptSenser[0][i][j*8+6].y,
						  &MAP_ptSenser[0][i][j*8+7].x,&MAP_ptSenser[0][i][j*8+7].y
						 ));
			/*
			fscanf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
				&MAP_ptSenser[0][i][j*8+0].x,&MAP_ptSenser[0][i][j*8+0].y,
				&MAP_ptSenser[0][i][j*8+1].x,&MAP_ptSenser[0][i][j*8+1].y,
				&MAP_ptSenser[0][i][j*8+2].x,&MAP_ptSenser[0][i][j*8+2].y,
				&MAP_ptSenser[0][i][j*8+3].x,&MAP_ptSenser[0][i][j*8+3].y,
				&MAP_ptSenser[0][i][j*8+4].x,&MAP_ptSenser[0][i][j*8+4].y,
				&MAP_ptSenser[0][i][j*8+5].x,&MAP_ptSenser[0][i][j*8+5].y,
				&MAP_ptSenser[0][i][j*8+6].x,&MAP_ptSenser[0][i][j*8+6].y,
				&MAP_ptSenser[0][i][j*8+7].x,&MAP_ptSenser[0][i][j*8+7].y
			);
			*/
		}
	}
	// y为奇数时
	for( i=0; i<MAP_SENSER_MAX; i++ )
	{
		int num=0;
		FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
		//fscanf( fp, "%d\n", &num );
		for( int j=0; j<num; j++ )
		{
			FSCAN.l_scan (sscanf (FSCAN.expand_buf,
				"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
				&MAP_ptSenser[1][i][j*8+0].x,&MAP_ptSenser[1][i][j*8+0].y,
				&MAP_ptSenser[1][i][j*8+1].x,&MAP_ptSenser[1][i][j*8+1].y,
				&MAP_ptSenser[1][i][j*8+2].x,&MAP_ptSenser[1][i][j*8+2].y,
				&MAP_ptSenser[1][i][j*8+3].x,&MAP_ptSenser[1][i][j*8+3].y,
				&MAP_ptSenser[1][i][j*8+4].x,&MAP_ptSenser[1][i][j*8+4].y,
				&MAP_ptSenser[1][i][j*8+5].x,&MAP_ptSenser[1][i][j*8+5].y,
				&MAP_ptSenser[1][i][j*8+6].x,&MAP_ptSenser[1][i][j*8+6].y,
				&MAP_ptSenser[1][i][j*8+7].x,&MAP_ptSenser[1][i][j*8+7].y
			));
			/*
			fscanf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
				&MAP_ptSenser[1][i][j*8+0].x,&MAP_ptSenser[1][i][j*8+0].y,
				&MAP_ptSenser[1][i][j*8+1].x,&MAP_ptSenser[1][i][j*8+1].y,
				&MAP_ptSenser[1][i][j*8+2].x,&MAP_ptSenser[1][i][j*8+2].y,
				&MAP_ptSenser[1][i][j*8+3].x,&MAP_ptSenser[1][i][j*8+3].y,
				&MAP_ptSenser[1][i][j*8+4].x,&MAP_ptSenser[1][i][j*8+4].y,
				&MAP_ptSenser[1][i][j*8+5].x,&MAP_ptSenser[1][i][j*8+5].y,
				&MAP_ptSenser[1][i][j*8+6].x,&MAP_ptSenser[1][i][j*8+6].y,
				&MAP_ptSenser[1][i][j*8+7].x,&MAP_ptSenser[1][i][j*8+7].y
			);
			*/
		}
	}
//	fclose( fp );
	FSCAN.scan_close ();
	// initialize Location data
	{
	}
	return TRUE;
}// end of ReadSenserFile()
//////////////////////

//////////////////////
// 读单元图素动画数据定义文件
// declared in file CBMAP.h
// hwnd			:	错误处理时窗口句柄
// filename		:	单元图素数据文件名
// path			:	文件路径
// reutrn value	:	TRUE if succeeded
#ifdef	_MAP_COMPRESS_
BOOL MAP_ReadAniSeqFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
	char fname[_MAX_FNAME];
	CScan_read FSCAN;

	if( path != 0 )
	{
		strcpy( fname, path );
		strcat( fname, filename );
	}
	else	strcpy( fname, filename );
	FSCAN.scan_open (fname);//lwc
	/*FILE * fp = fopen( fname, "rb" );//aniseq01.dat

⌨️ 快捷键说明

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