游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13972|回复: 21

[讨论] 在游戏地图中,如何判断周围障碍物的类型,也就是说如

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-9-5 09:41:00 | 显示全部楼层 |阅读模式
如题!希望各位高手指点 [em24]

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
发表于 2004-9-5 11:56:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

得到该地面的的图块索引值、然后查制定好了的表

10

主题

314

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
QQ
发表于 2004-9-5 21:08:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

其实我一开始也是不懂,听好多的高手说什么要做地图索引之类的天文东西。我差一点昏死。

说白了就是:你要建一个象书的目录一样的表。你可下载几个用C下的小游戏,看看原码,你会发现里面有如下的数组说明:
MAP_01[]={1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1
………………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,}
其实上面的就是所谓的地图索引啊。(我的上帝,是谁想出这艘注意的啊?呵呵)
然后你就可一调用地图了啊。比如你在DX中写游戏,你就可用它的位图调用语句BLT之类的函数来画地图了。

我也是刚学会的,可能说的不怎么对啊。呵呵

谢谢

7

主题

752

帖子

756

积分

高级会员

Rank: 4

积分
756
QQ
发表于 2004-9-5 21:18:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

拿一套RPG?作大???砩晕⒕??一下你就??悬c概念了....

1

主题

36

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2004-9-7 15:20:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

这不是策划版,怎么问程序的问题?

7

主题

752

帖子

756

积分

高级会员

Rank: 4

积分
756
QQ
发表于 2004-9-7 16:20:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

?也是企??知道的???啊....

1

主题

36

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2004-9-10 01:23:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

我是说这问题完全可以在程序版问

我来回答一下吧
比如一个4格地图
01
01

1是障碍0空地,把这个做个障碍表,用二维数组
int i[2][2]={0,1,0,1};

设玩家在左上那个格子(i[0][0])
向下走,就是到 i[0][0+1] 上去
if(i[0][1]==1)
{
不走;
}
else
{
走;
draw();
}

简单吧

7

主题

752

帖子

756

积分

高级会员

Rank: 4

积分
756
QQ
发表于 2004-9-10 03:46:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

他??的是表述"障??型".......不是障?有?o

7

主题

752

帖子

756

积分

高级会员

Rank: 4

积分
756
QQ
发表于 2004-9-11 16:45:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

怎??]人要回答呀???

地形分?,然後各自?索引值,所以可能是:

0102300A
E0010507
.............

障??料?⒊?轭?似上述的?幼印

例如0代表可行,0以外的皆?檎系K,但障?又有所分?,程式是要查表?是直接在程式?扰卸ň涂醋约毫?....。因此上面的程式除0以外,??a生分歧判??...

而你有多少?的地形便??绊??料的???,如果超?16?,便可能要使用FF?矶?x??e了,也就是一格地形的障?定?需要2??BYTE...(地形??e???不???^256?吧?...) [em10]

不?上述的?H就障?部分,如果有其他定?需要,地形?料或??要更??...而???上的地形?料也不??@???危??缒闶怯?ILE去拼?D的,自然就?需要??TILE的?D像??....

1

主题

36

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2004-9-12 22:09:00 | 显示全部楼层

Re:在游戏地图中,如何判断周围障碍物的类型,也就是说

地图模块设计案

·采用读地图文件*.map,后拼接地图位图数据的方式


·地图数据分两部分:

一 元素代表数据
如:
000000000000000
011111000000000
001111000000000
001111000000000
001110000000000
000100000000000
000000000000000
0代表地面
1代表山丘
根据这些数据换算为一个存在于内存的位图
元素代表数据的值所代表的地图元素待定

二 障碍数据
如:(这是上面地图的障碍图)
000000000000000
011111000000000
001111000000000
001111000000000
001110000000000
000100000000000
000000000000000
0代表角色能到达的区域
1代表不能到达处
在程序设计时用一段数组记录它,每个数组对应地图的一个块,每当主角要起身时,做判断:
if(要到达的地方不能到达 即为1)
不做动作
else
做动作


·地图元素数据转成位图数据后的操作是和普通的位图操作一样的


·地图文件*.map的结构

2字节                    作为专有地图文件标识       定为: 7g

20字节                   地图名称                   如:   ########山洞########

4字节                    地图宽                     如:   23    注意必须小于65535

4字节                    地图高                     如:   45    注意必须小于65535

若干字节(等于宽乘高)   地图元素代表数据

若干字节(等于宽乘高)   地图障碍数据


·地图在程序中的结构体

struct MAP
{
short mark; //标识
char name[20]; //地图名称
int w; //地图横向元素数目
int h; //地图纵向元素数目
char data1[100][100]; //地图元素代表数据
char data2[100][100]; //地图障碍数据
};


·读取地图函数

/**************************
如果loadmap函数
读取的是本组*.map文件返回1
不是则返回0
**************************/
int loadmap(char *filename,MAP *map) //filename是被读取的地图文件名,*map是用于传递地图数据的指针
{
FILE *fp;
int i,j; //临时变量
fp=fopen(filename,"rb"); //以2进制只读模式读取
fread(&map->mark,2,1,fp); //读取文件标记
if(map->mark!=0x6737) //检查是否为本组地图文件
{/*非本组地图文件处理*/
  fclose(fp);
  return 0;
}
else
{
  fread(map->name,20,1,fp);
  fread(&map->w,4,1,fp);
  fread(&map->h,4,1,fp);
/*循环读取数据,用二维数组表示是为了以后使用方便*/
  for(i=0;i<map->h;i++)
  for(j=0;j<map->w;j++)
  fread(&map->data1[j],1,1,fp);
  for(i=0;i<map->h;i++)
  for(j=0;j<map->w;j++)
  fread(&map->data2[j],1,1,fp);
  fclose(fp);
  return 1;
}
}


·绘制地图位图函数

/**************************
把地图数据的data1
即元素代表数据
翻译并绘制到一个BITMAP中
这个BITMAP可以当作
一个图片用以滚屏
**************************/
void drawmap(BITMAP *mappic,BITMAP *bmp,MAP *map) // *mappic指向地图元素图片,*bmp指向要被绘制BITMAP,*map指向地图数据
{
int i,j; //临时函数
/*把元素代表数据用二维数组表示的好处在此*/
for(i=0;i<map->h;i++)
for(j=0;j<map->w;j++)
switch(map->data1[j])
{/*可以认为下面两行是一个元素代表数据与地图元素图片间的一个引索表,根据地图元素图片的不同此表也不同*/
  case 'a':blit(mappic,bmp,0,0,j*20,i*20,20,20);break;
  case 'b':blit(mappic,bmp,20,0,j*20,i*20,20,20);break;
}
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-5 22:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表