c语言游戏编程,下落的小鸟 求代码
的有关信息介绍如下:下落的小鸟
#include<stdio.h>
#include<stdlib.h>
#席立本让种视教include<conio.h>
#include<time.h>
#include<Windows.h>
intGrad360问答e=1,Score=0,Max_blank=9,Distance=18;
structBirds{intx;inty;}; //定义一种Birds数据类型(含3个成员)
B著突容坐省深irds*Bird=味迅头(Birds*)malloc(sizeof(李已若端Birds)); //定义B责资八官工推山irds类型指针变量Bird并赋初值
stru内消采婷固买范克移从各ctBg{intx,y;intl_blank;Bg*宗伯岩武述座穿菜触季pri;Bg*next;脸西待次采今哥怕}; //定义一种Bg数据类型(含5个成员)
Bg*Bg1=(Bg*)malloc(sizeof(Bg)); //定义Bg类型指针变量Bg1并赋初值
voidPosition(intx,inty) //光标定位函数(用于指定位置输出)
{COORDpos={x-1,y-1}艺众头掌比伟宽型同阳脚;
HANDLEOut=GetS载多烈则抓州议只农材tdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPositi简组环器台on(Out,pos);
}
voidCsh() //初始化界面
{
printf("══════════════════════════════════════\n");
printf("编■■■■C语言版FlappyBird\n");
printf("■■■■\n");
printf("■由部考鱼短危水■■■\n");
printf("■■■■瞎搞人:yyp独硫吃可始班成层养落离oss原创\n");
pr剧满还层作击型门引intf("■■盾短声粉销虽期审别作■■瞎搞日期:2014.2\n");
printf("■■■■\n");
printf("■■■■改编:鸣蝉百2021.7\n");
printf("■■■■操作:按向上方向键让小鸟起飞\n");
printf("■■\n");
printf("■■\n");
printf("■■■■\n");
printf("■■■■\n");
printf("■■■■\n");
printf("■■■■\n");
printf("■■■■DEVc++运行通过\n");
printf("══════════════════════════════════════\n");
printf(" 按键继续…");
getch();
system("cls");
}
voidPrFK() //输出方框(游戏范围区)
{inti;
Position(1,1);printf("╔"); Position(79,1);printf("╗");
Position(1,24);printf("╚"); Position(79,24);printf("╝");
for(i=3;i<=78;i+=2){Position(i,1);printf("═");Position(i,24);printf("═");}
for(i=2;i<=23;i++)
{Position(1,i);printf("║");if(i<11)printf("0%d",i-1);elseprintf("%d",i-1);
Position(79,i);printf("║");
}
Position(4,25);printf("小鸟即将出现,请准备按键起飞…");
getch();
Position(4,25);printf(" ");
}
voidCreatBg() //创建障碍物坐标(便于打印输出)
{Bg*Bg2=(Bg*)malloc(sizeof(Bg));
Bg1->x=90;Bg1->y=8; //确定障碍物的一对基本坐标(此时值是在游戏框之外)
Bg2->x=Bg1->x+Distance;Bg2->y=9; //下一障碍物的基本坐标x、y
Bg1->l_blank=Max_blank-Grade; //障碍物上下两部分之间的空白距离l_blank
Bg2->l_blank=Max_blank-Grade;
Bg1->next=Bg2;Bg1->pri=Bg2;
Bg2->next=Bg1;Bg2->pri=Bg1;
}
voidInsertBg(Bg*p) //随机改变障碍物的y坐标,让空白通道有上下变化
{inttemp;
Bg*Bgs=(Bg*)malloc(sizeof(Bg));
Bgs->x=p->pri->x+Distance;
Bgs->l_blank=Max_blank-Grade;
srand((int)time(0)); //启动随机数发生器
temp=rand(); //产生一个随机数并赋值给temp
if(temp%2==0)
{if((temp%4+p->pri->y+Max_blank-Grade)<21)
Bgs->y=p->pri->y+temp%4;
elseBgs->y=p->pri->y;
}
else
{if((p->pri->y-temp%4)>2)Bgs->y=p->pri->y-temp%4;
elseBgs->y=p->pri->y;
}
Bgs->pri=p->pri;Bgs->next=p;
p->pri->next=Bgs;p->pri=Bgs;
}
voidCreatBird() //建立小鸟的坐标(初始打印输出小鸟的位置)
{Bird->x=41;Bird->y=10;}
intCheckYN(Bg*q) //判断游戏结束与否(值为0是要结束,为1没有要结束)
{Bg*p=q;inti=0;
while(++i<=5)
{if(Bird->y>23)return0;
if(Bird->x==p->x&&Bird->y<=p->y)return0;
if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y)return0;
if(Bird->x==p->x&&Bird->y>p->y+p->l_blank)return0;
if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y+p->l_blank)
return0;
p=p->next;
}
return1;
}
voidCheck_Bg(Bg*q) //核查开头的障碍物坐标是否在游戏区内
{Bg*p=q;inti=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;
elsep->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;
elsep->y=p->y;p->x=p->pri->x+Distance;
p->l_blank=Max_blank-Grade;
}
}
}
}
voidPrt_Bg(Bg*q) //打印输出障碍物(依据其x、y坐标进行相应输出)
{Bg*p=q;inti=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);printf("■");printf("■");printf("");}
Position(p->x,p->y);
printf("■");printf("■");printf("■");printf("");
Position(p->x,p->y+p->l_blank);
printf("■");printf("■");printf("■");printf("");
k=k+p->l_blank+1;
for(k;k<=23;k++){Position(p->x+1,k);printf("■");printf("■");printf("");}
}
p=p->next;
if(p->x==0)
{for(j=2;j<p->y;j++){Position(p->x+1,j);printf("");printf("");}
Position(p->x+1,p->y);
printf("");printf("");printf("");
Position(p->x+1,p->y+Max_blank-Grade);
printf("");printf("");printf("");
j=j+Max_blank-Grade+1;
for(j;j<=22;j++){Position(p->x+1,j);printf("");printf("");}
}
}
}
voidPrtBird() //打印输出小鸟
{Position(Bird->x,Bird->y-1);printf("");
Position(Bird->x,Bird->y);printf("Ю");
Position(38,2);printf("Score:%d",Score);
}
voidLoop_Bg(Bg*q) //障碍物x坐标左移,并记录成绩
{Bg*p=q;inti=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++;
}
}
}
intmain()
{inti=0;intt;
while(1)
{
Csh();PrFK();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);printf("");
Bird->y=Bird->y-4;
}
Sleep(200); //程序延时200毫秒(数值大小决定游戏速度快慢)
i=0;
}
Position(6,25);
printf("游戏结束! 请输入:0.退出 1.重玩");
scanf("%d",&t);
if(t==0)break;
system("cls");Score=0;
}
return0;
}