C语言实现Flappy Bird小游戏

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

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

(0)

相关推荐

  • C语言简易版flappy bird小游戏

    假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc

  • C语言实现纸牌游戏之小猫钓鱼算法

    本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下 星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出

  • C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo

  • C语言实现小猫钓鱼游戏

    本文实例为大家分享了C语言实现小猫钓鱼游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<time.h> #include<string.h> #include<stdlib.h> #include<windows.h> typedef struct { int data[3600]; int col[3600]; int top; } stack; typedef struct { int data[

  • C语言利用模板实现简单的栈类

    本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈.出栈.返回大小.判空等基本功能 #pragma once using namespace std; const int MAXSIZE = 0xfff; template<class type> class Class_Linkstack { int top; type* my_s; int max_size; public: Class_Linkstack(

  • C语言如何在指针中隐藏数据详解

    前言 编写 C 语言代码时,指针无处不在.我们可以稍微额外利用指针,在它们内部暗中存储一些额外信息.为实现这一技巧,我们利用了数据在内存中的自然对齐特性. 内存中的数据并非保存在任意地址.处理器通常按照其字大小相同的块读取内存数据:那么考虑到效率因素,编译器会按照块大小的整数倍对内存中的实体进行地址对齐.因此在 32 位的处理器上,一个 4 字节整型数据肯定存放在内存地址能被4整除的地方. 下面,假设系统中整型数据和指针大小均为 4 字节. 现在有一个指向整型的指针.如上所述,整型数据可以存放在

  • C语言实现学生成绩管理系统实战教学

    趁着放假无事,开始用C语言开发一些小的项目,巩固基础知识的同时学习新的知识. 学生成绩管理系统实现的功能有:成绩录入.学生成绩查询.删除.修改.通过文件保存等. 开发这样一个系统需要具备的知识:线性表(链表).文件操作.排序(如果需要成绩排序). 开发环境为VS2015:在Linux下没有conio.h的头文件,需要修改与getch()函数相关的代码. #include <stdio.h> #include <stdlib.h> #include <string.h>

  • 如何写出优美的C语言代码

    面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点. 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体.结构体正是面向对象语言中的类的概念的雏形,比如: typedef struct{ float x; float y; }Point; 定义了

  • C语言实现2048游戏(ege图形库版)

    这几天看到我们班上一个大神写了一个2048出来,我自己也想尝试一下,经过几天自己尝试努力下,自己终于写出来了.现在和大家分享一下,也希望能得到大神的指点. 实现的效果如图 先来讲一下我的思路吧 1.首先肯定是要一个4X4的二维数组来存放数字存放0.2.4-- 2.游戏开始与过程中需要随机出现2或者4,所以需要调用time.h这个库 3.游戏开始时,假如当获取字符为'w'则先用循环判定这个数字的下方有无和它相等的数字.如无则跳过,如有相加.然后在判定是否可以向上移动 下面是我的代码 (我本来是还要

  • C语言数组栈实现模板

    本文实例为大家分享了C语言数组栈实现模板的具体代码,供大家参考,具体内容如下 SeqStack.h #pragma once #define MAX_SIZE 1024 typedef struct SEQSTACK { void* data[MAX_SIZE]; int size; }SeqStack; SeqStack* Init_SeqStack(); // 初始化栈 void Push_SeqStack(SeqStack* stack, void* data); // 入栈 void*

随机推荐