- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
游戏开发案例在数据结构教学中应用实践
游戏开发案例在数据结构教学中应用实践
文章编号:1672-5913(2009)06-0132-04
摘要:“数据结构”课程是计算机专业最重要的专业基础课,游戏开发技术是计算机应用技术最前沿的分支之一,实现由基础到前沿的跨越,是学生的希望所在,也是检验教学成功与否的重要指标。本文总结了游戏开发过程中的成功经验,及时反馈并自觉落实到教学过程中,对教师和学生都是有益的尝试。
关键词:数据结构;游戏开发;跨越
中图分类号:G642
文献标识码:B
从事“数据结构”教学的教师往往遇到的学生困惑是:数据结构有什么用?数据结构与计算机新技术的开发有什么关系?类似的问题一方面反映了学生对计算机新技术的渴望与困惑;另一方面也反映了“象牙塔”里的学校教育与技术开发市场之间的距离。
毋庸置疑的是,“数据结构”是计算机本科学生最重要的专业基础课,在游戏编程中扮演着极其重要的角色,而游戏开发技术又是计算机应用技术最前沿的分支之一。本文试图通过数据结构在游戏开发中的简单应用来解答学生的困惑,以此拉近学校教育与市场开发之间的距离。本文涉及到数据结构中的链表、顺序表、栈、队列、二叉树及图的概念,在此不做过多描述,希望读者阅读本文前对数据结构有所了解,并且熟悉C/C++语言的各种功能和应用。
1顺序表的应用
顺序表是数据结构中最简单、最常用的一种线性表,它的特点是,用一组地址连续的存储单元依次存储线性表的元素。砖块地图系统中使用的就是这种最简单的数据结构。这里对砖块地图系统做如下规定:构建一个简单的砖块地图系统,视角为俯视90度,并由许多个顺序连接的图块拼成。
(1) 定义图块
struct Plot //定义图块结构
{
int Access; //记录此图块是否可以通过
…… //中有每个图块的图片指针 等记录
};
Access为0时,表示此图块不可通过,为1表示能通过。
(2) 定义二维数组存放每个图块的值
定义的二维数组为:Plot Map[7][10]。通过循环将此地图初始化,初始化程序和生成地图如图1所示。
for (i=0;i=6;i++)
for (j=0;j=9;j++)
scanf(“输入第%行,第%列初始化值:%d ”i,j,Map [i][j]);
从图1看出,这个地图用顺序表表示非常直接。当控制人物在其中走动时,对人物将要走到的下一个图块进行判断,看其是否能通过。比如,当人物要走到(2,5)这个图块时,用如下判定函数来判断这个图块是否能通过:
x=3;y=5;
int Ispass(x,y)
{
return Map[x,y].Access; //返回图块是否 通过的值
}
以上只是简单的地图例子,使用顺序表也可以表示更为复杂的砖块地图。目前流行的整幅地图中也都要用到大量的顺序表,只不过在整幅中进行分块而已。
2链表应用
链表的主要优点就是可以方便地进行插入、删除操作。在游戏开发中,链表主要应用在有大规模的删除和添加操作上。在飞机游戏中,飞机的子弹是要频繁地出现、消除的,个数也是随机的。链表主要应用在发弹模块上。在下面的源代码中,我们就定义了坐标结构和子弹链表。
(1) 定义坐标结构
struct Cpiot //定义坐标结构
{
int x; //X轴坐标
int y; //Y轴坐标
};
(2) 定义子弹链表
struct Bullet //定义子弹链表
{
Cpiotbulletpos; //子弹的坐标
intbulletspd; // 子弹的速度
struct Bullet* next; //指向下 一个子弹
};
(3) 定义飞机类中的子弹
class Cmyplane
{
public:
void AddBullet(struct Bullet*);
//加入子弹的函数,每隔一定时间加弹
void RefreshBullet();
//刷新子弹
privated:
struct Bullet *St_MyBullet;
// 声明飞机的子弹链表
};
在void AddBullet(struct Bullet*)中,只要将一个结点插入链表中,并且每隔一段时间加入,就会产生连续发弹的效果。
(4) 加弹函数的主要源代码
void AddBullet(struct Bullet*)
{
st
文档评论(0)