这又是一个安静的午后,于是,故事开始了
可能我们小时候都玩过这样一种游戏:
开居一只鸟,装备。。。额扯远了。。
就是有这样一只疯狂的小鸟,在大街小巷中飞行,不扑打翅膀的话,就会以一定的速度向下掉,当碰上前方来得障碍物时候,就会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)