C语言实现Flappy Bird小游戏

小编 2026-07-04 阅读:1765 评论:0
本文实例为大家分享了C语言实现Flappy Bird小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h>...

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表