/*前言:空间里看到的,一个C++版本的Flappy bird,编译了一下,改掉了几个错误,觉得挺有意思的。事实上代码远比游戏有意思。
不会用的可以直接新建一个简单的“hello world”工程(Win32 Console Application),把代码替换掉源代码编译就好了*/

#include"stdafx.h" 
#include<stdio.h>
 
#include<stdlib.h>
 
#include<conio.h> 
 
#include<time.h> 
 
#include<Windows.h> 

/********函数变量声明********/ 
#define PR_Box printf("■") 
#define PR_Gold printf("★") 
#define PR_Ag printf("☆") 
#define PR_FBird printf("Ю") 
#define PR_DBird printf("Ф") 
#define PR_Land printf("┳┳┯") 
#define PR_Bg_TL printf("╔") 
#define PR_Bg_TR printf("╗") 
#define PR_Bg_DL printf("╚") 
#define PR_Bg_DR printf("╝") 
#define PR_Bg_X printf("═") 
#define PR_Bg_Y printf("║") 
#define PR_Blank printf(" "); 
int Grade = 1, C_Gold = 0, C_Ag = 0, Score = 0, Delay_time = 1000,Max_blank=9,Distance=18; 
struct Birds 

int x, y; 
int condition; 
}; 
Birds *Bird = (Birds*)malloc(sizeof(Birds)); 
struct Bg 

int x, y; 
int l_blank; 
int reward[9]; 
Bg *pri; 
Bg *next; 
}; 
Bg *Bg1 = new Bg[sizeof(Bg)]; 
void Position(int x, int y) 

COORD pos = { x - 1, y - 1 }; 
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE); 
SetConsoleCursorPosition(Out, pos); 

void CreatBird() 

Bird->x=41; 
Bird->y=10; 
Bird->condition =0; 

void CreatBg() 

Bg *Bg2 = (Bg*)malloc(sizeof(Bg)); 


Bg1->x=90;Bg1->y =8; 
Bg2->x=Bg1->x+Distance;Bg2->y =9; 


Bg1->l_blank =Max_blank-Grade; 
Bg2->l_blank =Max_blank-Grade; 


Bg1->next=Bg2; 
Bg1->pri=Bg2; 
Bg2->next=Bg1; 
Bg2->pri=Bg1; 

void InsertBg(Bg *p) 
{int temp; 
Bg *Bgs = (Bg*)malloc(sizeof(Bg)); 
Bgs->x=p->pri->x+Distance; 
Bgs->l_blank =Max_blank-Grade; 
srand((int)time(0)); 
temp=rand(); 
if(temp%2==0)//++ 
{ if((temp%4+p->pri->y+Max_blank-Grade)<21) 
Bgs->y=p->pri->y+temp%4; 
else 
Bgs->y=p->pri->y; 

else 

if((p->pri->y-temp%4)>2) 
Bgs->y=p->pri->y-temp%4; 
else 
Bgs->y=p->pri->y; 



Bgs->pri=p->pri; 
Bgs->next =p; 
p->pri->next=Bgs; 
p->pri =Bgs; 

void Check_Bg(Bg *q) 
{ Bg *p=q;int i=0,temp; 
while(++i<=5) 
{ if(p->x>-4) 
p=p->next; 
else 
{ srand((int)time(0)); 
temp=rand(); 
if(temp%2==0)//++ 
{ if((temp%4+p->y+Max_blank-Grade)<21) 
p->y=p->y+temp%4; 
else 
p->y=p->y; 
p->x=p->pri->x+Distance; 
p->l_blank=Max_blank-Grade; 

else 

if((p->y-temp%4)>2) 
p->y=p->y-temp%4; 
else 
p->y=p->y; 
p->x=p->pri->x+Distance; 
p->l_blank=Max_blank-Grade; 






void Loop_Bg(Bg *q) 

Bg *p=q;int i=0; 
while(++i<=5) 
{p->x=p->x-1; 
p=p->next ; 
if(Bird->x==p->x) 
{Score+=1; 
if(Score%4==0&&Grade<4) 
Grade++; 



void Prt_Bg(Bg *q) 
{ Bg *p=q;int i=0,k,j; 
while(++i<=5) 
{ if(p->x>0&&p->x<=78) 
{ for(k=2;k<p->y;k++) 
{ Position(p->x+1,k); 
PR_Box;PR_Box;PR_Blank 

Position(p->x,p->y); 
PR_Box;PR_Box;PR_Box;PR_Blank; 
Position(p->x,p->y+p->l_blank); 
PR_Box;PR_Box;PR_Box;PR_Blank; 
k=k+p->l_blank+1; 
for(k;k<=22;k++) 
{Position(p->x+1,k); 
PR_Box;PR_Box;PR_Blank; 

Position(p->x,23); 
for(k=1;k<Distance/3-2;k++) 
PR_Land; 

p=p->next; 
if(p->x==0) 
{ for(j=2;j<p->y;j++) 
{ Position(p->x+1,j); 
PR_Blank;PR_Blank; 

Position(p->x+1,p->y); 
PR_Blank;PR_Blank;PR_Blank; 
Position(p->x+1,p->y+Max_blank-Grade); 
PR_Blank;PR_Blank;PR_Blank; 
j=j+Max_blank-Grade+1; 
for(j;j<=22;j++) 
{Position(p->x+1,j); 
PR_Blank;PR_Blank; 
}}}} 
void PrtBg() 
{ int i; 
Position(1,1);PR_Bg_TL; 
Position(79,1);PR_Bg_TR; 
Position(1,24);PR_Bg_DL; 
Position(79,24);PR_Bg_DR; 
for(i=3;i<=78;i+=2) 
{ Position(i,1);PR_Bg_X; 
Position(i,24);PR_Bg_X; 

/*for(i=2;i<=23;i++) 
{ Position(1,i);PR_Bg_Y;printf("%d",i-1); 
Position(79,i);PR_Bg_Y; 
}*/ 

void PrtBird() 
{ Position(Bird->x,Bird->y-1); 
PR_Blank; 
Position(Bird->x,Bird->y); 
PR_FBird; 
Position(38,2); 
printf("Score:%d",Score); 

int CheckYN(Bg *q) 
{ Bg *p=q;int i=0; 
while(++i<=5) 
{ if(Bird->y>23) 
return 0; 
if(Bird->x==p->x&&Bird->y<=p->y) 
return 0; 
if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y) 
return 0; 
if(Bird->x==p->x&&Bird->y>p->y+p->l_blank) 
return 0; 
if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y+p->l_blank) 
return 0; 
p=p->next; 

return 1; 

void Prtfirst() 

printf("══════════════════════════════════════n"); 
printf(" ■■ ■■n"); 
printf(" ■■ ■■n"); 
printf(" ■■ ■■n"); 
printf(" ■■ ■■n"); 
printf(" ■■ ■■ C语言版 Flappy Birdn"); 
printf(" ■■ ■■ 瞎搞人:yypossn"); 
printf(" ■■ ■■ 瞎搞日期:2014.2n"); 
printf(" ■■ ■■ 耗时:4小时n"); 
printf(" ■■■ ■■ 游戏说明:n"); 
printf(" ■■ 1-按上箭头使鸟起飞n"); 
printf(" ■■ 2-等级越高,难度越大!n"); 
printf(" Ю ■■■n"); 
printf("n"); 
printf(" nnnnnnnn"); 
printf(" ┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳n"); 
system("pause"); 
Position(1,1); 
int i=0; 
while(i++<40*25) 
PR_Blank; 

void main() 
{int i=0;char ch; 
Prtfirst(); 

PrtBg(); 
CreatBg(); 
InsertBg(Bg1); 
InsertBg(Bg1); 
InsertBg(Bg1); 
CreatBird(); 
while(1) 

if(!CheckYN(Bg1)) 
break; 
Check_Bg(Bg1); 
Prt_Bg(Bg1); 
PrtBird(); 
Loop_Bg(Bg1); 
Bird->y=Bird->y+1; 
if(GetAsyncKeyState(VK_UP)) 
{ Position(Bird->x,Bird->y-1); 
PR_Blank; 
Bird->y=Bird->y-4; 

while(i++<500); 
{ Sleep(100); 

i=0; 

Position(38,10); 
printf("You Lost!"); 
Position(1,25); 
system("pause"); 
}