C语言版flappy bird黑白框游戏

C语言版flappy bird黑白框游戏,第1张

概述       在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird。代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了!      代码的完美度肯定是不够的,随手编的嘛,找完bug后就没再去想怎样优化它了,毕竟时间有限。      先说下它的设计思路吧,算法方面,基本是纯靠for if 语句加上纯粹的坐标x,y运算实现的,在下面的代码里,将会看到很多阿拉伯数字的加加减减。没有用到链表什么的,当然,我相信,如果用到链表的话,会更简单,代码量更少。引用到的函数库有四个:1 #include<stdio.h>2 #include<Windows.h>//win3 #include <time.h>4 #include<stdlib.h>宏定义 :define一些标识图形,p为烟囱的组成单位方块,“ “为消除方块时用到的输出空白,-是界面美化,”鸟“是游戏体1 #define P printf("■")2 #define PR printf(" ")3 #define Q printf("-")4 #define Br printf("鸟")定义结构体,就一个鸟的结构体,以及一条最重要的函数----句柄的初始化。1 typedef struct brid2 {3 double x,y;4 int score;//分数5 };6 /*typedef struct Fangkuai7 {8 double x,y;9 };*/ //此结构体废除10 void Position(double x, double y) {//光标(坐标)函数11 COORD pos = {12 x - 1, y - 113 };14 HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);//创建句柄15 SetConsoleCursorPosition(Out, pos);//将句柄指向坐标,变为坐标句柄16 }下面是一些辅助函数,加上注释,这里再作介绍。由于函数名字基本是中文字的评语,这个之所以这样做,还是上面的原因,想改,可以自己改。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相同;下面的一条最重要的函数,烟囱的制造、移动函数。1 void jiemian()//界面函数2 {3 int i=23;4 for(;i<103;i++)5 {6 Position(i-22,1.5);//上边7 Q;8 }9 if(i==103)10 {11 for(i=23;i<103;i++)12 {13 Position(i-22,24);//下边14 Q;15 }16 }17 }18 void jiemian1() {19 printf("____________________________________________________________________________n");20 printf(" ■n");21 printf(" ■n");22 printf(" ■C语言非链表版:Flappy Birdn");23 printf(" ■编写人:LinGuanHn");24 printf(" ■日期:2014.7.30n");25 printf(" ■耗时:4小时37分n");26 printf(" ■游戏说明:n");27 printf(" ■1-按键盘中的上箭头使鸟起飞n");28 printf(" ■2-分数每过20,难度增大,烟囱入口减小!n");29 printf(" ■3-光标显示方式为中文鸟字n");30 printf(" ■4-介于VS中graphics.h函数库使用失败,导致原图插入不了,所用转用黑白框。n");31 printf(" ■5-撞墙失败,游戏会提示输了,但是不会return 0,你可以继续按方向键接着玩。n");32 printf(" ■n");33 printf(" ■n");34 printf(" ■n");35 printf(" ■代码内带有注释,感兴趣的可以直接修改,增加其他效果n");36 printf(" ■必然存在bug,找到了麻烦跟我说声,谢谢。n");37 printf(" ■请按键盘的任意一个键继续。n");38 printf(" ■n");39 printf(" ■n");40 printf(" ■n");41 printf(" ____________________________________________________________________________n");42 system("pause");43 }44 /*void cleanjudge(int i)45 {46 if(i==77)47 {48 for(int i=1;i<6;i++)49 {50 Position(2,i);51 PR;52 Position(4,i);53 PR;54 }55 }56 }*/ //清屏函数作废57 void feixing(brid B,int y)//鸟飞行坐标函数58 {59 Position(B.x,B.y);Br;//创建鸟60 Sleep(200);//停顿0.2秒再下掉,也是难度的改变方法。61 Position(B.x,B.y);PR;//清除鸟62 //return 0;63 }64 void fenshuYUnandu(brid B,int i[],int o[])//显示分数函数65 {66 Position(38,25);//固定分数显示位置67 printf("分数为:%d",B.score);6869 }70 void check(brid B,int i[],int o[],int temp)//检查非入口撞墙函数71 {72 int t,d[5],e[5];73 d[0]=0;d[1]=16;d[2]=31;d[3]=46,d[4]=61;74 e[0]=78;e[1]=77;e[2]=77;e[3]=77;e[4]=77;75 for(t=0;t<=4;t++)76 {77 if(B.x==e[t]-i[t]+d[t]){78 if(B.y<=o[t]+6-temp||B.y>=o[t]+temp-1){79 Position(B.x,B.y);Br;printf("n");Position(B.x,B.y+1);80 printf("Lost the game!n");system("pause");81 }82 }83 if(B.y>=24||B.y<=1.5){84 printf("Lost the game!n");system("pause");85 }86 }87 }88 void check1(brid B,int i[],int o[],int temp)//检查入口内撞墙函数89 {90 int k,f,b[5],c[5],q[3];91 q[0]=77,q[1]=78,q[2]=76;92 b[0]=0;b[1]=16;b[2]=31;b[3]=46,b[4]=61;//b为左93 c[0]=2;c[1]=18,c[2]=33,c[3]=48,c[4]=63; //C为右94 for(int f=0;f<3;f++){95 for(k=0;k<=4;k++)96 {97 if((B.x-f==q[f]-i[k]+b[k]&&B.y==o[k]+6-temp)||(B.x-f==q[f]-i[k]+c[k]&&B.y==o[k]+6-temp)){98 Position(B.x,B.y);Br;printf("n");Position(B.x,B.y+1);99 printf("Lost the game!n");system("pause");100 }101 if((B.x-f==q[f]-i[k]+b[k]&&B.y>=o[k]+temp-1)||(B.x-f==q[f]-i[k]+c[k]&&B.y>=o[k]+temp-1)){102 Position(B.x,B.y);Br;printf("n");Position(B.x,B.y+1);103 printf("Lost

      在此记录下本人在大一暑假,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( }

效果图片:

  

总结

以上是内存溢出为你收集整理的C语言版flappy bird黑白框游戏全部内容,希望文章能够帮你解决C语言版flappy bird黑白框游戏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1264169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存