C语言实现Flappy Bird小游戏

作者:一个全栈游戏开发者 时间:2022-03-13 13:56:24 

本文实例为大家分享了C语言实现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;
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");
}

来源:https://blog.csdn.net/themagickeyjianan/article/details/39935095

标签:C语言,Flappy,Bird
0
投稿

猜你喜欢

  • java读取文件内容,解析Json格式数据方式

    2021-10-07 13:56:23
  • Android实现左右滑动切换图片

    2021-06-20 10:51:30
  • Java中的静态绑定和动态绑定详细介绍

    2023-01-18 19:54:06
  • Android桌面插件App Widget用法分析

    2022-02-05 02:26:39
  • Java程序打包成带参数的jar文件实例代码

    2022-12-12 03:50:39
  • Java PDF 添加数字签名的实现方法

    2022-01-03 04:05:56
  • Java 图表类库详解

    2021-11-09 00:25:11
  • IntelliJ IDEA 2017 汉化包及图文教程

    2023-11-25 12:17:58
  • C#/VB.NET 实现彩色PDF转为灰度PDF

    2021-07-23 08:23:49
  • C#与PLC通讯的实现代码

    2021-10-29 13:34:39
  • Android实现图片点击爆炸效果

    2023-06-04 04:18:55
  • mybatis中resultMap 标签的使用教程

    2022-01-15 11:19:42
  • 解析spring加载bean流程的方法

    2023-11-29 13:50:32
  • 程序猿必须要掌握的多线程安全问题之锁策略详解

    2021-10-19 04:57:17
  • java 类加载机制和反射详解及实例代码

    2023-11-30 06:42:20
  • java各种类型对象占用内存情况分析

    2023-08-22 10:32:05
  • 详解Mybatis-plus中更新date类型数据遇到的坑

    2022-08-17 21:43:14
  • Winform之TextBox输入日期格式验证yyyy-mm-dd

    2023-04-14 21:35:05
  • Spring Boot 员工管理系统超详细教程(源码分享)

    2022-04-18 13:32:26
  • C#实现简单的天气预报示例代码

    2022-03-22 22:52:59
  • asp之家 软件编程 m.aspxhome.com