标签:新人 sci 飞机大战 数组使用 get net 汉字 ascii码 文章
github代码:https://github.com/404name/C-game/blob/master/掘地求升
(进入游戏板块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() //首页加载选项系统
利用for进行变量i的1-1000循环gotoxy定点更新数值与信息。
每除余xx等于0时相应的地方显示更新的信息。
这里是每200出现一条新的故事背景
每1000/11加载条处出现一个实体方块
每1数字进行数值的更新
就是伪装加载系统模仿正常游戏,当然不想等待按p即可跳过
游戏的map数组是作为后台数组使用,所有界面都是单独一个数组,而读取是用map承接,好处在于每个函数都可以直接对map调用而不用去单独设置参数去传相应的界面。而且现实的界面都是经过处理后的,就是map后台存数据,输出时按照规定输出相应的文字界面。而搭配move移动指针就可以实现选择中文而后台读取数据实现相应功能。但我还没有利用到极致,第一次了解这个是知乎一位老师的文章打飞机里面的,他就是map只存一些数字,而设置好飞机,子弹,敌机对应哪些数字,界面是飞机大战,而后台却是数字大战。我的map依旧用的字符串数组,就不去修改了。
getchar()在我印象里就只能取ASCII码表里的字符,感觉键盘上的↑↓←→这些根本用不上,结果后来看博客发现其实键盘上每个按键都有相应的ascii值只不过是占字符不同而已,然后我试下发现果然他们是由-32和一个数字组成的,这样就能很方便的用在我的指针选取上。问题是空格占一个,而上下左右占两个,怎么区分他们呢?我是先读取一个字符,如果是普通的wasd或空格则直接进行处理,如果字符值==-32则再读取一个字符然后进行相应处理,这样就能兼容wasd和↑↓←→和空格的同时操作了。
游戏难写难在于不好写获取鼠标信息的函数,只能考键盘上的按键来实现功能,但又不能太繁琐。
为了实现游戏简单控制,本来是能wasd控制移动 qe顺时针逆时针旋转锤子的,但最后只留下空格跳跃,外设置了数字键以5为中心,其他8个方向按键控制锤子8个方向。
每次按相应方向的数字,左下角代表锤子相对人方向的圆圈就会变成实体,但满足跳跃或者翻转的时候,正方形就会变成实体代表可以按空格进行操作
游戏重力检测和重力下坠过程和,跳跃翻越过程都是非人为控制的,过程不是认为控制的意思就是你让他跳,他自
己要实现向上跳并且最高点后要自动下坠并且不影响你后续的输入。
这里依旧借鉴他人的处理方法,设置自动更新和人工输入更新两个函数,
人为输入即利用if(kbhit()) 判断是否有键盘输入
每次同时例遍两个函数,若有输入则判断进行了什么指令,而随后自动更新函数根据指令自动改变相应的值
简单的重力系统就是每次检索人的位置下面一格是否是空格,若是,则自动更新下落一个单位距离。
而自动改变的翻越则依照我之前做过的汉诺塔利用数组储存指令内容,实现自动变化。本游戏难点在于锤子在翻越
过程是不能改变位置的,因为锤子是人的附属物,他在show_move()函数是和人一起移动的,而方向不改变为此
我又单独设置一个锤子方向数字对应翻越指令移动人时如何改变锤子方向实现让锤子保持不动。
跳跃现在却变成最简单的了,即向上变化指令+自由坠落。
关键在于处理变化速度,和什么时候能加载重力,什么时候停止翻越到墙体里面,这都是只要简单的给人变化后坐
标进行个判断即可。
做这个破游戏的精华就是自由落体,玩正版掘地求升体验过无数次自由落体的快感(tong ku).没有自由落体就简直没有灵魂,所以地图要大,要高,要能让人下落地让人自闭的那种。所以我考虑过大地图+实现窗口跟随主角移动,但又困于刷屏限制,不可能做一个窗口跟随主角移动的同时还能流畅行动。就只能选择分割地图+关卡跳跃来实现了,每个独立的地图都带有出生点与下一关传送点的信息,而且每个地图的上界和下界都是进行上下关卡传送的,所以虽然看起来地图很随意,但都是能上下衔接的。并且高空坠落是能实现从最后一关直接坠落到家的。
关于游戏任意实现卡位,即上下左右不能移动,所以一开始是加入重开本关按钮的,但随即一想,又想到了每次跟踪输入并且记录更新前坐标,就实现了复位按钮,实测卡死时稳定复位,继续游戏。
关于跳关,要在设置里开启 开挂 按钮才能按n/b进行上下关切换。
几乎就是写完框架后就开始缝缝补补,没有很规范,但还好框架写的很好,修改灵活性都很高,开始界面临时夹在init里面,加入之前想到的加载系统,顺便直接把背景在里面讲完了,结束界面把汉字打进去可花费了不少时间。。
这个破游戏,卡了我1/3 的假期,关键是我写游戏写了一个星期,玩正版掘地求升时间总和玩了将近一天,都还没通,感觉收获差不多规范了下写大程序的格式,对大程序的函数设置更加清楚,而损失就是,我没学什么新的东西
然后我最直观的感受就是:
标签:新人 sci 飞机大战 数组使用 get net 汉字 ascii码 文章
原文地址:https://www.cnblogs.com/404name/p/12234419.html