当前位置:   article > 正文

【C语言代码写圣诞节程序】别再画圣诞树了,看都看腻了_圣诞节c语言代码

圣诞节c语言代码

目录

嗨,这里是狐狸~~

 项目代码

 图片相关操作

结构体

资源加载

初始化 

绘制函数

数据更新 

主函数

总结

视频讲解


没有雪花即使不浪漫也可过圣诞,有了祝福即使是寒冬也感到温暖

嗨,这里是狐狸~~

今天是2021年12月20日星期一,又是美好的开始啊,距离2022年还有11天,距离2021年圣诞节还有5天,懂我什么意思了吧,圣诞节快到了,想好送啥礼物给女朋友了嘛,广大程序员uu们,嘿嘿,不知道的今天来教你们来做圣诞项目,让你们今年的圣诞节不孤单,起码还有圣诞老人陪你不是,好好看好好学!

OK,我们现在正式开始,先来看效果

 不知道大家看后感觉如何呢,好叭,有想学的感觉还挺有意思的就继续看下去,觉得博主写的垃圾,档次太低的,请出门左转不送

 项目代码

 图片相关操作

先把我们要用到的变量进行全局化处理

  1. IMAGE imgLand;
  2. IMAGE imgTree[10]; //圣诞树
  3. IMAGE imgOldman; //老人
  4. IMAGE imgSnow[2];
  5. bool Timer(clock_t ms, int id);

结构体

再来一个精灵结构体,控制速度 

  1. typedef struct
  2. {
  3. int x;
  4. int y;
  5. int w;
  6. int h;
  7. int frame; //当前帧
  8. int maxFrame; //总帧数
  9. int speed; //速度
  10. }Sprite;

资源加载

加载资源 ,找好图片的路径,选好图片的格式

  1. void loadResource()
  2. {
  3. //加载图片
  4. loadimage(&imgLand, "Resource/land.png", getwidth(), 290);
  5. for (int i = 0; i < 10; i++)
  6. {
  7. char imgFile[50] = { 0 };
  8. sprintf_s(imgFile, "Resource/mtree/0000%d.png", i);
  9. loadimage(imgTree + i, imgFile, 300, 300);
  10. }
  11. loadimage(&imgOldman, "Resource/oldman.png");
  12. loadimage(imgSnow + 0, "Resource/snow.png");
  13. loadimage(imgSnow + 1, "Resource/snow1.png", 23, 32);
  14. }

初始化 

初始化函数,将界面里的元素进行初始化,确定他们的位置

  1. void init()
  2. {
  3. loadResource();
  4. //初始化圣诞树数据
  5. sprite_init(&tree, 530, 430, 10, imgTree->getwidth(), imgTree->getheight());
  6. //初始化老人数据
  7. sprite_init(&oldMan, 700, 600, 7, 220, 154);
  8. //初始化雪花
  9. for (int i = 0; i < 50; i++)
  10. {
  11. //随机生成雪花的坐标 rand()
  12. sprite_init(snow + i, rand() % getwidth(), rand() % getheight(), 11, 23, 32);
  13. //让雪花的当前帧不一样
  14. if (snow[i].maxFrame)
  15. snow[i].frame = rand() % snow[i].maxFrame;
  16. snow[i].speed = rand() % 5 + 1;
  17. }
  18. }

绘制函数

根据初始化的函数进行进一步的绘画

  1. void draw()
  2. {
  3. //输出底下的地面
  4. drawImg(0, 500, &imgLand);
  5. //圣诞树动画
  6. drawImg(tree.x, tree.y, imgTree + tree.frame);
  7. //圣诞老人滑雪动画
  8. drawImg(oldMan.x, oldMan.y, oldMan.w, oldMan.h, &imgOldman, oldMan.frame *220, 0);
  9. //绘制雪花
  10. for (int i = 0; i < 50; i++)
  11. {
  12. drawImg(snow[i].x, snow[i].y, snow[i].w, snow[i].h, imgSnow + 0, snow[i].frame* snow[i].w, 0);
  13. }
  14. }

数据更新 

更新的函数,加了个定时器,让更新更加的稳定且丝滑

  1. void update()
  2. {
  3. sprite_runAnimation(&tree);
  4. sprite_runAnimation(&oldMan);
  5. if (Timer(100, 0))
  6. {
  7. for (int i = 0; i < 50; i++)
  8. {
  9. sprite_runAnimation(snow + i);
  10. }
  11. }
  12. if (Timer(20, 1))
  13. {
  14. for (int i = 0; i < 50; i++)
  15. {
  16. //雪花下落
  17. sprite_moveBy(snow + i, 0, snow[i].speed);
  18. //是否超出边界
  19. if (snow[i].y > getheight())
  20. {
  21. snow[i].y = snow[i].h;
  22. }
  23. }
  24. }
  25. //让圣诞老人溜达一下
  26. sprite_moveBy(&oldMan, -oldMan.speed, 0);
  27. if (oldMan.x+oldMan.w <= 0)
  28. {
  29. oldMan.x = getwidth();
  30. }
  31. }
  32. //让程序更丝滑:定时器
  33. bool Timer(clock_t ms, int id)
  34. {
  35. static clock_t beg[5] = { 0 };
  36. clock_t end = clock();
  37. if (end - beg[id] >= ms)
  38. {
  39. beg[id] = end;
  40. return true;
  41. }

主函数

 调用函数,再加上一个播放音乐函数,更有画面感,再加个双缓冲绘图,让程序运行更加丝滑。

  1. int main()
  2. {
  3. //界面,绘图,控制台
  4. //创建窗口
  5. initgraph(1024, 768, EW_SHOWCONSOLE);
  6. init();
  7. //播放音乐
  8. mciSendString("open Resource/song.mp3 alias bgm", NULL, 0, NULL);
  9. mciSendString("play bgm repeat", NULL, 0, NULL);
  10. BeginBatchDraw(); //开始双缓冲绘图
  11. while (true)
  12. {
  13. cleardevice(); //清屏
  14. draw();
  15. FlushBatchDraw(); //刷新
  16. update();
  17. }
  18. EndBatchDraw();
  19. getchar();
  20. return 0;
  21. }

 

总结

好了,这个项目你们看完觉得怎么样,这是近期刚完成的,最近也是因为圣诞节快到了,热榜上也出现了很多圣诞树的代码,层出不穷,但好像都是Python的,没有看到C语言的,也没有除圣诞树之外的项目,说实话看的有点腻了,这才写了一个这样的程序,比较简单哈,希望大家也不要介意,看后续还能不能再弄个项目出来,希望大家多多关注啦。

想要这个项目素材和源码的可以加群【765860056】领取,当然啦,你们也可以自己找些素材也是可以的,想要对程序员的未来发展有兴趣的希望和大家一起学习进步。

视频讲解

单独看源码看不懂的同学,也可以看视频讲解,有不懂得问题可以回帖提问,我看到了会尽心的回答,OK,今天就这样啦。

最后提前祝大家圣诞节快乐!!!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/325843
推荐阅读
相关标签
  

闽ICP备14008679号