Flappy Bird C语言实现

#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;
typedef struct Birds {
    int x, y;
    int condition;
}Birds;

Birds * Bird;

typedef struct Bg {
    int x, y;
    int l_blank;
    int reward[9];
    struct Bg * pri;
    struct Bg * next;
}Bg;
Bg * Bg1;

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("══════════════════════════════════════\n");
    printf(" ■■ ■■\n");
    printf(" ■■ ■■\n");
    printf(" ■■ ■■ C语言版 Flappy Bird\n");
    printf(" ■■ ■■ 瞎搞人:yyposs\n");
    printf(" ■■ ■■ 瞎搞日期:2014.2\n");
    printf(" ■■ ■■ 耗时:4小时\n");
    printf(" ■■■ ■■ 游戏说明:\n");
    printf(" ■■ 1-按上箭头使鸟起飞\n");
    printf(" ■■ 2-等级越高,难度越大!\n");
    printf(" Ю ■■■\n");
    printf("\n");
    printf(" ■■■ 欢迎各路大神一起探讨\n");
    printf(" ■■\n");
    printf(" ■■\n");
    printf(" ■■ ■■■ 【无版权,随意修改】\n");
    printf(" ■■ ■■\n");
    printf(" ■■ Ф ■■\n");
    printf(" ■■ ■■\n");
    printf(" ■■ ■■\n");
    printf(" ■■ ■■\n");
    printf(" ■■ ■■\n");
    printf(" ┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳\n");
    system("pause");
    Position(1, 1);
    int i = 0;
    while (i++ < 40 * 25)
        PR_Blank;
}

void main() {
	
    int i = 0;
    Bird = (Birds * ) malloc(sizeof(Birds));
    Bg1 = (Bg * ) malloc(sizeof(Bg));
    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");
}

你可能感兴趣的:(Flappy Bird C语言实现)