游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2520|回复: 6

敢问2007之----敢问哈希表在游戏程序中的作用

[复制链接]

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2007-4-18 13:32:00 | 显示全部楼层 |阅读模式
<游戏编程全接触>一书中说:"哈希表可以用来存储游戏中的不同的状态,便于在别的地方查询."

对于这一句话,我的理解是,哈希表就像是一个记录员,程序中不同的部分让记录员记录不同的状态,其它部分可以向记录员查询某个状态.

比如说,当前鼠标坐标记录为名叫MOUSE_POSITON的单元里,地图类要想知道当前鼠标坐标,就向哈希表查询:
HashTable.Find( MOUSE_POSITION )

但是,如此查询岂不是增加了许多麻烦?增加了许多额外的开销呢?

不知道我的理解是否正确,请大家说说自己的想法吧 [em10]

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2007-4-18 13:55:00 | 显示全部楼层

Re:敢问2007之----敢问哈希表在游戏程序中的作用

灌水的人多,解答问题的没得一个

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-4-18 15:32:00 | 显示全部楼层

Re:敢问2007之----敢问哈希表在游戏程序中的作用

不可能像你这么用的

一般是在角色列表里查找角色用的多

PS:这类问题应该自己动脑筋

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-4-18 15:52:00 | 显示全部楼层

Re:敢问2007之----敢问哈希表在游戏程序中的作用

hash只是数据结构,跟游戏木有直接的关系.
游戏直接面对的是游戏数据管理,你可以用hash table, array, linked list, tree, graph, 很多方式来实现.
比如:
CDataManager.GetInstance().GetData(MOUSE_POSITION);

内部实现可以根据不同情况直接
return m_IndexArray[MOUSE_POSITION];
或者
return m_HashTable.Find(MOUSE_POSITION);

hash table只是数据索引的一种方法,你也可以实现很多其他的方法
hash table的好处就是针对不同的key的数据类型,都只需要O(1)的索引时间.

另外hash的概念只是对索引进行一些处理而已
int a[100];
int index = 123456;
a[index % 100] = value;
这也可以算是hash algorithm

hash比较常用的地方是对字符串或者一个数据结构做索引.
希望能够帮你理解hash.

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2007-4-18 19:05:00 | 显示全部楼层

Re:敢问2007之----敢问哈希表在游戏程序中的作用

LS大哥的回答让我茅舍顿开啊,我看了您的《游戏结构》一文,不是很懂,您用字符串作为关健字查表,这样就多了许多的处理字符串的步聚了,为什么不用整数呢,定义几个宏或常量

还有,究竟这个游戏编程,数据结构要学到什么程度呢?

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2007-4-18 19:14:00 | 显示全部楼层

Re: Re:敢问2007之----敢问哈希表在游戏程序中的作用

bracelet: Re:敢问2007之----敢问哈希表在游戏程序中的作用

不可能像你这么用的

一般是在角色列表里查找角色用的多

PS:这类问题应该自己动脑筋

来吧PS吧,我的脸皮是轮胎皮,我是敢问2007!不耻下问!

[em9]

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-4-18 21:19:00 | 显示全部楼层

Re:敢问2007之----敢问哈希表在游戏程序中的作用

用宏、常量来索引编码,属于硬编码,基本没有可扩展性。

hash表之类主要用在获取类似 data[hash("名字")] 这种需求上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 18:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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