C语言版flappy bird黑白框游戏
发布时间:2020-12-15 04:43:34 所属栏目:百科 来源:网络整理
导读:? ? ? 在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird。代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了! ? ? ? 代码的完美度肯定是不够的,随手编的嘛,找完bug后就没
? ? ? 在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird。代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了! ? ? ? 代码的完美度肯定是不够的,随手编的嘛,找完bug后就没再去想怎样优化它了,毕竟时间有限。 ? ? ?先说下它的设计思路吧,算法方面,基本是纯靠for if 语句加上纯粹的坐标x,y运算实现的,在下面的代码里,将会看到很多阿拉伯数字的加加减减。没有用到链表什么的,当然,我相信,如果用到链表的话,会更简单,代码量更少。引用到的函数库有四个: #include
宏定义 :define一些标识图形,p为烟囱的组成单位方块,“ “为消除方块时用到的输出空白,-是界面美化,”鸟“是游戏体 P printf("■")
PR printf(" ")
Q printf("-")
Br printf("鸟")
定义结构体,就一个鸟的结构体,以及一条最重要的函数----句柄的初始化。 typedef score;
Position( x, y) {
COORD pos = x - ,y -
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out,pos);
}
下面是一些辅助函数,加上注释,这里再作介绍。由于函数名字基本是中文字的评语,这个之所以这样做,还是上面的原因,想改,可以自己改。 jiemian(),这个函数的作用的在特定的位置输出”--------“,美化界面用的,置于为什么for循环里面我设置的i<103呢,是因为控制台的宽度大概是103像素,所以,设置每一像素输出一个Q 即 - ,Position函数就是把特定此时的坐标; jiemian1(),不作解释,相信看得明白; feixing(...)鸟的飞行函数,思想很简单,先选择好一个坐标位置,显示出鸟,再停顿一段时间在相同的位置输出空白,达到非按键up操作时的下降目的; fenshuYUnandu(...),分数函数,显示分数; check1(...),检查烟囱外是否撞墙函数,这里要仔细看了,否则你会很难读懂!d 数组分别存储两烟囱之间的间距15~16像素, e 数组用来存储每条烟囱移动到与鸟的x坐标相同时的固定距离,i数组是传进来的烟囱移动的坐标变化,e-i-t是用来判断烟囱移动的时候,何时与鸟x相同,到这里,可能你有疑问了,为什么不直接判断烟囱的x和鸟的x重合,因为烟囱是动态的,同时它们还有距离限制,如果不加以限制就会乱,烟囱不是一条在往左边移动,是5条,0~4,如果相等,进入第一个if语句,进行第二次判断,判断此时鸟的y坐标是否是烟筒的入口y,如果是,则不报错,如果不是,证明撞墙了,最后的一个if语句是判断上下边界的撞墙; check(...),烟囱入口撞墙判断,这条较上条较复杂,因为烟囱的入口是有两列像素方块组成的,就是说,判断的时候要判断两列的方块。模仿上面,b c 数组分别是左列和右列的烟囱间距值,剩下的步骤就是判断入口内鸟的x是否与烟囱的x相同; 下面的一条最重要的函数,烟囱的制造、移动函数。 jiemian()
i= (;i<;i++ Position(i-,);
(i== (i=;i<;i++ Position(i-,);
printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( system(
feixing(brid B, y)
Position(B.x,B.y);Br;
Sleep();
Position(B.x,B.y);PR;
fenshuYUnandu(brid B, i[], o[])
Position(,);
printf(
|