C语言实现【小游戏——Flappy Bird】

Hanna ·
更新时间:2024-11-15
· 853 次阅读

目录:1.目标要求:2.C语言代码:3.运行结果: 1.目标要求:

1.小鸟默认向右向下飞,按空格会使小鸟弹起向上
2.小鸟每通过一根柱子,分数加1
3.若小鸟碰到柱子或边框,游戏结束

2.C语言代码: #include #include #include #include #define column_num 5 //同一界面存在柱子的数目 /* 《flappy bird》 by:你最珍贵 ————————— |控制信号: | 向上 | ————————— | 键盘: | 空格 | ————————— 1.小鸟默认向右向下飞,按空格会使小鸟弹起向上 2.小鸟每通过一根柱子,分数加1 3.若小鸟碰到柱子或边框,游戏结束 */ void HideCursor(){ //隐藏光标位置 ,这个函数就行 CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } void gotoxy(int x,int y){ //把光标放在(0,0)位置 ,这个函数就行 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } int IsEnd;//是否结束 int interface_x,interface_y;//界面行数、列数 int scores;//分数 int column_x[column_num+1]; //柱子缺口的起始值 int column_x_long;//柱子缺口的长度 int column_y[column_num+1];//柱子位置 int column_y_width;//柱子宽度 int slow_v,slow_v_num;//移动变慢的值(越大速度越慢),移动变慢的变量 int slow_vbird,slow_vbird_num;//小鸟移动变慢的值(越大速度越慢),移动变慢的变量 int bird_x,bird_y;//小鸟位置 int bird_jump; //小鸟跳跃变量 =0时不跳 =3、2、1时跳跃 void startup(){ //【数据初始化】 int i; HideCursor();//不显示光标 IsEnd = 0; interface_x = 22; interface_y = column_num*15;//此数应该为柱子数column_num的倍数 scores=0; column_x_long=interface_x/4;//柱子缺口长度是界面长、1/4 for(i=1;i<=column_num;i++){//柱子缺口起始位置 column_x[i]=rand()%(interface_x/2)+(interface_x/8);//位置有界面/2的选择范围,且下移1/8,不会挨着边界 } column_y_width=(interface_y*3/2)/column_num/5;//柱子宽度是3/2界面宽/柱子数/5;//界面变宽3/2是为了解决刷新问题 column_y[1]=interface_y-1; for(i=2;i<=column_num;i++){ column_y[i] = column_y[i-1]+(interface_y*3/2)/column_num; } slow_v=1; slow_v_num=1; bird_x=interface_x/3; bird_y=interface_y/3; bird_jump=0; slow_vbird=3;//小鸟的慢速变量 slow_vbird_num=1; } void show_begin(){//【初始页面展示】 int i,j; int start=0; char input; while(!start){ gotoxy(0,0);//每次输出页面把鼠标放回(0,0) for(i=1;i<=interface_x/2-4;i++) printf("\n"); for(i=1;i<interface_y/2-8;i++) printf(" "); printf("《flappy bird》\n\n"); for(i=1;i<interface_y/2-9;i++) printf(" "); printf("请按任意键开始游戏\n\n"); for(i=1;i<=interface_x/2-6;i++) printf("\n"); if(kbhit()){ input = getch(); if(input) start=1; } } } void show(){ //【显示画面】 gotoxy(0,0);//每次输出页面把鼠标放回(0,0) int i,j; int k; int isprint; for(i=1;i<=interface_y/2-8;i++) printf(" "); printf("《flappy bird》") ; for(i=1;i<=interface_y/2-8-8;i++) printf(" "); printf("分数:%3d\n",scores); for(i=1;i<=interface_x;i++){ printf(" ");//使屏幕对称加的空格 for(j=1;j<=interface_y;j++){ isprint=0; if(j==1||j==interface_y){ //左右边框 printf("|"); isprint=1; }else if(i==interface_x){ //下边框 printf("="); isprint=1; }else if(i==1){ //上边框 printf("V"); isprint=1; }else if(i==bird_x&&j==bird_y){ //上边框 printf("@"); isprint=1; } if(!isprint){ //柱子 for(k=1;k=2&&i=column_x[k]+column_x_long&&i=column_y[k]&&j<=column_y[k]+column_y_width-1){ printf("H"); isprint=1; break; } } } } if(!isprint) printf(" "); //什么也不是的位置输出空格 } printf("\n"); } } void update_outinput(){ //【与输入无关的更新】 int i; slow_v_num=(slow_v_num==slow_v)? 1:slow_v_num+1; if(slow_v_num==slow_v){//每隔slow_v次运行一次 for(i=1;i=2&&bird_x=column_x[i]+column_x_long&&bird_x=column_y[i]&&bird_y0){//如果按下空格,循环2次位置-2 bird_x -= 2; bird_jump--; } } } void update_input(){//【与输入有关的更新】 char input; if(kbhit()){ input = getch(); if(input==' '){ if(bird_jump>0) bird_x--;//如果按下空格前也检测到有空格则位置额外-1 bird_jump=2;//之后要上升的次数 } } } void show_end(){//【显示失败界面】 system("cls"); int i; for(i=1;i<interface_x/2-2;i++) putchar('\n'); for(i=1;i<interface_y/2-5;i++) putchar(' '); printf("game over!\n\n"); for(i=1;i<interface_y/2-7;i++) putchar(' '); printf("您的分数是:%3d分\n",scores); for(i=1;i<interface_x/2-3;i++) putchar('\n'); system("pause");//暂停 system("pause");//暂停 } int main(){ startup(); //数据初始化 show_begin();//初始页面 while(!IsEnd){ //游戏循环执行 show(); // 显示画面 update_outinput(); //与输入无关的更新 update_input(); //与输入有关的更新 } show_end(); //显示失败界面 return 0; } 3.运行结果:

小游戏玩法:

《flappy bird》 by:你最珍贵 ———————————————— |控制信号:| 向上 | ———————————————— | 键盘: | 空格 | ————————————————

 and
 and


作者:你最珍贵622



小游戏 bird C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号