赞
踩
龙年到了,用C语言给朋友们整个活吧。
效果展示
新年祝福2.0 2024-02-08 18-49-18
写代码之前要安装easyx图形库,没有用过的小伙伴可以搜索下载一下。
那么让我们开始正文吧!
作者也是第一次写,顺序不太好,可能有的地方解释的不好,大家可以先翻到最后先理解main函数再从头看
先点击上面栏目中的项目 属性 高级 字符集 调为使用多字节字符集 确定 否则会报错
所需要的头文件
- #include<stdio.h>
- #include<easyx.h>//图形库头文件
- #include<time.h>
- #include<conio.h>
- #include<mmsystem.h>
- #include<windows.h>//开一个窗口
- #include<graphics.h>
- #pragma comment(lib,"winmm.lib")//可以添加音乐
接下来是对所需要图片的一个声明(图片有点多,但整体效果不错的)
- IMAGE fire[6];//6种颜色的烟火
- IMAGE flower[11][7];//11中不同形态的烟花,为了有绽放效果,每个烟花都有7种大小,从小到大展示
- IMAGE l[6];
- IMAGE hl[6];
- IMAGE ll[6];
- IMAGE bl[6];
- IMAGE zl[6];//这几个带l的是龙的照片,表现龙的动图
- IMAGE lt1[15];
- IMAGE lt2[15];//这两个是15张祝福图片和表情包龙图
定义鼠标点击位置,增加互动性
MOUSEMSG m;
烟火上升和烟花绽放的结构体
-
- struct Fire
- {
- int x, y, hy,i;
- unsigned t1, t2, dt;
- bool istop;
- };//烟火
-
- struct Work
- {
- int r,i;
- unsigned t1, t2,dt;
- bool isboom;
- };//烟花
烟火飞天的函数
-
- void fly(struct Fire* a)
- {
- a->x = rand() % 780;//烟火在水平方向随机产生
- a->y = 450;
- a->hy = (rand() % 150)+50;//烟火最高位置随机
- a->istop = false;
- a->t1 = GetTickCount();
- a->dt = 10;
- a->i = (rand() % 5)+1;
- while (a->istop == false)
- {
- mciSendString("play two", 0, 0, 0);
- a->t2 = GetTickCount();
- if (a->t2 - a->t1 >= a->dt)
- {
- a->y -= 5;
- cleardevice();
- outtextxy(275, 200, "新年快乐");//中间一直显示新年快乐
- }
- if (a->y <= a->hy)//当道顶端
- {
- a->istop = true;
- }
- a->t1 = a->t2;
- putimage(a->x, a->y, &fire[a->i-1]);//放置烟火图片,y在减少,营造出烟火上升的感觉
- }
- mciSendString("stop two", 0, 0, 0);//定义的烟花上升时的声音写到后面会有这个定义
- }
烟花爆炸函数
- void boom(struct Fire* a, struct Work* b)
- {
- fly(a);//引用烟花上升函数,上升到最高点就爆炸
- b->r = 0;
- b->isboom = false;
- b->t1 = GetTickCount();//获取时间
- int i=1;
- b->dt =150;
- b->i = (rand() % 11)+1;//产生随机数,选择不同烟花
- int j = 0;
- mciSendString("play three repeat", 0, 0, 0);
- while (b->isboom == false)
- {
- for (i = 1; i < 8; i++)
- {
- b->dt = 80*i;
- while (b->r != i)
- {
- b->t2 = GetTickCount();
- if (b->t2 - b->t1 >= b->dt)
- {
- cleardevice();
- outtextxy(275,200, "新年快乐");//一直显示新年快乐的字
- switch (b->i)//选择烟花种类
- {
- case 1: loadimage(&flower[0][i - 1], "flower.png", 26 * i * (j+1), (j+1)* 26 * i);//下载图片大小不同,出现绽放效果
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[0][i - 1]); break;//展示效果
- case 2:loadimage(&flower[1][i - 1], "flower1.png", 26 * i * (j+1), (j+1)* 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[1][i - 1]); break;
- case 3:loadimage(&flower[2][i - 1], "flower2.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - i * 13 * (j+1), &flower[2][i - 1]); break;
- case 4:loadimage(&flower[3][i - 1], "flower3.png", 26 * i * (j+1), (j + 1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[3][i - 1]); break;
- case 5:loadimage(&flower[4][i - 1], "flower4.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[4][i - 1]); break;
- case 6:loadimage(&flower[5][i - 1], "flower5.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[5][i - 1]); break;
- case 7:loadimage(&flower[6][i - 1], "flower6.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[6][i - 1]); break;
- case 8:loadimage(&flower[7][i - 1], "flower7.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[7][i - 1]); break;
- case 9:loadimage(&flower[8][i - 1], "flower8.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[8][i - 1]); break;
- case 10:loadimage(&flower[9][i - 1], "flower9.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[9][i - 1]); break;
- case 11:loadimage(&flower[10][i - 1], "flower10.png", 26 * i * (j+1), (j+1) * 26 * i);
- putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[10][i - 1]); break;
- }
- outtextxy(275,200, "新年快乐");//依旧显示着新年快乐
- Sleep(20);
- b->r = i;
- }
- }
- b->t2 = b->t1;
- }
- if (b->r == i - 1)
- {
- b->isboom = true;//烟花绽放完,结束
- Sleep(30);
- cleardevice();//清屏
- outtextxy(275,200, "新年快乐");
- }
- }
- }
下面是烟花结束后的祝福语
- void word(int a)
- {
- cleardevice();
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));//产生随机颜色
- settextstyle(40, 0, "华文琥珀");
- outtextxy(60, 150, "在这辞旧迎新的美好时刻");//展示文字,可以改成大家想要的其他祝福
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- outtextxy(60, 220, "我向大家致以最诚挚的新年祝福");
- settextcolor(YELLOW);
- settextstyle(25, 0, "华文彩云");
- outtextxy(500, 450, "点击此处,产生随机祝福");
- settextstyle(60, 0, "楷体");
- switch (a)//依次显示祝大家新年快乐
- {
- case 8:;
- case 7:outtextxy(500, 300, "乐");
- case 6:outtextxy(440, 300, "快");
- case 5:outtextxy(380, 300, "年");
- case 4:outtextxy(320, 300, "新");
- case 3:outtextxy(260, 300, "家");
- case 2:outtextxy(200, 300, "大");
- case 1:outtextxy(140, 300, "祝");
- }
- }
下面是随机祝福产生的函数
-
- void zhufu(int a)
- {
- settextstyle(30, 0, "华文琥珀");//字体是华文琥珀大家可以改成自己喜欢的
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));//随机颜色
- switch (a)//随机选择一条祝福
- {
- case 1:outtextxy(30, 200, "旧岁已展千重锦,新年再进百尺竿"); break;
- case 2:outtextxy(30, 200, "愿新年胜旧年,欢愉且胜意,万事尽可期"); break;
- case 3:outtextxy(30, 200, "辞别玉兔迎金龙,新年气象乐融融"); break;
- case 4:outtextxy(30, 200, "新年的钟声即将敲响,我的祝福如约而至"); break;
- case 5:outtextxy(30, 200, "愿所有鸡毛蒜皮,换作风和日丽"); break;
- case 6:outtextxy(30, 200, "新的一年,愿山河无恙,人间皆安"); break;
- case 7:outtextxy(30, 200, "烟火向星辰,所愿皆成真"); break;
- case 8:outtextxy(30, 200, "龙年好运,福寿双全"); break;
- case 9: outtextxy(30, 200, "金龙翱翔,好运连连"); break;
- case 10:outtextxy(30, 200, "龙年大运,财运亨通"); break;
- case 11:outtextxy(30, 200, "潜龙腾跃而起,便是人间春色万里"); break;
- case 12:outtextxy(30, 200, "年年景不改,岁岁人常在"); break;
- case 13:outtextxy(30, 200, "前方万丈荣光,身后温暖一方"); break;
- }
- }
产生动态龙的函数(就是6张不同姿态的龙循环播放几遍)
- void Long(IMAGE* a)
- {
- int i,j=0;
- for (i = 0; i < 6; i++)
- {
- putimage(450, 300, a+i);
- j++;
- Sleep(200);
- if (i ==5&&j<=20)
- {
- i = 0;
- }
- }
- }
图片有点多,我给它写成函数,这样就可以收起来
- void tupian()
- {
- loadimage(&fire[0], "fire.png", 20, 50);
- loadimage(&fire[1], "fire1.png", 20, 50);
- loadimage(&fire[2], "fire2.png", 20, 50);
- loadimage(&fire[3], "fire3.png", 20, 50);
- loadimage(&fire[4], "fire4.png", 20, 50);
- loadimage(&fire[5], "fire5.png", 20, 50);
- loadimage(&l[0], "l6.jpg", 300, 100);
- loadimage(&l[1], "l5.jpg", 300, 100);
- loadimage(&l[2], "l4.jpg", 300, 100);
- loadimage(&l[3], "l3.jpg", 300, 100);
- loadimage(&l[4], "l2.jpg", 300, 100);
- loadimage(&l[5], "l1.jpg", 300, 100);
- loadimage(&hl[0], "hl6.jpg", 300, 100);
- loadimage(&hl[1], "hl5.jpg", 300, 100);
- loadimage(&hl[2], "hl4.jpg", 300, 100);
- loadimage(&hl[3], "hl3.jpg", 300, 100);
- loadimage(&hl[4], "hl2.jpg", 300, 100);
- loadimage(&hl[5], "hl1.jpg", 300, 100);
- loadimage(&ll[0], "ll6.jpg", 300, 100);
- loadimage(&ll[1], "ll5.jpg", 300, 100);
- loadimage(&ll[2], "ll4.jpg", 300, 100);
- loadimage(&ll[3], "ll3.jpg", 300, 100);
- loadimage(&ll[4], "ll2.jpg", 300, 100);
- loadimage(&ll[5], "ll1.jpg", 300, 100);
- loadimage(&bl[0], "bl6.jpg", 300, 100);
- loadimage(&bl[1], "bl5.jpg", 300, 100);
- loadimage(&bl[2], "bl4.jpg", 300, 100);
- loadimage(&bl[3], "bl3.jpg", 300, 100);
- loadimage(&bl[4], "bl2.jpg", 300, 100);
- loadimage(&bl[5], "bl1.jpg", 300, 100);
- loadimage(&zl[0], "zl6.jpg", 300, 100);
- loadimage(&zl[1], "zl5.jpg", 300, 100);
- loadimage(&zl[2], "zl4.jpg", 300, 100);
- loadimage(&zl[3], "zl3.jpg", 300, 100);
- loadimage(&zl[4], "zl2.jpg", 300, 100);
- loadimage(&zl[5], "zl1.jpg", 300, 100);
- loadimage(<1[0], "lt11.jpg", 300, 600);
- loadimage(<1[1], "lt12.jpg", 300, 600);
- loadimage(<1[2], "lt13.jpg", 300, 600);
- loadimage(<1[3], "lt14.jpg", 300, 600);
- loadimage(<1[4], "lt15.jpg", 300, 600);
- loadimage(<1[5], "lt16.jpg", 300, 600);
- loadimage(<1[6], "lt17.jpg", 300, 600);
- loadimage(<1[7], "lt18.jpg", 300, 600);
- loadimage(<1[8], "lt19.jpg", 300, 600);
- loadimage(<1[9], "lt110.jpg", 300, 600);
- loadimage(<1[10], "lt111.jpg", 300, 600);
- loadimage(<1[11], "lt112.jpg", 300, 600);
- loadimage(<1[12], "lt113.jpg", 300, 600);
- loadimage(<1[13], "lt114.jpg", 300, 600);
- loadimage(<1[14], "lt115.jpg", 300, 600);
- loadimage(<2[0], "lt21.jpg", 300, 600);
- loadimage(<2[1], "lt22.jpg", 300, 600);
- loadimage(<2[2], "lt23.jpg", 300, 600);
- loadimage(<2[3], "lt24.jpg", 300, 600);
- loadimage(<2[4], "lt25.jpg", 300, 600);
- loadimage(<2[5], "lt26.jpg", 300, 600);
- loadimage(<2[6], "lt27.jpg", 300, 600);
- loadimage(<2[7], "lt28.jpg", 300, 600);
- loadimage(<2[8], "lt29.jpg", 300, 600);
- loadimage(<2[9], "lt210.jpg", 300, 600);
- loadimage(<2[10], "lt211.jpg", 300, 600);
- loadimage(<2[11], "lt212.jpg", 300, 600);
- loadimage(<2[12], "lt213.jpg", 300, 600);
- loadimage(<2[13], "lt214.jpg", 300, 600);
- loadimage(<2[14], "lt215.jpg", 300, 600);
- }
最后就是main函数啦
- int main()
- {
- initgraph(800,500);
- struct Fire red;
- struct Work work ;
- settextstyle(50, 0, "楷体");
- settextcolor(YELLOW);
- int i = 1;
- tupian();//加载图片
- while (i<=18)//这个是烟花,18是放18个烟花
- {
- mciSendString("open fly123.mp3 alias two", NULL, 0, NULL);//烟花的声音
- mciSendString("open boom123.mp3 alias three", NULL, 0, NULL);
- boom(&red,&work);
- Sleep(500);
- mciSendString("stop three", 0, 0, 0);
- mciSendString("seek two to start", 0, 0, 0);
- mciSendString("seek three to start", 0, 0, 0);
- i++;
- }
- cleardevice();//烟花部分结束
- mciSendString("open new_year.mp3 alias one", NULL, 0, NULL);//开始歌曲,文字图片祝福开始
- mciSendString("play one repeat", NULL, 0, NULL);
- i = 1;
- while (i<=8) {
- word(i);
- i++;
- Sleep(800);
- }//产生“祝大家新年快乐”
- while (1)
- {
- m = GetMouseMsg();
- if (m.uMsg == 513)//如果鼠标点击
- {
- if (m.x >= 500 && m.x <= 800 && m.y >= 450 && m.y <= 500)如果鼠标点击的地方是这个范围
- {
- cleardevice();
- int w = rand() % 13, L = rand() % 5;//产生两个随机数
- zhufu(w+1);
- switch (L)//随机出现个龙
- {
- case 0:Long(l); break;
- case 1:Long(hl); break;
- case 2:Long(zl); break;
- case 3:Long(ll); break;
- case 4:Long(bl); break;
- }
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(500, 450, "点击此处,再换一句祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 400, "龙年要发祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 450, "龙年要发龙图");
- }
- if (m.x >= 30 && m.x <= 225 && m.y >= 400 && m.y <= 430)
- {
- cleardevice();
- int t1 = rand() % 15;
- putimage(200, -60, <1[t1]);//随机出现图片
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(500, 450, "点击此处,获得随机祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 400, "龙年要发祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 450, "龙年要发龙图");
- }
- if (m.x >= 30 && m.x <= 225 && m.y >= 450 && m.y <= 480)
- {
- cleardevice();
- int t2 = rand() % 15;
- putimage(200, -60, <2[t2]);
- settextcolor(YELLOW);
- settextstyle(25, 0, "华文彩云");
- outtextxy(500, 450, "点击此处,获得随机祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 400, "龙年要发祝福");
- settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
- settextstyle(25, 0, "华文彩云");
- outtextxy(50, 450, "龙年要发龙图");
- }
- }
- }
- }
以下是所用图片,有点多,音频有三个不知道怎么添加,大家自己找一下吧,找一个烟花上升的声音命名为fly123一个烟花爆炸的声音命名为boom123一个喜庆的背景音new_year
最后,祝大家龙年快乐!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。