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

📄 seditor.cpp

📁 战棋游戏的地图编辑器
💻 CPP
字号:
/************************************************************************************************
 *																								*
 * Map Editor																					*
 * Edition : DX1.0																				*
 * Editor module header.																		*
 * sEditor.cpp																					*
 *	Author : LightWing																			*
 *			Red Ants . SoftWorld . BeiJing														*
 *	(C)1998 7.15																				*
 *																								*
 ************************************************************************************************/

#include "ME_DX.h"
//#include <s_file.h>
//#include <crtdbg.h>

sEditor::sEditor()
{
	LastChange = new sMEE;
	bSaved = 1;
	ClipChange = NULL;
	layer = 1;
	mapWidth = 100;
	mapHeight = 100;
	levels = 3;
	ME_Changed = 0;
	ChangeStep = 0;
	weather = 0;
	szbkpic = 0;
	direct = 0;
	scrX = 0;
	scrY = 0;
	for(int i = 0; i < 5; i ++)
	{
		sERL[i] = (sRME **)new sRME[200][200];
	}
}

sEditor::~sEditor()
{
	delete LastChange;
}

void	sEditor::Quit()
{
	if(!bSaved)
	{
		display("地图未存盘,存盘退出吗?", &sRcw[4]);
	}
	else PostQuitMessage(0);
}

void	sEditor::NewMap()
{
	if(!bSaved)
	{
		display("地图未存盘,确定放弃吗?", &sRcw[4]);
	}
	else CreateMap();
}

void	sEditor::LoadMap()
{
}

void	sEditor::SaveMap()
{
	HFILE hFil;
	OFSTRUCT ofs;
	MapHeader mp;

	// set data value.
	mp.flags[0] = 'G';	mp.flags[1] = 'M';
	mp.flags[2] = 'A';	mp.flags[4] = 'P';
	mp.baseterrain = baseterrain;
	mp.headsize = sizeof(MapHeader);
	mp.width = width;
	mp.height = height;
	mp.levels = levels;
	mp.szbkpic = szbkpic;
	mp.direct = direct;
	mp.weather = weather;

	// open file for save.
	hFil = OpenFile(MapFile, &ofs, OF_WRITE);
	_llseek(hFil, 0, FILE_BEGIN);
	_lwrite(hFile,(char*)&mp, sizeof(MapHeader));

	for(int k = 0; k < levels; k++)
	{
		lpMap = sERL[k][LastChange->y * width];
		for(int i = 0; i < height; i ++)
		{
			for(int j = 0; j < width; j++)
			{
				_lwrite(hFil,(char*)&lpmap([i * width + j]), sizeof(sRME));
			}
		}
	}

//	restore the edit state.
//	CurWnd = PreWnd;
	ButtonPressed = PreButton;
}

void	sEditor::Help()
{
}

void	sEditor::Copy()
{
}

void	sEditor::Paste()
{
}

void	sEditor::Delete()
{
}

void	sEditor::Cut()
{
}

void	sEditor::Select()
{
}

void	sEditor::SelectME(int id1, int id2, int id3)
{
	if(id1 == 0 || id1 == 1 || id1 == 3) layer = 1;
	else layer = 2;

	CurClass = id1;
	CurPage = id2;
	CurME.index = me[id1][(id2)*6 + id3-1].index;
	CurME.height = me[id1][(id2)*6 + id3-1].height;
}

void	sEditor::ButtonYes()
{
	switch(ButtonPressed)
	{
	case 17:
		ButtonPressed = PreButton;
		//.....
		break;

	case 16:	// quit.
		SaveMap();
		PostQuitMessage(0);
		break;

	case 15:
		ButtonPressed = PreButton;
		//.....
		break;

	case 14:
		ButtonPressed = PreButton;
		//.....
		break;

	case 13:
		ButtonPressed = PreButton;
		//.....
		break;

	case 12:
		ButtonPressed = PreButton;
		CreateMap();
		break;
	}
	ButtonPressed = PreButton;
	
}

void	sEditor::ButtonNo()
{
	switch(ButtonPressed)
	{
	case 17:
		ButtonPressed = PreButton;
		//.....
		break;

	case 16:
		ButtonPressed = PreButton;
		PostQuitMessage(0);
		break;

	case 15:
		ButtonPressed = PreButton;
		//.....
		break;

	case 14:
		ButtonPressed = PreButton;
		//.....
		break;

	case 13:
		ButtonPressed = PreButton;
		//.....
		break;

	case 12:
		ButtonPressed = PreButton;
		//.....
		break;
	}
	ButtonPressed = PreButton;
}

void	sEditor::ButtonCancel()
{
	switch(ButtonPressed)
	{
	case 16:
		ButtonPressed = PreButton;
		display("           ",&sRcw[4]);
		break;

	case 15:
		//.....
		break;

	case 14:
		//.....
		break;

	case 13:
		//.....
		break;

	case 12:
		//.....
		break;
	}
	ButtonPressed = PreButton;
}

void sEditor::ChangeMap(int x, int y, sTME *me)
{
	if(bSaved) bSaved = FALSE;

	lpMap = sERL[l][LastChange->y * width];

	// Save the state before change.
	LastChange->l = layer;
	LastChange->x = x;
	LastChange->y = y;
	LastChange->mec.index = lpMap[x].index;
	LastChange->mec.height = lpMap[x].height;

	// Change the screen data
	lpMap[x].index = me->index;
	lpMap[x].height = me->height;
}


void sEditor::UnChange()
{
	lpMap = sERL[layer][LastChange->y * width];

	lpMap[LastChange->x].index = LastChange->mec.index;
	lpMap[LastChange->x].height = LastChange->mec.height;
	ME_Changed = 0;
}

void sEditor::CreateMap()
{
	int i,j,la;

	// clear the old data.
	for(la = 0; la < 5; la ++)
	{
		for( i = 0; i < 200; i ++ )
		{
			for( j = 0; j < 200; j ++)
			{
				sERL[la][i][j].index = 0;
				sERL[la][i][j].height = 0;
			}
		}
	}

	// initialize the map with base terrain.
	// the surface level.
	for(i = 0; i < mapHeight; i ++)
	{
		for( j = 0; j < mapWidth; j ++)
		{
			sERL[0][i][j].index = BaseTerrain;
			sERL[0][i][j].height = 1;
		}
	}
}

⌨️ 快捷键说明

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