提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
绝对心跳的游戏,可以让你玩到手抽筋,你要帮助小鸟不断的向上飞,飞慢了就意味着生命的结束,因为下面是旋转着的巨大的直升机翼!
一、flappy_bird
代码:
#include<bits/stdc++.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;
struct Birds {
int x,y;
int condition;
};
Birds*Bird=(Birds*)malloc(sizeof(Birds));
struct Bg {
int x,y;
int l_blank;
int reward[9];
Bg*pri;
Bg*next;
};
Bg*Bg1=new Bg[sizeof(Bg)];
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(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ C++语言版 Flappy Bird\n");
printf(" ■■ ■■ 瞎搞人:侦探鼠\n");
printf(" ■■ ■■ 瞎搞日期:2019.7.3\n");
printf(" ■■ ■■ 耗时:2.46小时\n");
printf(" ■■■ ■■ 游戏说明:\n");
printf(" ■■ 1-按上箭头使鸟起飞\n");
printf(" ■■ 2-等级越高,难度越大!\n");
printf(" Ю ■■■\n");
printf("\n");
printf(" \n\n\n\n\n\n\n\n");
printf(" ┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳\n");
system("pause");
Position(1,1);
int i=0;
while(i++<40*25)PR_Blank;
}
int main() {
int i=0;
char ch;
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("Game Over!");
Position(1,25);
system("pause");
}
二、flappy_bird2
代码:
//空格控制
#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=4ms
tt: 辅助作用 柱子每 移动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();
}
}
总结
以上就是今天要讲的内容,本文用c++弄的flappy_bird2好玩吗,做做投票吧: