- 5
- 0
- 约6.05千字
- 约 7页
- 2017-12-12 发布于河南
- 举报
数据结构在游戏中的简单应用
数据结构在游戏中的简单应用 /Program/Control/datastruct.htm作者:源代码之光 | 日期:2005-07-26 在游戏的编写中,不可避免的出现很多应用数据结构的地方,有些简单的游戏,只是由几个数据结构的组合,所以说,数据结构在游戏编程中扮演着很重要的角色。 本文主要讲述数据结构在游戏中的应用,其中包括对链表、顺序表、栈、队列、二叉树及图的介绍。读者在阅读本文以前,应对数据结构有所了解,并且熟悉C/C++语言的各种功用。好了,现在我们由链表开始吧!1、链表 在这一节中,我们将通过一个类似雷电的飞机射击游戏来讲解链表在游戏中的应用。在飞机游戏中,链表主要应用在发弹模块上。首先,飞机的子弹是要频繁的出现,消除,其个数也是难以预料的。链表主要的优点就是可以方便的进行插入,删除操作。我们便将链表这一数据结构引入其中。首先,分析下面的源代码,在其中我们定义了坐标结构和子弹链表。 struct CPOINT { int x; // X轴坐标 int y; // Y轴坐标 }; struct BULLET { struct BULLE* next; // 指向下一个子弹 CPOINT bulletpos; // 子弹的坐标 int m_ispeed; // 子弹的速度 }; 接下来的代码清单是飞机类中关于子弹的定义: class CMYPLANE { public: void AddBullet(struct BULLET*); // 加入子弹的函数,每隔一定时间加弹 void RefreshBullet(); // 刷新子弹 privated: struct BULLET *st_llMyBullet; // 声明飞机的子弹链表 }; 在void AddBullet(struct BULLET*)中,我们要做的操作只是将一个结点插入链表中,并且每隔一段时间加入,就会产生连续发弹的效果。 这是加弹函数主要的源代码: void AddBullet(struct BULLET*) { struct BULLET *st_llNew,*st_llTemp; // 定义临时链表 st_llNew=_StrucHead; // 链表头(已初始化) st_llNew-(BULLET st_llMyBullet *)malloc(sizeof(st_llMyBullet)); // 分配内存 st_llTemp= =_NewBullet; // 临时存值 st_llNew-next=st_llTemp-next; st_llTemp-next=st_llNew; } 函数Void RefreshBullet()中,我们只要将链表历遍一次就行,将子弹的各种数据更新,其中主要的源代码如下: while(st_llMyBullet-next!=NULL) { // 查找 st_llMyBullet-bulletpos.x-=m_ispeed; // 更新子弹数据 ……… st_llMyBullet=st_llMyBullet-next; // 查找运算 } 经过上面的分析,在游戏中,链表主要应用在有大规模删除,添加的应用上。不过,它也有相应的缺点,就是查询是顺序查找,比较耗费时间,并且存储密度较小,对空间的需求较大。 如果通过对游戏数据的一些控制,限定大规模的添加,也就是确定了内存需求的上限,可以应用顺序表来代替链表,在某些情况下,顺序表可以弥补链表时间性能上的损失。当然,应用链表,顺序表还是主要依靠当时的具体情况。那么,现在,进入我们的下一节,游戏中应用最广的数据结构 — 顺序表。2、顺序表 本节中,我们主要投入到RPG地图的建设中,听起来很吓人,但是在RPG地图系统中(特指砖块地图系统),却主要使用数据结构中最简单的成员 — 顺序表。 我们规定一个最简单的砖块地图系统,视角为俯视90度,并由许多个顺序连接的图块拼成,早期RPG的地图系统大概就是这样。我们这样定义每个图块: struct TILE // 定义图块结构 { int m_iAcesse; // 纪录此图块是否可以通过 …… // 其中有每个图块的图片指针等纪录 }; 当m_iAcesse=0,表示此图块不可通过,为1表示能通过。 我们生成如下地图: TI
您可能关注的文档
- 2014版九年级Unit6 When was it invented精讲精析及练习.docx
- 高中英语完形填空易错题文档.doc
- 练嘴宝典文档(全部).doc
- Unit 1 Do you want to watch a game show(导学案).doc
- 模块九第三单元.doc
- 常见蔬菜的英文名称-Vegetables.doc
- SQL 将txt文件导入sql数据库.docx
- 复旦大学自主招生题库!!.doc
- 2012年中考英语总复习作文.doc
- 2014年中考英语写作热门话题.doc
- 初中九年级英语Unit 13环境保护主题听说整合教学设计.docx
- 85分式方程及其解法课件人教版数学八年级上册.pptx
- 基于核心素养的博物馆主题说明文写作教学设计与实施——以九年级英语为例.docx
- 53一次函数的意义第课时课件浙教版八年级数学上册.pptx
- 大单元视角下“人民民主政权的巩固”与历史关键能力进阶教学设计——以初中历史中考复习课为例.docx
- 五年级数学下册典型例题解析人教版期末重点攻克.pptx
- 小学四年级信息技术《智启信息时代:查找网上信息的基石》教学设计及反思.docx
- 大疆域·大人口·大战略:中国国家空间认知的初步建构.docx
- 人教版(一年级起点)小学英语四年级上册Revision 1 Lesson 2教学设计.docx
- 大单元结构化复习:旧民主主义革命时期(18401919)的内忧外患与救亡图存.docx
有哪些信誉好的足球投注网站
文档评论(0)