C/C++编程笔记:飞翔的小鸟(Flappy Bird)——C语言版本

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 < 3; 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 < 3; i++)

    {

    pillar[i].x -= 10;

    if (pillar[i].x < (-52 - 150))

    {

    initPillar(pillar, i);

    }

    }

    for (int i = 0; i < 3; 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 <= 0 || 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++的路上越走越远,共勉!

自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

你可能感兴趣的:(C/C++编程笔记:飞翔的小鸟(Flappy Bird)——C语言版本)