<>这又是一个安静的午后,于是,故事开始了

可能我们小时候都玩过这样一种游戏:

开居一只鸟,装备。。。额扯远了。。

就是有这样一只疯狂的小鸟,在大街小巷中飞行,不扑打翅膀的话,就会以一定的速度向下掉,当碰上前方来得障碍物时候,就会die,
所以我们就叫他笨鸟吧,所以游戏名字也就是笨鸟先飞(滑稽)

列一个大概的框架
#include<iostream> #include<cstdlib> #include<conio.h> #include<windows.h> //
gotoxy 和HideCursor的头文件
show函数进行初始化
void show()//开始的初始化(达到循环显示的目的) { gotoxy(0,0) ; HideCursor() ; for(int i=1;i<y;
++i) { for(int j=1;j<x;++j) { if(j==birdx&&i==birdy) { cout<<"\b"<<"鸟";
//\b的作用是因为输出的汉字多占了一个大小的空间,\b删除之前一个位置的输出 } else if(j==xx&&(i>=1&&i<=yy)||j==xx&&(
i>=yy+5&&i<=y)) cout<<"*" ; else cout<<" "; } cout<<endl; } cout<<"得分:"<<count/6
<<endl; }
\b的作用是因为输出的汉字多占了一个大小的空间,\b删除之前一个位置的输出就是删除多输出的哪个空格

和输入有关的,就一个用空格控制的笨鸟扑打翅膀(hhh)
void in() { if(kbhit()) { string ss; ss=getch(); if(ss==" ") { if(birdy>3)birdy
-=3; } } }
而鸟的下落以及障碍物盗来的速度放在了和输入无关的函数中

void notin() //改变小鸟的位置和障碍物的位置 { if (birdx==xx&& (birdy>=yy&&birdy<=yy+5)) count
+=1; if(speed!=3) { speed++; } if(birdy!=y&&speed==3) { birdy+=1; speed=0; } if(
speed2!=5) { speed2++; } else if(speed2==5) { if(xx>0) { xx--; } if(xx==0) { xx=
x/2;//障碍物的x坐标 yy= rand()%(y/2); while(yy==0) { yy= rand()%(y/2); } } speed2=0; }

speed和speed2分别控制小鸟下落的速度和障碍物的速度,是用一种循环到某个值才进行一个操作,然后再清零speed和speed2来控制速度的,就比较巧妙(滑稽)
而`
void gotoxy(int x,int y) { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos; pos.X=x; pos.Y =y; SetConsoleCursorPosition(handle,pos); } void
HideCursor() { CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(
GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); }
gotoxy分别用来控制命令行的光标(清屏)和隐藏光标(也就是光标不闪烁)的作用

那么那么,完整的程序是:
#include<iostream> #include<cstdlib> #include<conio.h> #include<windows.h>
using namespace std; int x=50; //边界的x和y int y=20; int birdx=x/5; int birdy=y/4;
int speed=0;//控制速度 int speed2=0;//控制障碍物的来临速度 int xx=x/2;//障碍物的x坐标 int yy= rand()
%(y/2); int count=0;//记录笨鸟的得分 void notin(); void in(); void gotoxy(int x,int y)
{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y =y;
SetConsoleCursorPosition(handle,pos); } void HideCursor() { CONSOLE_CURSOR_INFO
cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&
cursor_info); } void show()//开始的初始化(达到循环显示的目的) { gotoxy(0,0) ; HideCursor() ;
for(int i=1;i<y;++i) { for(int j=1;j<x;++j) { if(j==birdx&&i==birdy) { cout<<
"\b"<<"鸟"; //\b的作用是因为输出的汉字多占了一个大小的空间,\b删除之前一个位置的输出 } else if(j==xx&&(i>=1&&i<=yy
)||j==xx&&(i>=yy+5&&i<=y)) cout<<"*" ; else cout<<" "; } cout<<endl; } cout<<
"得分:"<<count/6<<endl; } void in() { if(kbhit()) { string ss; ss=getch(); if(ss==
" ") { if(birdy>3)birdy-=3; } } } void notin() //改变小鸟的位置和障碍物的位置 { if (birdx==xx
&& (birdy>=yy&&birdy<=yy+5)) count+=1; if(speed!=3) { speed++; } if(birdy!=y&&
speed==3) { birdy+=1; speed=0; } if(speed2!=5) { speed2++; } else if(speed2==5)
{ if(xx>0) { xx--; } if(xx==0) { xx=x/2;//障碍物的x坐标 yy= rand()%(y/2); while(yy==0)
{ yy= rand()%(y/2); } } speed2=0; } } int main() { while(yy==0) { yy= rand()%(y/
2); } while(1) { show(); notin(); in() ; if(birdx==xx&&(((birdy>1&&birdy<yy))||(
birdy>yy+5&&birdy<y))) { cout<<"YOU ARE FILLED!!"<<endl; break; } } return 0; }
程序的运行结果:

当然还有许多可以改进的地方,比如可以做很多个障碍物,我们只要保证每个障碍物距离间隔相同的情况下,多生成几个障碍物,或者也可以加入wsad来控制丝丢皮得(放洋屁)的小鸟的位置,来增加一些可玩性,赶紧赶紧试试吧hhh(建议全屏食用yes)

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信