目录
创新互联建站是一家集成都做网站、网站设计、网站页面设计、网站优化SEO优化为一体的专业网站建设公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。序
嗨,这里是狐狸~~
项目代码
图片相关操作
结构体
资源加载
初始化
绘制函数
数据更新
主函数
总结
视频讲解
没有雪花即使不浪漫也可过圣诞,有了祝福即使是寒冬也感到温暖
嗨,这里是狐狸~~今天是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,今天就这样啦。
最后提前祝大家圣诞节快乐!!!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款