笨鸟先飞小游戏编程教学
对于这个游戏我做的比较粗糙,用一个圆球代替了小鸟,如果导致您觉得降低了逼格,请自行更改。
在写本小游戏前请先自行安装EGE图形库。
直接上代码,因为代码已经非常详细了。
视频讲解:
//笨鸟先飞原创小游戏源代码 #include <graphics.h> #include<stdio.h>#include<stdlib.h>#include<windows.h>// 函数外全局变量定义int birdx,birdy;//小鸟位置 int high,width;//游戏画面尺寸 int zhangaix,zhangaiytop,zhangaiydown;//障碍物坐标 int score;//记录分数 int flag=0;//用于表示是否退出游戏 int a[100];//存储分数int cnt=1;//用于记录游戏次数 void fengmian();//制作封面 void startup();//数据初始化 void show();//显示画面 void shifoujiexu();void shuruwg();//与用户输入无关的更新 void shuruyg();//与用户输入有关的更新 void gameover();//游戏结束后的结尾 int main(){fengmian(); //封面 startup();//数据初始化 while(1){show();//显示的画面 shuruwg();//与输入无关的更新 shuruyg();//输入有关的更新 }return 0;}void fengmian(){high=480; //高度 width=480;//宽度 initgraph(width,high,0);//建立一个画面 setbkcolor(EGERGB(0x0, 0x40, 0x0)); //设置背景色为浅绿色setcolor(EGERGB(0xFF, 0xFF, 0x0));//设置绘图色为黄色 setfont(48,0,"宋体"); //设置字体 setbkmode(TRANSPARENT); //设置文字背景填充方式为透明,默认为OPAQUE不透明outtextxy(120,120,"Fly circle");//输出文字 setfont(20,0,"宋体"); //再次设置字体 outtextxy(150,200,"按任意键开始游戏");//输出文字 outtextxy(150,240,"按空格使小圆上升");//输出文字 outtextxy(80,280,"每得5分提高一个难度,一共三个难度"); //输出文字 char k;k=getch();//输入一个任意键继续 }void show()//显示画面 {cleardevice();//清屏 char str[32];//用于存储准备输出的数据 sprintf(str,"分数:%d,次数:%d",score,cnt);//把数据输入到str中 for(int i=0;i<width;i++)//遍历整个图 {for(int j=0;j<high;j++){if(birdy==j&&birdx==i)//如果该点是鸟所在的点 {setfillcolor(EGERGB(0x0, 0x0, 0xFF));//改变填充颜色 fillellipse(birdx,birdy,10,10);//画一个填充的椭圆(我把椭圆的两个直径设成一样了,就变成了一个圆) }}if(i==zhangaix)//如果该横坐标是障碍所在位置 {setfillcolor(EGERGB(0xFF, 0x0, 0x80));//改变填充颜色 bar(zhangaix,0,zhangaix+50,zhangaiytop);//画上半个柱子 bar(zhangaix,zhangaiydown,zhangaix+50,480);//画下半个柱子 }//两个合起来就是一个完整的 }outtextxy(160,0,str);//输出str }void startup()//数据初始化 {birdy=high/2;//把鸟的横坐标设为全高度的一半 birdx=width/4;//把鸟的初始纵坐标设为宽度的四分之一 zhangaix=width;//把初始障碍的横坐标设为宽度,使它从屏幕左边开始出现 int randposition=rand()%(high-120);//用rand函数取一个随机数,使障碍出现的//缺口随机,增加游戏可玩性 (要整除高度,使随机的数不超出屏幕范围) zhangaiytop=randposition;//把上障碍的底设为随机数 zhangaiydown=randposition+high/4;//把下障碍的上边设为随机数加四分之一高,使障碍的缺口为四分之一高 score=0;//把分数清零 }void shuruwg()//与用户输入无关的更新 {if(birdy>zhangaiytop&&birdy<zhangaiydown&&birdx==zhangaix)//如果没有碰到障碍,顺利穿过 {score++;//分数加1 }if(birdx>=zhangaix&&birdx<=zhangaix+50)//如果鸟的横坐标包含于障碍的横坐标内时 {if(birdy<=zhangaiytop||birdy>=zhangaiydown)//如果碰到障碍就死亡{a[cnt]=score;//记录本局游戏的分数 score=0;//把分数清零 cnt++;//游戏次数加一 shifoujiexu();//进入询问界面函数,问是否结束游戏 }}if(birdy<0||birdy>high)//如果鸟飞的过高或过低超出屏幕 同样死亡 {a[cnt]=score;//记录本局游戏的分数score=0;//把分数清零cnt++;//游戏次数加一 shifoujiexu();//进入询问界面函数,问是否结束游戏 }if(score<=5)//设置三档难度 {birdy++;//每一次更新屏幕使鸟的纵坐标加一,使鸟实现自动往下落 }else if(score<=10){birdy+=2;}else{birdy+=3;}if(zhangaix>0)//如果本次的障碍还没有走出屏幕就把障碍的横坐标减一,实现障碍的自动往左走 {if(score<=5)//设置三档难度 {zhangaix--;}else if(score<=10){zhangaix-=2;}else{zhangaix-=3;}}else //如果已经走出屏幕就重新制造一个新的障碍从右边出现 {zhangaix=width;//把初始障碍的横坐标设为宽度,使它从屏幕左边开始出现 int randposition=rand()%(high-5);//用rand函数取一个随机数,使障碍出现的//缺口随机,增加游戏可玩性 (要整除高度,使随机的数不超出屏幕范围)zhangaiytop=randposition;//把上障碍的底设为随机数 zhangaiydown=randposition+high/4;//把下障碍的上边设为随机数加四分之一高,使障碍的缺口为四分之一高}Sleep(15);//Sleep函数是用于调整屏幕的整体刷新速度,防止鸟下落过快或障碍速度过快}void shuruyg()//与用户输入有关的更新 {char input;if(kbhit())//无需等待的输入 {input=getch();if(input==' ')//如果输入一个空格,鸟的纵坐标就减小,相当于向上飞 {if(score<=5)//设置三档难度 {birdy-=20;}else if(score<=10){birdy-=25;}else{birdy-=30;}}}}void shifoujiexu()//是否结束 {cleardevice();//清屏用于刷新屏幕,然后再重新显示,以实现图形的移动 outtextxy(160,120,"按空格结束游戏");outtextxy(150,200,"按任意键开始游戏");char k;k=getch();//添加一个输入,使游戏结束后可以停留在一个界面,暂时不循环,让制造 一个选择,使游戏可以重新开始 if(k==' ')//如果输入空格结束游戏 {gameover();//进入结束界面 }else{startup();//如果按其他任意键,重新开始游戏,添加此函数重置数据,使数据初始化 }} void gameover(){cleardevice();//清屏用于刷新屏幕,然后再重新显示,以实现图形的移动或转入一个新的界面 setfont(50,0,"宋体");//设置字体 outtextxy(180,30,"排名");//输出文字 int maxx=0;int id=0;int t=3;int s[4];memset(s,0,sizeof s); for(int j=1;j<=3;j++)//一个简单的排序,求出本次游戏中得分最高的三局游戏 {maxx=0;for(int i=1;i<cnt;i++){if(a[i]>maxx){maxx=a[i];id=i;}}a[id]=0;s[j]=maxx;}char str1[15],str2[15],str3[15];//输出排名 sprintf(str1,"FIRSTONE: %d",s[1]);sprintf(str2,"SECONDONE:%d",s[2]);sprintf(str3,"THIRDONE: %d",s[3]);setfont(30,0,"宋体");outtextxy(140,120,str1);outtextxy(140,180,str2);outtextxy(140,240,str3);setfont(20,0,"宋体");outtextxy(140,350,"制作者 :zxp");outtextxy(140,400,"Thank You To Play My Game!"); char x;x=getch();//需要等待的输入,使界面停留在结束界面 exit(0);//游戏结束,关闭界面}
如果觉得《数据结构与程序设计实践期末大作业(编一个小游戏)————笨鸟先飞(C语言)》对你有帮助,请点赞、收藏,并留下你的观点哦!