c语言编写小游戏系列教程之推动箱子,C_C++,自学去(3)
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中 是 mingw32make
学会了makefile语法之后,大家还可以去学 cmake 工具的使用,他可以更加方便。好了 代码就分析到这里,后面我们会讲解,推箱子游戏的成功判断,退步等等功能。整个项目打包文件:
(45.62 KB, 下载次数: 86)
注:如发现文章错误万望指正如果有什么看不明白的,也欢迎在自学去留言回复
如果你已经学会了c语言基本语法,欢迎加入到自学去c语言进阶群,与更多水平相当的朋友一起交流学习。群号:385199771
小游戏, c语言, 箱子
回复 2015/1/22
编辑推送
使用道具【新提醒】c语言编写小游戏系列教程之推动箱子,C/C++,自学去
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




