教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

c语言编写小游戏系列教程之推动箱子,C_C++,自学去(3)

来源:网络收集 时间:2026-07-08
导读: 2.源文件中,确定只提供给内部使用的函数都加上static关键词修饰。3.使用#ifndef指令保证头文件只能被包含一次。4.把要提供给外部访问的函数声明写在头文件中。 障碍物检测 上节课的人物可以穿过箱子和障碍物,那么

2.源文件中,确定只提供给内部使用的函数都加上 static 关键词修饰。3.使用 #ifndef指令 保证头文件只能被包含一次。4.把要提供给外部访问的函数声明写在头文件中。

障碍物检测

上节课的人物可以穿过箱子和障碍物,那么如何让他无法穿过呢?其实只需要对人物前方的物体做一个检测:那么,什么情况是可以移动呢?

第一,空旷的地面,肯定是可以移动。

第二,目标点,就是箱子要移动到的位置的那个点,是可以移动上去的。第三,前面是箱子的时候,得分情况了。这个后面移动箱子的时候会讲。

那么我们只需要写一个函数来检测是否可以移动即可,比如就叫 can_move int can_move(person_t* person, dir_t dir)

返回值就设定为 int类型 返回0 表示不能移动,否则 表示可以移动,返回值 自己定,只要你记得返回什么表示可以移动即可。

person表示 人,他记录了人的位置信息,  dir 是方向,根据方向和人的坐标  就可以知道 人即将走的地方 是什么东西,根据这个东西,我们就可以判断人物 是否可以移动。那么就可以用如下的代码来检测:

在这之前获取到人物即将走的位置的 坐标 switch(map[person­>y+y][person­>x+x])        {        

        case OBJ_WALL:  //是墙

        case OBJ_OBS:        //是障碍物

                return 0         //不能移动   <­­­­­通过这个返回值 就可以让人 不能移动。        

        case OBJ_BOX:         case OBJ_SUCCESS:

         这里进行 对箱子的处理,后面具体看代码。

如何移动箱子

头文件会写了,咱们再来说说移动箱子,移动箱子的思路是这样。

首先,人物被用户控制可以移动,每次移动都检测人物的前方 可否移动,也写了一个函数 can_move来判断是否可以移动,根据返回值来判断,可以移动就执行移动操作。那么,什么情况是可以移动呢?前面说过,重复一下第一,空旷的地面,肯定是可以移动。

第二,目标点,就是箱子要移动到的位置的那个点,是可以移动上去的。第三,前面是箱子的时候,得分情况了。

前面是箱子的时候,要先看 箱子是不是可以移动,箱子可以移动,人就可以移动,箱子无法移动,人当然也就无法移动。所以,我们把箱子是否可以移动的事情,交给箱子模块去做。我们人物的模块,只需要尝试移动一下箱子,看看是不是移动成功就可以了。代码如下:

//获取要推动的箱子

                box_t* b1 =  get_box(person­>x+x, person­>y+y)

                //如果获取到了,并且返回成功,则可以移动,move_box 返回0表示成功                if(b1!=NULL && move_box(b1, dir)==0)                {

                        return 1                 } else {                        return 0                 }

根据人物前方的坐标 来遍历检测出 前方的是哪一个箱子,然后移动他,move_box就是 试图移动他,根据函数返回值来判断是否移动成功,具体可以看person.c 文件中的 can_move 函数。移动箱子的功能就讲述完毕了。

好了,接下来就是编译部分了。编译命令可以直接用 gcc  ­I.  *.c 来编译

­I.  是什么意思呢?

这是指定include的搜索目录,一个点 就表示 当前目录,大家注意看就会发现 我的 config.h  是用 #include <config.h> 还有

2015/1/22【新提醒】c语言编写小游戏系列教程之推动箱子,C/C++,自学去

config.h里面的 box.h 等 都是这样的方式,为何我不用双引号的方式呢?

因为考虑到以后代码的目录结构可能会变化,比如 我创建一个 include目录 来放头文件,创建一个 src目录放 源文件。那我如果用的是 双引号,我不得改代码吗?  而我用 #include <config.h> 的方式,我只要用 ­I指定一下新的 include目录即可 ,比如 gcc ­I ./include  *.c  这样就找到了,无需修改代码。

好了,上面其实是最笨的方式,更好的方式 是使用 Makefile来编译程序,他可以方便你创建无限小到无限大的项目。我就不讲Makefile如何使用,我留给大家课后去学,下面是Makefile的教程makefile的语法及写法一,二,三集合

(出处: 自学去 )

注意 在linux下的是 make命令   而在mingw中 是 mingw32­make   

学会了makefile语法之后,大家还可以去学 cmake 工具的使用,他可以更加方便。好了 代码就分析到这里,后面我们会讲解,推箱子游戏的成功判断,退步等等功能。整个项目打包文件: 

  (45.62 KB, 下载次数: 86) 

注:如发现文章错误万望指正如果有什么看不明白的,也欢迎在自学去留言回复

如果你已经学会了c语言基本语法,欢迎加入到自学去c语言进阶群,与更多水平相当的朋友一起交流学习。群号:385199771

小游戏, c语言, 箱子

回复 2015/1/22

编辑推送

使用道具【新提醒】c语言编写小游戏系列教程之推动箱子,C/C++,自学去

…… 此处隐藏:834字,全部文档内容请下载后查看。喜欢就下载吧 ……

c语言编写小游戏系列教程之推动箱子,C_C++,自学去(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115185.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)