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

📄 filehandle.cpp

📁 用C++开发的一个人工神经网络小游戏
💻 CPP
字号:
// FileHandle.cpp: implementation of the CFileHandle class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EludeObstacle.h"
#include "FileHandle.h"
#include "Aerocraft.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern int g_NumObstacle;
extern  CObstacle ObstacleMap[10];

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFileHandle::CFileHandle()
{
	m_fileName = "ObstacleMap.txt";
}

CFileHandle::~CFileHandle()
{
	
}

void CFileHandle::init()
{
	
	if(m_IndexFile.Open(m_fileName,CFile::modeRead))
	{}
	else
	{
		m_numMap = 0;
		//AfxMessageBox("文件不能被打开!!!");
		return;
	}
	
	m_IndexFile.SeekToBegin();
	
	char character[1];
	character[1] = NULL;
	m_IndexFile.SeekToBegin();

	m_numMap = 0;
	CMenu *mainmenu;
	mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单
	while (m_IndexFile.Read(character,1))
	{
		if(character[0] == 'O')
		{
			m_numMap++;
			CString name;
			CString temp2(m_numMap + 48);
			name = "自定关卡" + temp2;
			(mainmenu->GetSubMenu (5))->AppendMenu(MF_STRING,IDM_SaveMap1 + m_numMap - 1,_T(name)); //添加新的菜单项
			
		}
	}

	m_IndexFile.Close();

	/*
	Seek(11, CFile::current);
			while(character[0] != ' ' || character[0] != 'O')
			{
				for(int j = 0;j < 3;j++)
				{
					ObstacleMap[sequence]
				}
				sequence++;
			}

			break;
			*/

}

void CFileHandle::SaveCurrentMap()
{

	if(m_numMap >= 5)
	{
		AfxMessageBox("在一个文本文件中最多可以保存5幅地图,请把同一目录下的ObstacleMap.txt文件删除或改名,以保存更多的地图!");
		return;
	}

	if(m_IndexFile.Open(m_fileName,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite,NULL))
	{}
	else
	{
		AfxMessageBox("打开文件出错!!!");
		return;
	}
	m_IndexFile.SeekToEnd();
	/*
	CString pbuf = "abcde";
	m_IndexFile.Write(pbuf, 6);
	*/
	//(m_numMap + 1)
	
	//char pbuf[100];
	
	//m_numMap = 0;
	m_numMap++;
	CString pbuf = "";
	char temp[2];
	sprintf(temp,"%d",m_numMap);

	//pbuf += "\r\n";
	pbuf += "Obstacle";
	pbuf += temp;
	pbuf += "\r\n";
	
	
	for(int i = 0;i < g_NumObstacle;i++)
	{
		pbuf += transform(ObstacleMap[i].center.x);
		pbuf += ",";
		pbuf += transform(ObstacleMap[i].center.y);
		pbuf += ",";
		pbuf += transform((int)ObstacleMap[i].radius);
		pbuf += ",\r\n";
	}
	

	AfxMessageBox(pbuf);
	m_IndexFile.Write(pbuf, pbuf.GetLength());

	m_IndexFile.Close();


	CMenu *mainmenu;
	mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单
	//(mainmenu->GetSubMenu (6))->AppendMenu (MF_SEPARATOR);//添加分隔符
	CString name;
	CString temp2(m_numMap + 48);
	name = "自定关卡" + temp2;
	(mainmenu->GetSubMenu (5))->AppendMenu(MF_STRING,IDM_SaveMap1 + m_numMap - 1,_T(name)); //添加新的菜单项
	//DrawMenuBar(); //重画菜单
	
	
	AfxMessageBox("地图已经保存!");

}

CString CFileHandle::transform(int value)
{
	char temp[6];
	sprintf(temp,"%d",value);
	return temp;
}

int CFileHandle::ReadMap(int sequence)
{
	if(m_IndexFile.Open(m_fileName,CFile::modeRead))
	{}
	else
	{
		m_numMap = 0;
		//AfxMessageBox("文件不能被打开!!!");
		return 0;
	}
	
	char character[1];
	character[1] = NULL;
	m_IndexFile.SeekToBegin();

	for(int i = 0;i < sequence;i++)
	{
		while (m_IndexFile.Read(character,1))
		{
			if(character[0] == 'O')
			{
				break;
			}
		}
	}
	
	
	sequence = 0;
	char temp[6];
	m_IndexFile.Seek(10, CFile::current);
	

	//CString temp ="";
	
	character[0] = NULL;
	while(character[0] != 'O')
	{
		char tempChar[1];
		int n = 0;
		while(m_IndexFile.Read(tempChar,1))
		{			
			if(tempChar[0] == ','){temp[n] = '\0'; break;}
			temp[n] = tempChar[0];
			n++;
		}
		
		ObstacleMap[sequence].center.x = atoi(temp);
		n = 0;
		while(m_IndexFile.Read(tempChar,1))
		{
			if(tempChar[0] == ','){temp[n] = '\0'; break;}
			temp[n] = tempChar[0];
			n++;
		}
		ObstacleMap[sequence].center.y = atoi(temp);

		n = 0;
		while(m_IndexFile.Read(tempChar,1))
		{
			if(tempChar[0] == ','){temp[n] = '\0'; break;}
			temp[n] = tempChar[0];
			n++;
		}
		ObstacleMap[sequence].radius = atoi(temp);


		sequence++;
		
		if(m_IndexFile.GetLength() == m_IndexFile.Seek(2, CFile::current))
		{break;}

		
		m_IndexFile.Read(character,1);

		/*
		char b[2];
		b[0] = character[0];
		b[1] = '\0';

		
		//AfxMessageBox(b);
		*/
		m_IndexFile.Seek(-1, CFile::current);
		
		
	}
	
	g_NumObstacle = sequence;
	m_IndexFile.Close();
	return sequence;


}

⌨️ 快捷键说明

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