文档介绍:数据结构作用(游戏篇)
02月19日 星期二 20:43
在游戏编写中, 不可避免出现很多应用数据结构地方, 有些简单游戏, 只是由多个数据结构组合, 所以说, 数据结构在游戏编程中饰演着很关键角色。
本文关键讲述数据结构在游戏中应用, 其中包含对链表、 次序表、 栈、 队列、 二叉树及图介绍。 读者在阅读本文以前, 应对数据结构有所了解, 而且熟悉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