/*-------------------------------------------
| CEdit.cpp
| 编辑类代码
| (c) mochsh
---------------------------------------------*/
#include <windows.h>
#include <stdio.h>
#include "CEdit.h"
#define random(x) (rand()%x)
#define randomize() srand(GetTickCount())
/************************************************************
* 函数名: CEdit(...)
* 功能: 构造函数
* (c) mochsh, 2004
*************************************************************/
CEdit::CEdit( void )
{
hWnd = NULL;
bFullScr = FALSE;//默认为窗口模式
ScreenW = 640;//
ScreenH = 480;//默认分辨率640*480
ColorBits = 16;//默认颜色深度为16色
LevelHeight = 20;//默认为20象素
MaxWObject = 340;//对象矩形图片的最大宽度
MaxHObject = 300;//对象矩形图片的最大高度
MaxLevel =(ScreenH+MaxHObject)/LevelHeight;
MinLevel =(-MaxHObject)/LevelHeight;
ScrPos.x = 0;
ScrPos.y = 0;
ZeroMemory( &Scene, sizeof(Scene) );
lAppState = 0;
lUpdateScreen = 1;
lSaveState = 0;
lEditState = 0;//地面
GRNKind = 0;
oldGRNKind = GRNKind;
SfPointSceneID = -1;
StartPosState = -1;
SelectSwitch = -1;
SelectObject = NULL;
ZeroMemory( sceFilePath, sizeof(sceFilePath) );
KeyKB = NULL;
KeyMouse = NULL;
for( WORD i=0;i<100;i++)
ShowOb[i];
randomize();
}
/************************************************************
* 函数名: ~CEdit(...)
* 功能: 析构函数
* (c) mochsh, 2004
*************************************************************/
CEdit::~CEdit( void )
{
DeleteSceneData(Scene);
}
/********************************************************
* 函数名: GetRect(...)
* 功能: 获取一个矩形结构
* (c) mochsh, 2004
*********************************************************/
RECT CEdit::GetRect(LONG left,LONG top,LONG right,LONG bottom)
{
RECT rect = {left,top,right,bottom};
return rect;
}
/************************************************************
* 函数名: LoadImageSurf(...)
* 功能: 载入图像给表面
* (c) mochsh, 2004
*************************************************************/
void CEdit::LoadImageSurf( void )
{
//载入通道图像
if( DDraw.CreateBMPSurface(lpDDSPassageway,0,0,
"pic\\Passageway.bmp",DDSCAPS_SYSTEMMEMORY) )
DDraw.DDSetColorKey( lpDDSPassageway, CLR_INVALID );
//载入地面
DDraw.CreateBMPSurface(lpDDSGroundRC,0,0,
"pic\\GroundRc.bmp",DDSCAPS_SYSTEMMEMORY);
//载入大树图像
if( DDraw.CreateBMPSurface(lpDDSHighTree,0,0,
"pic\\HighTree.bmp",DDSCAPS_SYSTEMMEMORY) )
DDraw.DDSetColorKey( lpDDSHighTree, CLR_INVALID );
//载入小树图像
if( DDraw.CreateBMPSurface(lpDDSLowTree,0,0,
"pic\\LowTree.bmp",DDSCAPS_SYSTEMMEMORY) )
DDraw.DDSetColorKey( lpDDSLowTree, CLR_INVALID );
//载入开关区域指出的角色出现位置标志
DDraw.CreateBMPSurface(lpDDSRoleNewArea,0,0,
"pic\\RoleNewArea.bmp",DDSCAPS_SYSTEMMEMORY);
//载入刚刚开始运行游戏角色的出现区域的标志
if( DDraw.CreateBMPSurface(lpDDSRoleAppearArea,0,0,
"pic\\RoleAppearArea.bmp",DDSCAPS_SYSTEMMEMORY) )
DDraw.DDSetColorKey( lpDDSRoleAppearArea, CLR_INVALID );
}
/************************************************************
* 函数名: InitDirectX(...)
* 功能: 初始化DirectX以及载入声音图像数据
* (c) mochsh, 2004
*************************************************************/
void CEdit::InitDirectX( HWND _hWnd )
{
hWnd = _hWnd;
//>>>>>> 初始化CDInput >>>>>>>>>>>
Input.Set_bFullScr( FALSE );
Input.InitDInput( hWnd );
KeyKB = Input.Get_KeyKB();
KeyMouse = Input.Get_KeyMouse();
//>>>>>> 初始化CDDraw >>>>>>>>>>>
DDraw.InitDDraw(
hWnd,
bFullScr,
ScreenW, ScreenH,
ColorBits );
LoadImageSurf();//为表面载入图像数据
//>>>>>> 初始化CText >>>>>>>>>>>
Text.Set_lpDDSBack(DDraw.Get_lpDDSBack());
}
/************************************************************
* 函数名: RecordGroundDesc(...)
* 功能: 记录新生成的地面描述
* (c) mochsh, 2004
*************************************************************/
void CEdit::RecordGroundDesc( GROUNDDESC *GrnDesc, SCENE *sce )
{
if( sce==NULL )
return;
//为地面方块开辟空间
GROUNDDESC * grndesc = new GROUNDDESC;
*grndesc = *GrnDesc;
grndesc->next = NULL;
GROUNDDESC * grnTemp = sce->Grn;
//生成第一个地面方块
if( grnTemp==NULL )
sce->Grn = grndesc;
//不是第一个地面方块
else {
//求地面方块链表的最后一个成员
while( 1 )
{
if( grnTemp->next!=NULL )
grnTemp = grnTemp->next;
else
break;
}
//把新地面方块加入链表
grnTemp->next = grndesc;
}
//计数
++sce->lGrnN;
}
/************************************************************
* 函数名: RecordObject(...)
* 功能: 记录新生成的对象
* (c) mochsh, 2004
*************************************************************/
void CEdit::RecordObject( OBJECT * ob, SCENE * sce )
{
if( sce==NULL )
return;
//为地面方块开辟空间
OBJECT * object = new OBJECT;
*object = *ob;
object->next = NULL;
OBJECT * obTemp = sce->Object;
//生成第一个对象
if( obTemp==NULL )
sce->Object = object;
//不是第一个对象
else {
//求对象链表的最后一个对象
while( 1 )
{
if( obTemp->next!=NULL )
obTemp = obTemp->next;
else
break;
}
//把新对象加入对象链表
obTemp->next = object;
}
//计数
++sce->lObjectN;
}
/***********************************************
* 函数名: NewScene(...)
* 功能: 根据指定的场景大小和场景ID新建一个场景
* (c) mochsh, 2004
************************************************/
void CEdit::NewScene( void )
{
//>>>>>> 生成场景数据 >>>>>>>
//地面方块的大小为80*80
LONG hN = (LONG)(Scene.SceneH/80);
LONG wN = (LONG)(Scene.SceneW/80);
Scene.lGrnN = hN * wN;
//为地面方块开辟空间
GROUNDDESC * grnTemp = NULL;
for( WORD n=0;n<Scene.lGrnN;n++ )
{
if(grnTemp==NULL) {
grnTemp = new GROUNDDESC;
Scene.Grn = grnTemp;
grnTemp->next = NULL;
}
else {
grnTemp->next = new GROUNDDESC;
grnTemp = grnTemp->next;
grnTemp->next = NULL;
}
}
//初始化地面方块数据
grnTemp = Scene.Grn;
WORD i = 0;
while( grnTemp!=NULL )
{
grnTemp->GroundID.left = GRNKind;
grnTemp->GroundID.right = GRNKind;
grnTemp->GroundID.top = GRNKind;
grnTemp->GroundID.bottom= GRNKind;
GetSrcRect(grnTemp,TRUE);
grnTemp->Index = i;
grnTemp = grnTemp->next;
++i;
}
Scene.lSwitchFieldN = 0;
Scene.pSwitchField = NULL;
Scene.lObjectN = 0;
Scene.Object = NULL;
//地形方块的大小为20*20
hN = (LONG)(Scene.SceneH/20);
wN = (LONG)(Scene.SceneW/20);
Scene.lSquareCount = hN * wN;
Scene.Square = new WORD[hN * wN];
ZeroMemory(Scene.Square,sizeof(WORD)*(hN*wN));
//把角色出现区域初始化为场景的中央区域
Scene.RoleAppearRect.left = Scene.SceneW/2-50;
Scene.RoleAppearRect.right= Scene.SceneW/2+50;
Scene.RoleAppearRect.top = Scene.SceneH/2-50;
Scene.RoleAppearRect.bottom=Scene.SceneH/2+50;
lSaveState = 0;//当前场景数据还未存为文件
//进入主进程
lAppState = 1;
lUpdateScreen = 1;
}
BOOL CEdit::GetSceneFileName( DWORD dwFlag )
{
// 设置OPENFILENAME结构
OPENFILENAME ofn ;//
ZeroMemory(&ofn, sizeof(ofn));
static const TC
vc-map.rar_VC map_VC6.0 map_vc direct_地图 _地图编辑
版权申诉
112 浏览量
2022-09-23
23:01:50
上传
评论
收藏 60KB RAR 举报
alvarocfc
- 粉丝: 105
- 资源: 1万+
最新资源
- java毕业设计-网上订餐系统源码+数据库.zip
- 基于双闭环PID控制的一阶倒立摆simscape建模matlab源码.zip
- 基于51单片机+lcd12864显示俄罗斯方块小游戏MCU软件源代码.zip
- 基于单片机的智能计算器设计MCU软件源代码.zip
- 基于Javaweb的药店管理系统源码+数据库.zip
- (自适应手机端)网络建站广告公司网站pbootcms模板 品牌策划设计类网站源码下载.zip
- (自适应手机端)手机软件APP下载类网站Pbootcms模板 游戏软件应用网站源码下载.zip
- (自适应手机端)生活百科资讯文章博客类网站pbootcms模板 绿色新闻博客网站源码下载.zip
- 基于OpenCV+MySQL+QT实现的人脸识别考勤系统源码.zip
- java毕业设计网上订餐系统源码+数据库.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈