赞
踩
目录
没有雪花即使不浪漫也可过圣诞,有了祝福即使是寒冬也感到温暖
今天是2021年12月20日星期一,又是美好的开始啊,距离2022年还有11天,距离2021年圣诞节还有5天,懂我什么意思了吧,圣诞节快到了,想好送啥礼物给女朋友了嘛,广大程序员uu们,嘿嘿,不知道的今天来教你们来做圣诞项目,让你们今年的圣诞节不孤单,起码还有圣诞老人陪你不是,好好看好好学!
OK,我们现在正式开始,先来看效果
不知道大家看后感觉如何呢,好叭,有想学的感觉还挺有意思的就继续看下去,觉得博主写的垃圾,档次太低的,请出门左转不送
先把我们要用到的变量进行全局化处理
- IMAGE imgLand;
- IMAGE imgTree[10]; //圣诞树
- IMAGE imgOldman; //老人
- IMAGE imgSnow[2];
- bool Timer(clock_t ms, int id);
再来一个精灵结构体,控制速度
- typedef struct
- {
- int x;
- int y;
- int w;
- int h;
- int frame; //当前帧
- int maxFrame; //总帧数
- int speed; //速度
- }Sprite;
加载资源 ,找好图片的路径,选好图片的格式
- void loadResource()
- {
- //加载图片
- loadimage(&imgLand, "Resource/land.png", getwidth(), 290);
-
- for (int i = 0; i < 10; i++)
- {
- char imgFile[50] = { 0 };
- sprintf_s(imgFile, "Resource/mtree/0000%d.png", i);
- loadimage(imgTree + i, imgFile, 300, 300);
- }
-
- loadimage(&imgOldman, "Resource/oldman.png");
-
- loadimage(imgSnow + 0, "Resource/snow.png");
- loadimage(imgSnow + 1, "Resource/snow1.png", 23, 32);
- }

初始化函数,将界面里的元素进行初始化,确定他们的位置
- void init()
- {
- loadResource();
- //初始化圣诞树数据
- sprite_init(&tree, 530, 430, 10, imgTree->getwidth(), imgTree->getheight());
- //初始化老人数据
- sprite_init(&oldMan, 700, 600, 7, 220, 154);
- //初始化雪花
- for (int i = 0; i < 50; i++)
- {
- //随机生成雪花的坐标 rand()
- sprite_init(snow + i, rand() % getwidth(), rand() % getheight(), 11, 23, 32);
- //让雪花的当前帧不一样
- if (snow[i].maxFrame)
- snow[i].frame = rand() % snow[i].maxFrame;
- snow[i].speed = rand() % 5 + 1;
- }
- }

根据初始化的函数进行进一步的绘画
- void draw()
- {
- //输出底下的地面
- drawImg(0, 500, &imgLand);
- //圣诞树动画
- drawImg(tree.x, tree.y, imgTree + tree.frame);
- //圣诞老人滑雪动画
- drawImg(oldMan.x, oldMan.y, oldMan.w, oldMan.h, &imgOldman, oldMan.frame *220, 0);
- //绘制雪花
- for (int i = 0; i < 50; i++)
- {
- drawImg(snow[i].x, snow[i].y, snow[i].w, snow[i].h, imgSnow + 0, snow[i].frame* snow[i].w, 0);
- }
-
- }
更新的函数,加了个定时器,让更新更加的稳定且丝滑
- void update()
- {
- sprite_runAnimation(&tree);
- sprite_runAnimation(&oldMan);
- if (Timer(100, 0))
- {
- for (int i = 0; i < 50; i++)
- {
- sprite_runAnimation(snow + i);
- }
- }
- if (Timer(20, 1))
- {
- for (int i = 0; i < 50; i++)
- {
- //雪花下落
- sprite_moveBy(snow + i, 0, snow[i].speed);
- //是否超出边界
- if (snow[i].y > getheight())
- {
- snow[i].y = snow[i].h;
- }
- }
- }
- //让圣诞老人溜达一下
- sprite_moveBy(&oldMan, -oldMan.speed, 0);
- if (oldMan.x+oldMan.w <= 0)
- {
- oldMan.x = getwidth();
- }
-
-
- }
- //让程序更丝滑:定时器
- bool Timer(clock_t ms, int id)
- {
- static clock_t beg[5] = { 0 };
- clock_t end = clock();
- if (end - beg[id] >= ms)
- {
- beg[id] = end;
- return true;
- }

调用函数,再加上一个播放音乐函数,更有画面感,再加个双缓冲绘图,让程序运行更加丝滑。
- int main()
- {
- //界面,绘图,控制台
- //创建窗口
- initgraph(1024, 768, EW_SHOWCONSOLE);
- init();
-
- //播放音乐
- mciSendString("open Resource/song.mp3 alias bgm", NULL, 0, NULL);
- mciSendString("play bgm repeat", NULL, 0, NULL);
-
- BeginBatchDraw(); //开始双缓冲绘图
- while (true)
- {
- cleardevice(); //清屏
- draw();
- FlushBatchDraw(); //刷新
- update();
- }
- EndBatchDraw();
-
- getchar();
- return 0;
- }

好了,这个项目你们看完觉得怎么样,这是近期刚完成的,最近也是因为圣诞节快到了,热榜上也出现了很多圣诞树的代码,层出不穷,但好像都是Python的,没有看到C语言的,也没有除圣诞树之外的项目,说实话看的有点腻了,这才写了一个这样的程序,比较简单哈,希望大家也不要介意,看后续还能不能再弄个项目出来,希望大家多多关注啦。
想要这个项目素材和源码的可以加群【765860056】领取,当然啦,你们也可以自己找些素材也是可以的,想要对程序员的未来发展有兴趣的希望和大家一起学习进步。
单独看源码看不懂的同学,也可以看视频讲解,有不懂得问题可以回帖提问,我看到了会尽心的回答,OK,今天就这样啦。
最后提前祝大家圣诞节快乐!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。