从别处见到一位大神的代码 飞扬的小鸟(flappy bird)

#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;
    }
}

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(" ══════════════════════════════════════
");
    printf(" ■■ ■■ C语言版 Flappy Bird
");
    printf(" ■■ ■■ 瞎搞人:yyposs
");
    printf(" ■■ ■■ 瞎搞日期:2014.2
");
    printf(" ■■ ■■ 耗时:4小时
");
    printf(" ■■ ■■ 游戏说明:
");
    printf(" ■■ ■■ 1-按上箭头使鸟起飞
");
    printf(" ■■ ■■ 2-等级越高,难度越大!
");
    printf(" ■■ ■■ 【无版权,随意修改】
");
    printf(" ══════════════════════════════════════
");
    system("pause");
    Position(1,1);
    int i=0;
    while(i++<40*25)
    PR_Blank;
}
int 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");
    return 0;
}
原文地址:https://www.cnblogs.com/freedomchaser/p/5807095.html