加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 #include #include #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( check(brid B, o[], temp) t,d[],e[ d[]=;d[]=;d[]=;d[]=,d[]= e[]=;e[]=;e[]=;e[]=;e[]= (t=;t<=;t++ (B.x==e[t]-i[t]+ (B.y<=o[t]+-temp||B.y>=o[t]+temp- Position(B.x,B.y);Br;printf();Position(B.x,B.y+ printf();system( (B.y>=||B.y<= printf();system( check1(brid B, temp) k,f,b[],c[],q[ q[]=,q[]=,q[]= b[]=;b[]=;b[]=;b[]=,b[]=; c[]=;c[]=,c[]=,c[]=,c[]=; ( f=;f<;f++ (k=;k<=;k++ ((B.x-f==q[f]-i[k]+b[k]&&B.y==o[k]+-temp)||(B.x-f==q[f]-i[k]+c[k]&&B.y==o[k]+- Position(B.x,B.y+ printf();system( ((B.x-f==q[f]-i[k]+b[k]&&B.y>=o[k]+temp-)||(B.x-f==q[f]-i[k]+c[k]&&B.y>=o[k]+temp- Position(B.x,B.y+ printf();system( } }
fangkuai(brid B, i[],o[],f[],temp=; srand(()time(NULL)); o[]=rand()%+;o[]=rand()%+;o[]=rand()%+ o[]=rand()%+;o[]=rand()%+; f[]=;f[]=;f[]=;f[]=,f[]= (i[]=,i[]=,i[]=,i[]=,i[]=;i[]< i[]<,i[]<,i[]<,i[]<; i[]++,i[]++,i[]++,i[]++,i[]++,B.y++ ( k=;k<=o[];k++ Position(-i[],k);P;} ( k=;k<=-o[]-temp;k++){ Position(-i[],-k);P;} (i[]==||i[]> ( k=;k<=o[];k++){ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,-k);P; (i[]==){ ( k=;k<=o[];k++ Position(,k);PR; Position( ( k=;k<=-o[]-temp;k++){ Position(,- Position(,- (i[]>=){ i[]=; o[]=rand()%+; i[]=; } (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]== ( k=;k<=o[];k++ Position( Position( ( k=;k<=-o[]-temp;k++ Position(,- Position(,- (i[]>= i[]= o[]=rand()%+ i[]= } (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- } (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]== ( k=;k<=o[];k++ Position( Position( ( k=;k<=-o[]-temp;k++ Position(,- Position(,- (i[]>=){ o[]=rand()%+ i[]= i[]= } (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]== ( k=;k<=o[];k++ Position( Position( ( k=;k<=-o[]-temp;k++ Position(,- Position(,- (i[]>=){ o[]=rand()%+ i[]= i[]= } (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]==||i[]> ( k=;k<=o[];k++ Position(-i[]+ ( k=;k<=-o[]-temp;k++ Position(-i[]+,- (i[]== ( k=;k<=o[];k++ Position( Position( ( k=;k<=-o[]-temp;k++ Position(,- Position(,- (i[]>= o[]=rand()%+ i[]= i[]= } (GetAsyncKeyState(VK_UP)&&y> B.y=B.y- 0) ( k=;k<=;k++ (B.x==-i[k]+ {B.score++;} (B.score%==&&B.x==-i[]+) temp-- }

最后的main函数

B.x=;B.y=;B.score=; x=,y=; system( }

效果图片:

  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读