当前位置: 首页 > 科技 > 人工智能 > C/C+编程笔记:飞翔的小鸟——C语言版本_腾讯新闻

C/C+编程笔记:飞翔的小鸟——C语言版本_腾讯新闻

天乐
2020-08-16 17:10:17 第一视角

C语言游戏教学项目,有C基础和对小游戏感兴趣的可以看看,做出来成就感爆棚~

使用的编译器是VS2013,图片素材,可以自己百度寻找素材图片。

话不多说,接下来就奉上我们的源码了(写的时候包含了一些笔者的注释,勿怪勿怪):

/*

1.创建一个可视化窗口

2.显示一张背景图

*/

#include

#include

#include

#include

#include

#include

#pragma comment(lib,"winmm.lib")

/*

stdlib.h : Sleep

stdio.h : C语言头文件

conio.h : _getch()

graphics.h: 图形库头文件

写的时候报错,需要安装

*/

int main()

{

//288*608

srand((unsigned int)time(NULL));

initgraph(288, 608);

struct 柱子 pillar[3];

for (int i = 0; i

{

initPillar(pillar, i);

//让柱子之间有差距

pillar[i].x = 288 + i * 150;

}

loadResource();

while (1)

{

putimage(0, 0, &background);

drawBird(flyBird.x, flyBird.y);

flyBird.y += 10;

for (int i = 0; i

{

pillar[i].x -= 10;

if (pillar[i].x

{

initPillar(pillar, i);

}

}

for (int i = 0; i

{

drawPillar(pillar[i]);

}

//一定要先判断按键是否按下

if (_kbhit())

{

keyDown();

}

if (hitFloor())

{

actionGameOver();

break;

}

Sleep(50);

}

closegraph();

return 0;

}

IMAGE background;

IMAGE myBird[2];//鸟有两张 myBird[0] myBird[1]

IMAGE overImg[2];

IMAGE down[2];

IMAGE up[2];

//鸟的属性

struct 鸟

{

int x;

int y;

int speed;//上跳速度

};

struct 鸟 flyBird = { 124, 0, 100 };

struct 柱子

{

int x;//上面柱子的起始坐标

int y;

int h;//上面柱子显示的高度

};

//加载资源

void loadResource()

{

loadimage(&background, "background.bmp");

loadimage(&myBird[0], "birdy.bmp", 48, 48);

loadimage(&myBird[1], "bird.bmp", 48, 48);

loadimage(&overImg[0], "endy.bmp");

loadimage(&overImg[1], "end.bmp");

loadimage(&down[0], "downy.bmp");

loadimage(&down[1], "down.bmp");

loadimage(&up[0], "upy.bmp");

loadimage(&up[1], "up.bmp");

}

//画鸟--->透明贴图技术

void drawBird(int x, int y)

{

//SRCAND方式贴掩码图

putimage(x, y, &myBird[0], SRCAND);

//SRCPAINT 方式贴背景图

putimage(x, y, &myBird[1], SRCPAINT);

}

//多线程

DWORD WINAPI playMusic(LPVOID lpParamer)

{

mciSendString("open jump.mp3", 0, 0, 0);

mciSendString("play jump.mp3 wait", 0, 0, 0);

mciSendString("close jump.mp3", 0, 0, 0);

return 0;

}

//应用技术-->所有编程行业通用

//没有学的同学,想办法去拓展一下

//并发编程,网络编程,数据库编程

//鸟的按键处理

void keyDown()

{

/*

mciSendString("指令",0,0,0);

指令:

open:打开

play:播放

pause:暂停

wait:等待

stop:停止

close:关闭

*/

char userKey = _getch();//_getch();

switch (userKey)

{

case ' ':

flyBird.y -= flyBird.speed;

CreateThread(NULL, NULL, playMusic, NULL, NULL, NULL);

break;

default:

break;

}

}

int hitFloor()

{

if (flyBird.y = (608 - 96))

return 1;

return 0;

}

void actionGameOver()

{

//结束图片初始位置

int x = 50;

int y = 608;

while (y >= 240)

{

putimage(0, 0, &background);

putimage(x, y, &overImg[0], SRCAND);

putimage(x, y, &overImg[1], SRCPAINT);

y -= 50;

Sleep(50);

}

Sleep(5000);

}

void initPillar(struct 柱子 pillar[], int i)

{

pillar[i].h = rand() % 100 + 160;//[160,259];

pillar[i].x = 288;

pillar[i].y = 0;

}

void drawPillar(struct 柱子 pillar)

{

//上面的柱子

putimage(pillar.x, 0, 52, pillar.h, &down[0], 0, 320 - pillar.h, SRCAND);

putimage(pillar.x, 0, 52, pillar.h, &down[1], 0, 320 - pillar.h, SRCPAINT);

//下面那根柱子

putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[0], 0, 0, SRCAND);

putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[1], 0, 0, SRCPAINT);

}

//小作业:

//碰上面柱子的求解

//碰下面柱子的柱子

效果图:

最后呢,笔者将剩下了这两部分源码给去掉了,目的想必大家也知道,可不要直接照着源码敲,而不自己去理解哦!你们应该学着自己去理解这个小游戏,然后呢,自己写出剩下的部分哦!希望我们能够在学习C语言C++的路上越走越远,共勉!

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部