说明

  • 这个寒假玩了会Flappy Bird,感觉挺好玩,于是试着自己写了一个出来,希望大家喜欢!
  • 游戏中界面十分简洁,可是别看它这么简单,实际上奥妙重重!
  • 在源码中可以见到有许多宏定义,是游戏中的一些参数,后面的注释也有讲解,不同的参数配置有不同的效果,你们可以自己改一改,试一试!
  • 操控十分简单,只要按下键盘( 随意一个键 )“bird”就会往上跳
  • 要是你不幸撞到了柱子上,这一局就结束了,这时会等大概两秒,再等待你的指令,要是你这时按下”*”,就退出了,按其它的则开始新的一局。
  • 这里也给出了几个预设的参数设置,空白的位置或没写出来的意思是和程序里的默认一样
编号 hest mo hei wid gap len T 说明
1 100 2000 20 13 5 3 25 最普通
2 100 1000 40 30 9 5 25 屏幕大一点,不过也挺难
3 100 1500 20 30 8 7 2 你能过三个算你厉害
4 100 800 40 30 5 3 25 能过一个算你厉害
5 100 2000 20 30 18 5 25 非常容易

实现

这个相对简单一些,我是用了变量v来记录下一个时间单位”bird”应该在纵方向移动多少,因为在抛物线中,delta(y)是呈线性的。而”bird”与屏幕的横向相对位置是不变的,所以”bird”的移动就处理好了。处理好”bird”的移动后,就是随机放柱子以及柱子的移动了,就模拟,看一看程序就知道了。不过为了让它不那么卡,就用了gotoxy(),只有要变的地方才过去变一下,要是全屏刷新就很卡了。

截图


要是调成这样,随随便便上一百~~↓

源码

点此下载可执行文件和源码

附上源代码

#include <cstdio>
#include <ctime>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
#include <cstring>
using namespace std;
//==================================================================
#define hest 100            //跳的速度(点击到最高点有 (250/hest) 秒)
#define mo 2000             //跳的高度(每次点击跳到最高多 (((1+hest)*hest+hest)/mo) 格)
#define hei 20              //屏幕高度
#define wid 13              //屏幕宽度
#define det v*2-1
#define gap 5               //柱子间上下的空隙长度
#define len 3               //柱子的宽度
#define T  25               //柱子移动时间单位      T t移动一格
#define TT 500/T            //柱子出现频率            TT T出现一个
//==================================================================
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void gotoxy(int x,int y)//位置函数(列为x 行为y)
{COORD pos;pos.X=2*x;pos.Y=hei-y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}int v,h,hx,hy,t,tt,gg,quit,score,plused,wall[hei+5][wid+len+10];
/*t:  时间基本单位          1t=4mstt: 辅助作用                柱子每 移动T格tt++ quit                        记录是否退出游戏 plused                      辅助用作计分 wall[i][j]  第 i 行第 j 列的柱子情况(0为空 1为有但还没打印 2为打印过了)
*/ void reset(){system("cls");color(4);for (int i=0; i<=wid; i++){gotoxy(i,-1); printf("※");}gg=0;hx=5;hy=hei/2;h=hy*mo;t=0;tt=-5; v=hest;score=0;memset(wall,0,sizeof(wall));color(14); gotoxy(hx,hy); printf("◎");
}void move_bird(){h+=(v*2-1);if (h>hei*mo) h=hei*mo;if (h/mo!=hy){gotoxy(hx,hy); printf("  ");hy=h/mo;if (hy<0) hy=h=0;//gg=1;if (wall[hy][hx]) gg=1;gotoxy(hx,hy);color(14); printf("◎");}
}void move_wall(){for (int i=0; i<=hei; i++){int k=0,pp=0;while (k<wid+5){color(2); for (; k<=wid+5 && !wall[i][k]; k++);if (k+len/2==hx){if (!plused) plused=1, score++;if (!pp) color(15),pp=1;}if (k>=0 && wall[i][k]) wall[i][k-1]=1;k-=2; if (k<-1) k=-1;while (wall[i][++k]){if (hx==k && hy==i) gg=1;if (k<=wid && wall[i][k]==1){wall[i][k]=2; gotoxy(k,i); printf("█");}}wall[i][k-1]=0; gotoxy(k-1,i); printf("  ");}}
}void new_wall(){srand(time(NULL));int dd=(rand()%(hei-gap-1)+1),uu=dd+gap+1;for (int i=1; i<=len; i++) wall[dd][i+wid]=1;for (int i=dd-1; i>=0; i--) for (int j=2; j<len; j++) wall[i][j+wid]=1;for (int i=1; i<=len; i++) wall[uu][i+wid]=1;for (int i=uu+1; i<=hei; i++) for (int j=2; j<len; j++) wall[i][j+wid]=1;plused=0;
}void game(){while (!gg){v--;if(kbhit()) {char ch=getch(); v=hest;}Sleep(4); t=(t+1)%T;if (tt==TT) tt=0, new_wall();if (t==0) tt++, move_wall();move_bird();color(8);gotoxy(wid/2,2*hei/3);printf("%d",score);}gotoxy(wid/2,-3); color(15); printf("GG~");gotoxy(wid/2-3,-5); printf("final score: %d",score);gotoxy(hx,hy); color(12); printf("◎");
}int main(){char ch;while (ch!='*'){reset();ch=getch();game();Sleep(1500);while (kbhit()) ch=getch();Sleep(1000);ch=getch();}
}

游戏——Flappy Bird相关推荐

  1. 游戏Flappy Bird走红启示:没人知道玩家想要什么

    [导读]Flappy Bird现排名中国区App Store免费榜第四名.该游戏日平均广告收入达到了5万美元. 腾讯科技 王鑫 2月7日报道 游戏开发者一直在试图了解,到底玩家会喜欢什么样的游戏?免费 ...

  2. 用Phaser来制作一个html5游戏——flappy bird (一)

    用Phaser来制作一个html5游戏--flappy bird (一) Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如 ...

  3. 【新手上路】Java必备小游戏——Flappy Bird(飞翔的小鸟)

    <飞翔的小鸟>是一款曾经比较火热的小游戏,本文可以带你你从零开始,一步一步的开发出这款小游戏.如果你只是刚入门java的新手,不用担心,只要你简单掌握了该游戏所需要的javase基础知识, ...

  4. 我的第一个Unity的2D小游戏(Flappy Bird)

    前言 兜兜转转跑来学习unity了,学习利用的是unity2017.2版本,在看过网上所谓的一堆零基础入门的视频后(确实0基础,无外乎都从界面开始介绍,然后是脚本基础几个API的介绍,然后讲解了下UG ...

  5. 用Unity3D开发2D小游戏 Flappy Bird

    简介: 最近在学习Unity3D,用了两天时间做了个小游戏打算放上了和大家分享一下,项目名定义为Flapping,是参考Flappy Bird做的,高手勿喷. 这是原本游戏效果图: 这是本项目效果图: ...

  6. JS游戏——flappy bird

    效果展示(视频加载可能有点慢哦~ ) 总体思路 在点击开始游戏之前的设置 1.需要设置背景的移动, 2.小鸟上下的跳跃 3.开始游戏按钮设置思路 点击开始按钮之后的设置 1.小鸟不需要上下跳跃 2.开 ...

  7. java小游戏------Flappy Bird(飞翔的小鸟含源码)

    前言:本小游戏可作为java入门阶段收尾创作. 需:掌握面向对象的使用,了解多线程和异常处理等知识. 如上图所示:我们需要绘制背景,小鸟,障碍物,当然也包括游戏开始界面以及死亡界面. 一:思路解析: ...

  8. flappy bird游戏源代码揭秘和下载后续---移植到android真机上

    前言:         上一篇博客 flappy bird游戏源代码揭秘和下载,源码是运行在window或者mac系统上的,现在我们需要把代码移植到android真机上,让小鸟在手机里飞起来! ps: ...

  9. flappy bird游戏源代码揭秘和下载后续---移植到html5网页浏览器

    前言:      我们分析了flappy bird的代码思路(flappy bird游戏源代码揭秘和下载),也移植到了android平台(flappy bird游戏源代码揭秘和下载后续---移植到an ...

最新文章

  1. linux+while循环多条件,有效的while循环条件客户端选择(TCP连接在Linux - C)
  2. Action Framework- Table PPFSFMLRU
  3. 计算机数控系统的软件结构模式,第四章 计算机数控系统(CNC系统)
  4. [ExtJs6] 环境搭建及创建项目
  5. 【转】如何用好SVN的Branch
  6. python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
  7. Centos7 下安装mariadb及其基本操作
  8. Qt Creator 设置默认编码格式为 UTF-8
  9. 1040. Airline Company
  10. Axure RP 9下载安装
  11. 基频和倍频的概念_小知识:关于倍频程
  12. 教你安装ps,pr,ae,ai等Adobe软件,办公必备
  13. STM32f4日记9之LD3320语音识别(您的私人语音助手MICRO)
  14. 财富提升成都IT产业吸引力
  15. 如何远程桌面局域网内计算机,如何使用远程桌面控制局域网中的另一台计算机...
  16. Mysql关键特性-插入缓冲 (Insert Buffer)
  17. 2021年危险化学品生产单位安全生产管理人员试题及解析及危险化学品生产单位安全生产管理人员模拟考试
  18. java实行excel cell内换行
  19. c语言二维图形变换程序,C语言图形编程(五、二维图形变换-01)(国外英文资料).doc...
  20. 通过键盘上的方向键(上,下,左,右) 控制按键分别向对应的方向移动

热门文章

  1. mysql中mvcc解决不可重复读
  2. 【Android每周专题】触摸屏手势
  3. 国内消防报警主机调试软件
  4. Spring集成elasticSearch,搭建、使用、加密
  5. 数字电路中的建立时间与保持时间是什么
  6. mysql视图 实验报告_数据库实验报告(视图).doc
  7. CSS3-选择器+文字+边框+背景+颜色+渐变
  8. 成都百知教育:做Shopee店铺没有方向,这3大层级必须理清!
  9. 利用RedisTemplate报错redis Invalid UTF-32 character 0x6a607661 (above 0x0010ffff) at char #8, byte #35)
  10. 如何转载svg类的公众号文章