C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

这篇文章主要为大家详细介绍了C语言实现——《飞翔的小鸟项目》文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

这篇文章主要为大家详细介绍了C语言实现——《飞翔的小鸟项目》文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

游戏介绍:

《Flappy Bird》其实是曾经流行的一款手机游戏,你只要让小鸟保持飞行,不要碰到绿色的管道就可以啦。操作虽然简单,但是非常具有挑战哦,不信就来试试吧!

游戏的目标是让小鸟穿过管子,不要碰到任何物体,挑战更远距离!操作只需要控制方向键,让我们的小鸟不碰到柱子即可。

玩法简单,容易上手!所以这也成为了我们编程学习者C语言练习的一个非常好的小项目,如果你没有玩过的话那么可以先去玩一下的,会玩的话对于项目逻辑的理解也是非常有帮助的!接下来就让我们一起来看看吧!

插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;

C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

效果图展示:

C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

配套讲解教程:飞翔的小鸟游戏教程——哔哩哔哩

源代码示例:

#include <stdio.h>#include <graphics.h>#include <conio.h>#include <time.h>#include <mmsystem.h>#pragma comment(lib,"winmm.lib")/*************************************************					数据设计**************************************************/IMAGE background;IMAGE bigBird[2];		//bigBird[0]  bigBird[1];IMAGE endImg[2];IMAGE down[2];IMAGE up[2];HWND hwnd;//C语言结构体struct bird{	int x;				//鸟的x和y坐标	int y;	int speed;			//鸟的速度};struct bird myBird = { 120, 10, 100 };//加载资源:把图片和变量绑定一起void loadResource(){	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.音乐部分---多线程***************************************************///绘制鸟的过程void drawBigBird(int x, int y){	putimage(x, y, &bigBird[0], SRCAND);	putimage(x, y, &bigBird[1], SRCPAINT);}//线程处理函数--->C语言中函数指针DWORD WINAPI playMusic(LPVOID pVoid){	mciSendString("open jump.mp3", 0, 0, 0);	mciSendString("play jump.mp3 wait", 0, 0, 0);	mciSendString("close jump.mp3", 0, 0, 0);	return 0;}/****************************************************		通用性技术:				1.并发编程				2.网络编程				3.数据库编程*****************************************************///按键交互void  keyDown(){	char userKey = '\0';	userKey = _getch();	//暂停功能	if (userKey == ' ')	{		while (_getch() != ' ');	}	switch (userKey)	{	case 72:	//小键盘		myBird.y -= myBird.speed;		CreateThread(NULL, NULL, playMusic, NULL, NULL, NULL);		break;	default:	//其他按键		break;	}}//碰地板和上边界处理int hitFloor(){	if (myBird.y <= 0 || myBird.y >= (512 - 48))		return 1;	return 0;}//结束动画void gameOverAction(){	int x = 60;	int y = 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.移动柱子******************************************************/struct pillar{	//上面柱子的属性	int x;	int y;	int h;		//能够推出下面柱子的属性:	//Height-h;};struct pillar 柱子[3];//初始化做完void initPillar(struct pillar 柱子[], int i){	柱子[i].h = rand() % 100 + 160;	柱子[i].y = 0;	柱子[i].x = 288;}void drawPillar(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);}//通用性+重用性/*************************************************					入口函数**************************************************/int main(){	srand((unsigned int)time(NULL));	loadResource();	//1.创建窗口	hwnd=initgraph(288, 608);	//描述自由落体	for (int i = 0; i < 3; i++)	{		initPillar(柱子, i);		柱子[i].x = 288 + i * 150;	}	while (1)	{		putimage(0, 0, &background);		drawBigBird(myBird.x, myBird.y);		for (int i = 0; i < 3; i++)		{			柱子[i].x -= 10;			if (柱子[i].x < (-52 - 150))			{				initPillar(柱子, i);			}		}		for (int i = 0; i < 3; i++)		{			drawPillar(柱子[i]);		}		if (hitFloor())		{			gameOverAction();			break;		}		myBird.y += 10;		//只有有按键才处理,没有按键不能处理		//kbhit():存在按键返回非零值		if (_kbhit())		{			keyDown();		}		Sleep(50);		//延时函数	}	_getch();			//等待用户按键	//2.关闭窗口	closegraph();	return 0;}

未完成的部分功能代码,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!

如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!

那么今天的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C语言C++哟~

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

编程学习视频分享:

C语言项目实战:《飞翔的小鸟》零基础项目!190行源代码示例

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/116069.html

(0)

相关推荐

  • 华为鸿蒙车载系统合作伙伴(用华为鸿蒙系统的车)

    巩 作者吉果编辑部 12月23日,在华为冬季旗舰新品发布会上,华为的最终产品居然是“车”! 新车搭载最新的鸿蒙系统智能座舱,以及华为1.5T四缸增程器,在CLTC工况下满油满电可续...

    科技 2021年12月25日
  • 教育孩子最好的方法,就是教导孩子要有健康的,促进孩子发展的方式

    小孩的教育是持续关注的话题,今年国家出台多教育相关的政策和制度把教育话题再次上热搜。最近看到一篇关于教育的文章,里面的一个观点让我陷入了思考,观点是“教育的目的不是学会知识,而是学会思维方式”。不谋而合,我非常认同。回到实际的教育场景当中确实更多在乎知识和技能,比如参加各种兴趣班,家长非常关注孩子的成绩和排名等等,都在告诉我们的孩子你要学,学习更多的知识,掌握更多的知识,你未来才有更好的发展。是的,学习固然是重要的,但学会了什么很重要,假如学习到的知识不能举一反三,不知道如何实际应用,那又有何用?

    生活 2021年12月3日
  • 野村:中国云市场将长期保持增长。

    野村中国科技及电讯行业分析师段冰表示,鉴于在创新应用(VR/AR、物联网、智能汽车等)、技术进步(5G、AI等)及良好监管环境的推动下,中国的云市场将继续保持长期增长。IaaS(基础设施即服务)在中国的云市场中扮演着至关重要的角色,亦是最大的细分市场。段冰提示,具有更高的准入门槛、更高附加值的解决方案和客户忠诚度的PaaS(平台即服务)和SaaS(软件即服务)市场,未来具有更好的增长前景。(上证报)

    科技 2021年10月25日
  • 2021年流行喝什么茶,“没有秋天的2021”该如何健康饮茶?

    在一波波冷空气的侵袭下,很多地区的空气都瞬间从30摄氏度左右降到了22摄氏度以下。甚至有些地方在一天之内,两个季节飞快地进行了更替,所以这段时间大家要注意保暖,避免着凉感冒。同时居家休息时,可以泡上一杯或浓或淡的香茶,热热的一口喝下去,既暖身又暖心,真是舒服极了。

    生活 2021年10月28日
  • 对司马南手撕联想一点看法

    国家发展经济,高科技企业带动国家发展重要一环

    科技 2021年11月30日