这篇文章主要为大家详细介绍了C语言实现——《飞翔的小鸟项目》文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!
游戏介绍:
《Flappy Bird》其实是曾经流行的一款手机游戏,你只要让小鸟保持飞行,不要碰到绿色的管道就可以啦。操作虽然简单,但是非常具有挑战哦,不信就来试试吧!
游戏的目标是让小鸟穿过管子,不要碰到任何物体,挑战更远距离!操作只需要控制方向键,让我们的小鸟不碰到柱子即可。
玩法简单,容易上手!所以这也成为了我们编程学习者C语言练习的一个非常好的小项目,如果你没有玩过的话那么可以先去玩一下的,会玩的话对于项目逻辑的理解也是非常有帮助的!接下来就让我们一起来看看吧!
插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;
效果图展示:
配套讲解教程:飞翔的小鸟游戏教程——哔哩哔哩
源代码示例:
includeincludeincludeincludeincludepragmacomment(lib,"winmm.lib")/*************************************************
数据设计
**************************************************/IMAGE background;
IMAGE bigBird[2];//bigBird[0] bigBird[1];IMAGE endImg[2];
IMAGE down[2];
IMAGE up[2];
HWND hwnd;//C语言结构体structbird{intx;//鸟的x和y坐标inty;intspeed;//鸟的速度};structbirdmyBird= {120,10,100};//加载资源:把图片和变量绑定一起voidloadResource(){
loadimage(&background,"background.bmp");
loadimage(&bigBird[0],"birdy.bmp",48,48);
loadimage(&bigBird[1],"bird.bmp",48,48);
loadimage(&endImg[0],"endy.bmp");
loadimage(&endImg[1],"end.bmp");
loadimage(&down[0],"downy.bmp");
loadimage(&down[1],"down.bmp");
loadimage(&up[0],"upy.bmp");
loadimage(&up[1],"up.bmp");
}/**************************************************
鸟的模块
1.绘制鸟的过程
2.按键操作控制鸟的过程
3.音乐部分---多线程
***************************************************///绘制鸟的过程voiddrawBigBird(intx,inty){
putimage(x, y, &bigBird[0], SRCAND);
putimage(x, y, &bigBird[1], SRCPAINT);
}//线程处理函数--->C语言中函数指针DWORD WINAPIplayMusic(LPVOID pVoid){
mciSendString("open jump.mp3",0,0,0);
mciSendString("play jump.mp3 wait",0,0,0);
mciSendString("close jump.mp3",0,0,0);return0;
}/****************************************************
通用性技术:
1.并发编程
2.网络编程
3.数据库编程
*****************************************************///按键交互voidkeyDown(){charuserKey =\0;
userKey = _getch();//暂停功能if(userKey ==)
{while(_getch() !=);
}switch(userKey)
{case72://小键盘myBird.y -= myBird.speed;
CreateThread(NULL,NULL, playMusic,NULL,NULL,NULL);break;default://其他按键break;
}
}//碰地板和上边界处理inthitFloor(){if(myBird.y <=0|| myBird.y >= (512-48))return1;return0;
}//结束动画voidgameOverAction(){intx =60;inty =608;while(y >=240)
{
putimage(0,0, &background);
putimage(x, y, &endImg[0], SRCAND);
putimage(x, y, &endImg[1], SRCPAINT);
y -=50;
Sleep(50);
}
MessageBox(hwnd,"GameOver!You die!!","over", MB_OK);
}/******************************************************
柱子部分
1.画柱子
2.初始化柱子
3.移动柱子
******************************************************/structpillar{//上面柱子的属性intx;inty;inth;//能够推出下面柱子的属性://Height-h;};structpillar柱子[3];//初始化做完voidinitPillar(struct pillar 柱子[],inti){
柱子[i].h = rand() %100+160;
柱子[i].y =0;
柱子[i].x =288;
}voiddrawPillar(struct pillar 柱子){//上面的柱子putimage(柱子.x,0,52, 柱子.h, &down[0],0,320- 柱子.h, SRCAND);
putimage(柱子.x,0,52, 柱子.h, &down[1],0,320- 柱子.h, SRCPAINT);//下面的柱子putimage(柱子.x,512-(320-柱子.h),52,320-柱子.h, &up[0],0,0, SRCAND);
putimage(柱子.x,512- (320- 柱子.h),52,320- 柱子.h, &up[1],0,0, SRCPAINT);
}//通用性+重用性/*************************************************
入口函数
**************************************************/intmain(){
srand((unsignedint)time(NULL));
loadResource();//1.创建窗口hwnd=initgraph(288,608);//描述自由落体for(inti =0; i <3; i++)
{
initPillar(柱子, i);
柱子[i].x =288+ i *150;
}while(1)
{
putimage(0,0, &background);
drawBigBird(myBird.x, myBird.y);for(inti =0; i <3; i++)
{
柱子[i].x -=10;if(柱子[i].x < (-52-150))
{
initPillar(柱子, i);
}
}for(inti =0; i <3; i++)
{
drawPillar(柱子[i]);
}if(hitFloor())
{
gameOverAction();break;
}
myBird.y +=10;//只有有按键才处理,没有按键不能处理//kbhit():存在按键返回非零值if(_kbhit())
{
keyDown();
}
Sleep(50);//延时函数}
_getch();//等待用户按键//2.关闭窗口closegraph();return0;
}
未完成的部分功能代码,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!
如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!
那么今天的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C语言C++哟~
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容