既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
实现效果
整体函数调用介绍
1.主函数首先进入init()进入伪游戏加载
2.然后进入while(1)循环循环加载菜单和选择功能
3.首先show_menu()利用单独map【200】【200】储存后台的菜单界面,然后输出处理过的界面,利用move函数加载移动指针可进行人为上下左右控制选择,当按下空格确定时,后台读取map信息返回给flag,flag进入对应功能模块。
4.功能模块结束重新进入循环显示菜单直到选择结束功能游戏结束刷新菜单显示结束界面
(进入游戏板块void game_system()分两个重要函数void autochange() //系统自动更新
void manchange() //人为输入更新,即为控制人物行动在认为输入更新,而人物行动动作在系统自动更新函数里面,而show_move()就是每次更新人物位置,即人物位置附属信息)
int main()
{
加载页面 while (1)
{
显示菜单();
int flag = move(设置参数); // 2新游戏 3继续 4设置 5更多 6退出
switch (flag)
{
进入相应函数();
}
if (game_end == 1)
break;
}
打印结束界面;
}
int move(int x, int y, int limit_x1, int limit_x2, int limit_y1, int limit_y2, int xx, int yy) //移动指针函数
int init() //初始化+加载系统
void load_game() //读取关卡信息
void show_move() //移动显示
void autochange() //系统自动更新
void manchange() //人为输入更新
void more() //首页选择功能函数
void setting() void exit() void show_menu() //显示菜单
void game_system() //加载游戏系统
void select() //首页加载选项系统
游戏细节
1.伪加载系统
利用for进行变量i的1-1000循环gotoxy定点更新数值与信息。
每除余xx等于0时相应的地方显示更新的信息。
这里是每200出现一条新的故事背景
每1000/11加载条处出现一个实体方块
每1数字进行数值的更新
就是伪装加载系统模仿正常游戏,当然不想等待按p即可跳过
2.万能map【200】【200】
游戏的map数组是作为后台数组使用,所有界面都是单独一个数组,而读取是用map承接,好处在于每个函数都可以直接对map调用而不用去单独设置参数去传相应的界面。而且现实的界面都是经过处理后的,就是map后台存数据,输出时按照规定输出相应的文字界面。而搭配move移动指针就可以实现选择中文而后台读取数据实现相应功能。但我还没有利用到极致,第一次了解这个是知乎一位老师的文章打飞机里面的,他就是map只存一些数字,而设置好飞机,子弹,敌机对应哪些数字,界面是飞机大战,而后台却是数字大战。我的map依旧用的字符串数组,就不去修改了。
3.实现数使用字键的上下左右
getchar()在我印象里就只能取ASCII码表里的字符,感觉键盘上的↑↓←→这些根本用不上,结果后来看博客发现其实键盘上每个按键都有相应的ascii值只不过是占字符不同而已,然后我试下发现果然他们是由-32和一个数字组成的,这样就能很方便的用在我的指针选取上。问题是空格占一个,而上下左右占两个,怎么区分他们呢?我是先读取一个字符,如果是普通的wasd或空格则直接进行处理,如果字符值==-32则再读取一个字符然后进行相应处理,这样就能兼容wasd和↑↓←→和空格的同时操作了。
4.实现实时游戏数据图像可视化
游戏难写难在于不好写获取鼠标信息的函数,只能考键盘上的按键来实现功能,但又不能太繁琐。
为了实现游戏简单控制,本来是能wasd控制移动 qe顺时针逆时针旋转锤子的,但最后只留下空格跳跃,外设置了数字键以5为中心,其他8个方向按键控制锤子8个方向。
每次按相应方向的数字,左下角代表锤子相对人方向的圆圈就会变成实体,但满足跳跃或者翻转的时候,正方形就会变成实体代表可以按空格进行操作
5.实现游戏的重力系统,跳跃与翻越
游戏重力检测和重力下坠过程和,跳跃翻越过程都是非人为控制的,过程不是认为控制的意思就是你让他跳,他自
己要实现向上跳并且最高点后要自动下坠并且不影响你后续的输入。
这里依旧借鉴他人的处理方法,设置自动更新和人工输入更新两个函数,
人为输入即利用if(kbhit()) 判断是否有键盘输入
每次同时例遍两个函数,若有输入则判断进行了什么指令,而随后自动更新函数根据指令自动改变相应的值
简单的重力系统就是每次检索人的位置下面一格是否是空格,若是,则自动更新下落一个单位距离。
而自动改变的翻越则依照我之前做过的汉诺塔利用数组储存指令内容,实现自动变化。本游戏难点在于锤子在翻越
过程是不能改变位置的,因为锤子是人的附属物,他在show_move()函数是和人一起移动的,而方向不改变为此
我又单独设置一个锤子方向数字对应翻越指令移动人时如何改变锤子方向实现让锤子保持不动。
跳跃现在却变成最简单的了,即向上变化指令+自由坠落。
关键在于处理变化速度,和什么时候能加载重力,什么时候停止翻越到墙体里面,这都是只要简单的给人变化后坐
标进行个判断即可。
6.实现关卡间的跳跃与高空坠落
做这个破游戏的精华就是自由落体,玩正版掘地求升体验过无数次自由落体的快感(tong ku).没有自由落体就简直没有灵魂,所以地图要大,要高,要能让人下落地让人自闭的那种。所以我考虑过大地图+实现窗口跟随主角移动,但又困于刷屏限制,不可能做一个窗口跟随主角移动的同时还能流畅行动。就只能选择分割地图+关卡跳跃来实现了,每个独立的地图都带有出生点与下一关传送点的信息,而且每个地图的上界和下界都是进行上下关卡传送的,所以虽然看起来地图很随意,但都是能上下衔接的。并且高空坠落是能实现从最后一关直接坠落到家的。
7.实现游戏功能:重开,复位,跳关
关于游戏任意实现卡位,即上下左右不能移动,所以一开始是加入重开本关按钮的,但随即一想,又想到了每次跟踪输入并且记录更新前坐标,就实现了复位按钮,实测卡死时稳定复位,继续游戏。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!