是不是每种游戏都有游戏地图编辑器器??

>> 一个迷宫游戏,还有地图编辑器呢,完全源码
一个迷宫游戏,还有地图编辑器呢,完全源码
所属分类:
下载地址:
g002.zip文件大小:229.92 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
一个迷宫游戏,还有地图编辑器呢,完全源码-a maze game, the map editor? Entirely FOSS
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
AboutForm.frm1.88 kB04-08-00 23:53
AboutForm.frx1.52 kB04-08-00 23:53
DForm.frm7.68 kB04-09-00 00:25
DForm.frx778.00 B04-09-00 00:25
GForm.frm20.48 kB04-09-00 00:22
GForm.frx778.00 B04-09-00 00:22
Haunted1.17 kB04-09-00 02:11
Haunted409.00 B04-09-00 00:12
HelpForm.frm1.63 kB04-09-00 00:02
HelpForm.frx778.00 B04-09-00 00:02
NewLevelForm.frm1.92 kB04-08-00 23:51
NewLevelForm.frx778.00 B04-08-00 23:51
1.38 kB04-09-00 00:42
Beanz.sml424.00 B04-08-00 16:32
Confusion.sml424.00 B04-08-00 16:14
Cross934.00 B04-08-00 22:45
Da934.00 B04-08-00 15:37
Frames.sml424.00 B04-08-00 23:08
Hedges.sml424.00 B04-08-00 22:58
HollowCubes.sml934.00 B04-08-00 22:48
Icy424.00 B04-08-00 22:59
Pipes.sml424.00 B04-08-00 22:55
Rainbow424.00 B04-08-00 23:02
Square424.00 B04-08-00 22:53
The424.00 B04-08-00 16:30
Which934.00 B04-08-00 22:51
Wireframes.sml424.00 B04-08-00 16:28
0.ico766.00 B04-08-00 14:24
1.ico766.00 B04-08-00 14:25
2.ico766.00 B04-08-00 14:26
3.ico766.00 B04-08-00 14:27
0.ico766.00 B04-08-00 14:18
1.ico766.00 B04-08-00 14:19
2.ico766.00 B04-08-00 14:21
3.ico766.00 B04-08-00 14:22
0.ico766.00 B03-30-00 18:03
1.ico766.00 B03-30-00 18:04
2.ico766.00 B03-30-00 18:00
3.ico766.00 B03-30-00 18:03
0.ico766.00 B04-08-00 14:28
1.ico766.00 B04-08-00 14:30
2.ico766.00 B04-08-00 14:31
3.ico766.00 B04-08-00 14:33
0.ico766.00 B04-08-00 14:02
1.ico766.00 B04-08-00 14:03
2.ico766.00 B04-08-00 14:04
3.ico766.00 B04-08-00 14:05
0.ico766.00 B04-08-00 13:56
1.ico766.00 B04-08-00 13:55
2.ico766.00 B04-08-00 13:57
3.ico766.00 B04-08-00 13:57
0.ico766.00 B04-08-00 13:58
1.ico766.00 B04-08-00 13:59
2.ico766.00 B04-08-00 14:00
3.ico766.00 B04-08-00 14:01
0.ico766.00 B04-08-00 13:53
1.ico766.00 B04-08-00 13:55
2.ico766.00 B04-08-00 13:52
3.ico766.00 B04-08-00 13:54
0.ico766.00 B04-05-00 18:34
1.ico766.00 B04-05-00 20:23
10.ico766.00 B04-08-00 16:20
100.ico766.00 B04-08-00 19:05
11.ico766.00 B04-08-00 16:21
12.ico766.00 B04-08-00 19:07
13.ico766.00 B04-08-00 19:08
14.ico766.00 B04-08-00 19:09
15.ico766.00 B04-08-00 22:20
16.ico766.00 B04-08-00 22:22
17.ico766.00 B04-08-00 22:23
18.ico766.00 B04-08-00 22:24
19.ico766.00 B04-08-00 22:25
2.ico766.00 B04-05-00 20:25
20.ico766.00 B04-08-00 22:26
21.ico766.00 B04-08-00 22:27
22.ico766.00 B04-08-00 22:27
23.ico766.00 B04-08-00 22:27
24.ico766.00 B04-08-00 22:28
25.ico766.00 B04-08-00 22:28
26.ico766.00 B04-08-00 22:28
27.ico766.00 B04-08-00 22:29
28.ico766.00 B04-08-00 22:29
29.ico766.00 B04-08-00 22:30
3.ico766.00 B04-05-00 20:26
30.ico766.00 B04-08-00 22:31
31.ico766.00 B04-08-00 22:31
4.ico766.00 B04-05-00 20:27
5.ico766.00 B04-05-00 20:29
6.ico766.00 B04-05-00 20:30
7.ico766.00 B04-05-00 20:30
8.ico766.00 B04-08-00 16:17
9.ico766.00 B04-08-00 16:19
Paused.bmp2.65 kB04-08-00 16:51
Bone1.ico766.00 B03-30-00 20:52
Bone2.ico766.00 B03-30-00 20:57
Bone3.ico766.00 B03-30-00 21:00
Bone4.ico766.00 B03-30-00 20:58
0.ico766.00 B04-08-00 15:27
1.ico766.00 B04-08-00 15:49
10.ico766.00 B04-08-00 18:49
100.ico766.00 B04-08-00 15:54
11.ico766.00 B04-08-00 18:57
12.ico766.00 B04-08-00 19:04
13.ico766.00 B04-08-00 21:59
14.ico766.00 B04-08-00 21:59
15.ico766.00 B04-08-00 22:01
16.ico766.00 B04-08-00 22:01
17.ico766.00 B04-08-00 22:03
18.ico766.00 B04-08-00 22:04
19.ico766.00 B04-08-00 22:04
2.ico766.00 B04-08-00 15:57
20.ico766.00 B04-08-00 22:06
21.ico766.00 B04-08-00 22:08
22.ico766.00 B04-08-00 22:09
23.ico766.00 B04-08-00 22:10
24.ico766.00 B04-08-00 22:11
25.ico766.00 B04-08-00 22:12
26.ico766.00 B04-08-00 22:13
27.ico766.00 B04-08-00 22:17
28.ico766.00 B04-08-00 22:19
3.ico766.00 B04-08-00 21:53
4.ico766.00 B04-08-00 15:28
5.ico766.00 B04-08-00 15:53
6.ico766.00 B04-08-00 16:02
7.ico766.00 B04-08-00 16:10
8.ico766.00 B04-08-00 18:30
9.ico766.00 B04-08-00 21:54
changeop.wav4.04 kB02-01-95 16:12
complete.wav49.76 kB08-20-93 12:16
dead.wav79.35 kB08-20-93 12:16
exit.wav31.97 kB04-23-99 22:22
intro.wav70.96 kB08-20-93 12:15
levelstart.wav49.76 kB08-20-93 12:15
pop.wav3.02 kB05-07-96 15:07
step0.wav8.63 kB11-21-98 21:43
step1.wav7.37 kB11-21-98 21:43
step2.wav8.53 kB11-21-98 21:43
step3.wav7.80 kB11-21-98 21:43
SaveMazeForm.frm3.62 kB04-08-00 23:51
SaveMazeForm.frx778.00 B04-08-00 23:51
SelectLevelForm.frm2.09 kB04-09-00 00:22
SelectLevelForm.frx778.00 B04-09-00 00:22
3.67 kB04-08-00 23:58
&Source&0.00 B04-23-00 11:18
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载g002.zip
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:135.269ms - init:0.1;find:0.9;t:0.4;tags:0.4;related:95.2;comment:0.2; 27.69
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧& & & & 说起即时战略游戏,我第一时间想起魔兽争霸,这个不知道陪伴我多少个日日夜夜,让我哭让我笑的游戏,让我想起了sky,moon,grubby等人牵动心弦的战斗历程,让我想起了当年日日守在电脑前专注的欣赏着wcg的每一场比赛,想起了当年学校门口的网吧里我跟我哥在浩方上奋力的拼杀着,想起了很多年前和寝室室友打赌谁输谁请一天杂粮饼的承诺。哎,不说了,说起来都是泪啊。那么进入本文的正题吧,用D3D加mfc编写一个即时战略游戏。
& & & &其实这个游戏只是一个很简单的demo,各位千万不要把他想复杂了,但是我也实现了即时战略游戏的基本需求:地图编辑器,人物寻路,动态行走,网络同步等功能。在写这个游戏之前,我也在网上拼命的搜寻着相关资料,却发现这方面的资料十分残缺,许多都是只言片语,所以我觉得我需要把自己掌握的东西与大家一起分享,这样也能让跟我一样迷茫的朋友从中多少有点收获。
& & & &任何一个像样的游戏都离不开一个地图编辑器,我们可以在这个编辑器上面去创建修改我们想要的地图,本文里的地图编辑器就是用mfc编写,而地图文件用xml储存,这样查看的话也很方便。下面给出一个地图文件的样式:
&?xml version=&1.0&?&
&class type=&house& width=&50& height=&50&&
&item left=&780& top=&460&/&
&class type=&tree& width=&50& height=&50&&
&item left=&940& top=&410&/&
& & & &这个文件很简单,class节点就是地图上元素的类型,目前支持house和tree,item则是每一个该类型元素所在的位置。下面我们来看一下如何用mfc来编写这个地图编辑器。
& & & &首先,在我们的程序界面上需要一个可以实时渲染地图场景的窗口,这个窗口用d3d来渲染,那么这个窗口怎么实现,大家应该还记得在d3d初始化的时候会指定一个窗口的句柄,于是我便定义一个名叫m_DrawWnd的CStatic类型的变量,然后在OnInitDialog函数里面创建该窗口即可:
m_DrawWnd.Create(0,0,CRect(10,10,810,610),this,0);
m_DrawWnd.ShowWindow(1);
& & & 然后在d3d初始化的时候指定该窗口的句柄:
m_d3dpp.hDeviceWindow & & & & & & &= m_DrawWnd.m_hW
m_d3dpp.BackBufferWidth & & & & & &= 800;
m_d3dpp.BackBufferHeight & & & & & = 600;
& & & 是不是很简单,不过,等等,渲染那一块怎么办呢,mfc是消息驱动来重绘窗体的,很难做到实时渲染的啊,不要急,我仔细看了下mfc 的文档,发现WM_KICKIDLE这个消息,看下这个消息的官方解释:
So, how do you handle idle processing in a dialog-based app where the dialog has no parent window? Fortunately, it's trivial. The MFC developers provided a hook: WM_KICKIDLE.
RunModalLoop sends this MFC-private message repeatedly when there are no messages in your dialog's queue just the way CWinThread::Run calls OnIdle. RunModalLoop even passes a counter and increments it for you. In effect, WM_KICKIDLE
is the dialog equivalent of OnIdle. (Historical note: earlier versions of MFC did the modal/modeless swap and WM_KICKIDLE thing for property sheets. Apparently it worked so well
they decided to make all modal dialogs modeless.)
& & & 其实就可以简单的看做是窗体的空闲消息,如果我们需要做实时渲染的话,那么这个消息的返回值应该为1,否则返回0就可以了。(我在看了mfc源码后发现,当我们的消息为wm_mousemove或者wm_ncmousemove的时候,会重置idle状态,如果当前没有接受到新的消息时,且idle为true的时候,会去发送WM_KICKIDLE消息,以上只针对模式对话框)。当然了,实时渲染的代价便是cpu的上升,所以会有一个idlecount来记录WM_KICKIDLE被send
的次数,感兴趣的朋友可以自己去试试,看看其中究竟是怎么一回事。
& & & 好了,渲染部分已经差不多了,下面我们来看下怎么去显示地图。我们的地图大小是,但是我们设定的bufferSize只有800*600,所以我们需要去移动地图来显示地图的不同位置,怎么移动,按住鼠标左键拖动即可,代码实现如下:
GetCursorPos(&p);
if(m_bDown)
m_iScreenLeft-=(p.x-m_iDownX);
m_iScreenTop-=(p.y-m_iDownY);
m_iDownX=p.x;
m_iDownY=p.y;
if(m_iScreenLeft&0)
m_iScreenLeft=0;
if(m_iScreenLeft&800)
m_iScreenLeft=800;
if(m_iScreenTop&0)
m_iScreenTop=0;
if(m_iScreenTop&600)
m_iScreenTop=600;
CString strP
strPoint.Format(L&Left:%d,Top:%d&,m_iScreenLeft,m_iScreenTop);
SetWindowText(strPoint);
& & & &是不是很简单啊,那么下面我们该怎么往这个地图场景上添加元素呢,这个也不难,我创建一个imagelist,往里面添加我想要的图片,然后绑定listctrl就可以了啊。
m_TexListControl.MoveWindow(850,350,120,200);
m_TexListControl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_TexListControl.SetIconSpacing(CSize(100, 90));
m_ImageList.Create(60,60,ILC_COLORDDB|ILC_COLOR32, 1,1);
WCHAR buf[255]={0};
GetCurrentDirectory(255,buf);
CString strDir=
bit.Attach(LoadPicture(strDir+L&\\img\\tree.jpg&));
m_ImageList.Add(&bit,RGB(0,0,0));
bit.Detach();
bit.Attach(LoadPicture(strDir+L&\\img\\house.jpg&));
m_ImageList.Add(&bit,RGB(0,0,0));
bit.Detach();
m_TexListControl.SetImageList(&m_ImageList,LVSIL_NORMAL);
m_TexListControl.InsertItem(0,L&tree&,0);
m_TexListControl.InsertItem(1,L&house&,1);
& & & & &是不是也很简单啊,然后我们需要去记录当前地图上每一个位置的状态,比如说在地图的宽300,高200 的位置上有没有物体啊什么的,这里我们需要一个变量来记录这些,于是我定义:
byte m_MapInfo[600*2][800*2];
& & & &这里一定要注意,我们需要修改堆栈的大小,默认堆栈的大小为1MB,我们这里设置为4MB,否则会报错,属性-&链接器-&系统-&堆栈保留大小 &设置为4096000即可。
if(m_bNewBuildVaild)
for(int i=0;i&100;i++)
if(m_BuildingInfo[i]==0)
m_BuildingInfo[i]=new sBuildingI
m_BuildingInfo[i]-&type=m_strSelectT
CRect NewBuildRect(m_iScreenLeft+m_NewBuildRect.left,m_iScreenTop+m_NewBuildRect.top,m_iScreenLeft+m_NewBuildRect.right,m_iScreenTop+m_NewBuildRect.bottom);
m_BuildingInfo[i]-&rect=NewBuildR
for(int row=0;row&NewBuildRect.Height();row++)
for(int col=0;col&NewBuildRect.Width();col++)
m_MapInfo[NewBuildRect.top+row][NewBuildRect.left+col]=i;
m_strSelectTex.Empty();
& & & &当我们选中一个物体,放置在地图上的时候,便会调用上面的代码,在这里我说一下,m_MapInfo存储的元素为200的时候,表明该位置为空,否则为新建物体的id。值得注意的是,物体之间是不能重叠的,这个我在onmousemove里面做了相应的判断。
m_DrawWnd.GetWindowRect(&r);
if(!m_strSelectTex.IsEmpty() && PtInRect(&r,p))
D3DSURFACE_DESC
m_TexList[m_strSelectTex]-&GetLevelDesc(0,&desc);
int width=desc.W
int height=desc.H
int left=p.x-r.left-width/2;
int top=p.y-r.top-height/2;
left=floor(left*1.0/10)*10;
top=floor(top*1.0/10)*10;
m_NewBuildRect.SetRect(left,top,left+width,top+height);
CRect NewBuildRect(m_iScreenLeft+left,m_iScreenTop+top,m_iScreenLeft+left+width,m_iScreenTop+top+height);
m_bNewBuildVaild=
if(NewBuildRect.top&0)
m_bNewBuildVaild=
}else if(NewBuildRect.left&0)
m_bNewBuildVaild=
}else if(NewBuildRect.bottom&1199)
m_bNewBuildVaild=
}else if(NewBuildRect.right&1599)
m_bNewBuildVaild=
for(int row=0;row&NewBuildRect.Height();row++)
for(int col=0;col&NewBuildRect.Width();col++)
if(m_MapInfo[NewBuildRect.top+row][NewBuildRect.left+col]!=200)
m_bNewBuildVaild=
& & & & 好了,这一部分的主体代码差不多就这些,其他的代码大家可以看下源码,有什么不懂的可以一起交流下,下一节我将给大家带来即时战略游戏中非常重要的一章:寻路。
& & & & 本文有不足之处,还望大家多多指正。
本文已收录于以下专栏:
相关文章推荐
魔兽争霸、星际争霸,这两款游戏相信大家并不陌生,在游戏中有地图编辑功能,只要编辑好地图我们就可以开始玩了,可见游戏地图在游戏中发挥着多么重要的作用,它承载这非常多的数据,比如地形标示,一些做得比较精密...
大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发。上一章我们为场景添加了Manager,以及玩家初始化信息。
下面我们来完成以下功能:导航网格的设置、摄像机的操控、以及制作单位预设。...
说起即时战略游戏,不得不提的一个问题是如何把一个物体从一个位置移动到另一个位置,当然,我说的不是瞬移,而是一个移动的过程,那么在这个移动的过程中我们如何来规划路线呢,这就不得不提到寻路了。
这篇文章里我准备向大家介绍下我封装的一个基础D3D库:DXLib。有了这样一个类库,可以减少很多无用功以及繁琐的工作,使我们的效率大大提高。
#define DIRECTINPUT_...
说到网络同步,这真是一个网络游戏的重中之重,一个好的网络同步机制,可以让玩家的用户体验感飙升,至少,我玩过的魔兽争霸在网络同步方面做得非常好,即便是网络状况很不稳定,依然可以保证用户数据不会出现意想不...
大家好,我是Zander,我们接着来开发Rts3D即时战略性游戏,本次所需要的资源大家可以在上篇文章所给的链接中下载。
     首先、我们要在下载好的工程包中找到Scenes文件夹并打开RTSMa...
假如有一个类控制着游戏中某个关卡的敌人。所有敌人都有一个特点:只要敌人发现玩家了,它就会追赶玩家。最重要的是其他敌人会被通知到玩家的位置,并且也开始追赶玩家。
所以实现这个类应该向下面这样写。
...
说到网络同步,这真是一个网络游戏的重中之重,一个好的网络同步机制,可以让玩家的用户体验感飙升,至少,我玩过的魔兽争霸在网络同步方面做得非常好,即便是网络状况很不稳定,依然可以保证用户数据不会出现意想不...
初入3D游戏编程,便跃跃欲试在这里写点东西,一是方便自己日后查阅,二是为有需要的朋友提供一些便利.第一章 3D游戏编程入门视频游戏本质上是一个持续不断的循环,它执行逻辑并且在屏幕上绘制图象----通常...
大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发。这一章我们讲处理HUD的显示与隐藏,首先我们找到在第一章所提供的下载链接中找到Resources--》Content3中找到HUD.U...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一种探究式教育游戏的地图编辑器的设计与实现--mepper
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

参考资料

 

随机推荐