音乐相册(程序员表白必备,或者生日礼物)(小白学习向)

啊,抱歉,本人是单身狗,呜呜呜
废话少说,我来展示我的音乐相册的开发历程(也是为了更好的让你们学习)
首先我先想好我要实现的功能
1.音乐播放
2.在某个位置显示字符串
3.字符串组合成心形
4.一个个字符串出现
5.滚动
6.贴图
7.图片切换
大概就是这么个顺序
首先是音乐播放

#include<Windows.h>
#include<mmsystem.h>//一定要加Windows头文件
#pragma comment(lib,"winmm.lib")
int main(){
	mciSendString("open 1.mp3", NULL, NULL, NULL);//加载音乐
	mciSendString("play 1.mp3", NULL, NULL, NULL);//播放
}

其中的音乐文件1.MP3 我是跟源码放在一起,这里相当于相对路径,如果在其他文件夹内,那么我们需要指出路径,本人建议是放到相同文件夹
第二是在某位置显示字符串
我用的是EasyX插件更好用,更容易理解
那么就是创建一定大小的窗口,在想要的坐标上展示字符串就行
以下实现:

#include<graphics.h>
#include<stdio.h>
int main() {
	initgraph(800, 800);
	settextcolor(PINK);//设置字体颜色
	outtextxy(400, 400, "goudan,真是菜");
}

运行以后看到中心生成的“goudan,真是菜”的红色文字
第三我要实现的功能是字符串组成心形
上面我已经知道了怎么展示字符串,利用的就是所需要的坐标
既然是多个字符组成的心形,必定需要多个坐标
那么何不必设计个结构体表达我们的坐标

struct point
{
	int x;
	int y;
};

那么接下来就是得到心形的坐标了
我们可以利用画图工具和心形图片来得到所需的坐标
在这里插入图片描述
在这里插入图片描述
通过这样的方法,鼠标移动,然后得到像素位置就成了,然后以下是我得到的坐标

point arr[NUM] = {
		{ 395,268 },
		{ 406,222 },
		{ 416,193 },
		{ 441,162 },
		{ 468,133 },
		{ 500,117 },
		{ 537,105 },
		{ 577,107 },
		{ 617,120 },
		{ 649,146 },
		{ 666,173 },
		{ 680,211 },
		{ 683,247 },
		{ 680,293 },
		{ 675,338 },
		{ 660,385 },
		{ 640,440 },
		{ 616,484 },
		{ 588,529 },
		{ 557,573 },
		{ 530,610 },
		{ 493,645 },
		{ 460,675 },
		{ 422,696 },
		{ 381,676 },
		{ 350,654 },
		{ 320,626 },
		{ 292,606 },
		{ 257,570 },
		{ 230,540 },
		{ 200,500 },
		{ 180,470 },
		{ 160,430 },
		{ 140,390 },
		{ 126,342 },
		{ 117,293 },
		{ 120,250 },
		{ 133,203 },
		{ 160,170 },
		{ 200,140 },
		{ 240,130 },
		{ 280,135 },
		{ 312,146 },
		{ 340,170 },
		{ 360,195 },
		{ 375,230 }
};

然后坐标有了,我就可以实现字符串组成心形的功能了:

int main() {
	initgraph(800, 800);
	for (int i = 0; i < NUM; i++) {
		settextcolor(RED);
		outtextxy(arr[i].x, arr[i].y, "yyds");
		Sleep(100);
}

接下来是一个个字符串出现
这个是很简单的一个功能,Sleep函数就成(Windows头的函数)
但是我想要一个花样的,我想要显示不同的字符串成为心形
那么我们想到字符数组
以下是我找的歌词并实现了这个功能

char buff[NUM][50] = {
		"一封信",
		"两年未都",
		"没动笔",
		"三个字",
		"过了",
		"几个四季",
		"你是有",
		"多想逃避",
		"来不及",
		"问问你",
		"我已经",
		"错过",
		"相爱",
		"的日期",
		"那天你",
		"消失在",
		"人海里",
		"你的背影",
		"沉默的",
		"让人恐惧",
		"你说的",
		"那些问题",
		"我回答得",
		"很坚定",
		"偏偏",
		"那个时候",
		"我最想你",
		"我不曾",
		"爱过你",
		"我自己",
		"骗自己",
		"已经给你",
		"写了信",
		"又被我",
		"丢进海里",
		"我不曾",
		"爱过你",
		"我自己",
		"骗自己",
		"明明觉得",
		"自己",
		"很冷静",
		"却还",
		"掉入",
		"我自己",
		"的陷阱"
};
int main(){
	initgraph(800, 800);
	for (int i = 0; i < NUM; i++) {
		settextcolor(RED);
		outtextxy(arr[i].x, arr[i].y, buff[i]);
		Sleep(100);
	}
}

我想要更骚一点的,不同字符串不同颜色
添加随机函数头和time头就可以

#include<time.h>
#include<conio.h>
int main(){
	initgraph(800, 800);
	srand(time(NULL));
	for (int i = 0; i < NUM; i++) {
		settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
		outtextxy(arr[i].x, arr[i].y, buff[i]);
		Sleep(100);
	}
}

接下来是字符串滚动
如何让字体爱的魔力转圈圈呢?
很简单更换字符串就行,看我代码实现理解:

while (1) {
		for (int i = 0; i < NUM; i++) {
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(arr[i].x, arr[i].y, buff[(i+n)%NUM]);
		}
		Sleep(500);
		n++;
	}
}

但是呢这里有个显著的问题就是,发现有的字没有跟着滚动(没有一起带走,留下了影分身!)
这是因为没有清屏:

while (1) {
		for (int i = 0; i < NUM; i++) {
			cleardevice();
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(arr[i].x, arr[i].y, buff[(i+n)%NUM]);
		}
		Sleep(500);
		n++;
	}
}

接下来是音乐相册的最重要部分了:贴图

IMAGE img;//图片类变量,声明
loadimage(&img1, "1.jpg", 200, 200, true);//加载1.jpg图片
putimage(300,300,&img1);//在300,300的位置上加载图片

但是我们音乐相册肯定不只是一张图片啊
那么先把这些图片都放到一个文件夹里,我这里放在了名为image的文件夹里,然后放在根目录下方便查找和写入
接下来有提到一个问题就是,我不想一个个声明,加载,图片太多了!!!
看我的操作:

	IMAGE img[8];//图片变量声明成数组
	char temp[256];
	for (int i = 0;i<8;i++){
		memset(temp, 0, sizeof(char) * 256);
		sprintf_s(temp, "image\\%d.jpg", i+1 );//写成字符串一遍加载的使用
		loadimage(&img[i], temp, 200, 200, true);
	}

那么最后一步:图片切换
很简单就是putimage的参数变一变就行了循环一下,所以我添加到字符串滚动的后面就可以了:

while (1) {
		cleardevice();
		for (int i = 0; i < NUM; i++) {
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(arr[i].x, arr[i].y, buff[(i+n)%NUM]);
		}
		putimage(300, 300, &img[n%8]);
		Sleep(500);
		n++;
	}

那么咱的功能实现都想好了,咱来组装一下:
1.创建窗口
2.一个个显示字符串并组成心形
3.播放音乐
4.字符串滚动,图片展示并开始切换
5.延时这样好看
那么整体代码就出来了

#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<graphics.h>
#include<Windows.h>
#include<mmsystem.h>//一定要加Windows头文件
#pragma comment(lib,"winmm.lib")
const int NUM = 46;
struct point
{
	int x;
	int y;
};
point arr[NUM] = {
		{ 395,268 },
		{ 406,222 },
		{ 416,193 },
		{ 441,162 },
		{ 468,133 },
		{ 500,117 },
		{ 537,105 },
		{ 577,107 },
		{ 617,120 },
		{ 649,146 },
		{ 666,173 },
		{ 680,211 },
		{ 683,247 },
		{ 680,293 },
		{ 675,338 },
		{ 660,385 },
		{ 640,440 },
		{ 616,484 },
		{ 588,529 },
		{ 557,573 },
		{ 530,610 },
		{ 493,645 },
		{ 460,675 },
		{ 422,696 },
		{ 381,676 },
		{ 350,654 },
		{ 320,626 },
		{ 292,606 },
		{ 257,570 },
		{ 230,540 },
		{ 200,500 },
		{ 180,470 },
		{ 160,430 },
		{ 140,390 },
		{ 126,342 },
		{ 117,293 },
		{ 120,250 },
		{ 133,203 },
		{ 160,170 },
		{ 200,140 },
		{ 240,130 },
		{ 280,135 },
		{ 312,146 },
		{ 340,170 },
		{ 360,195 },
		{ 375,230 }
};
char buff[NUM][50] = {
		"一封信",
		"两年未都",
		"没动笔",
		"三个字",
		"过了",
		"几个四季",
		"你是有",
		"多想逃避",
		"来不及",
		"问问你",
		"我已经",
		"错过",
		"相爱",
		"的日期",
		"那天你",
		"消失在",
		"人海里",
		"你的背影",
		"沉默的",
		"让人恐惧",
		"你说的",
		"那些问题",
		"我回答得",
		"很坚定",
		"偏偏",
		"那个时候",
		"我最想你",
		"我不曾",
		"爱过你",
		"我自己",
		"骗自己",
		"已经给你",
		"写了信",
		"又被我",
		"丢进海里",
		"我不曾",
		"爱过你",
		"我自己",
		"骗自己",
		"明明觉得",
		"自己",
		"很冷静",
		"却还",
		"掉入",
		"我自己",
		"的陷阱"
};
int main() {
	initgraph(800, 800);
	srand(time(NULL));
	IMAGE img[8];
	char temp[256];
	for (int i = 0;i<8;i++){
		memset(temp, 0, sizeof(char) * 256);
		sprintf_s(temp, "image\\%d.jpg", i+1 );
		loadimage(&img[i], temp, 200, 200, true);
	}
	for (int i = 0; i < NUM; i++) {
		settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
		outtextxy(arr[i].x, arr[i].y, buff[i]);
		Sleep(100);
	}
	//putimage(300,300,&img[0]);
	mciSendString("open 1.mp3", NULL, NULL, NULL);
	mciSendString("play 1.mp3", NULL, NULL, NULL);
	Sleep(3000);
	int n = 0;
	while (1) {
		cleardevice();
		for (int i = 0; i < NUM; i++) {
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(arr[i].x, arr[i].y, buff[(i+n)%NUM]);
		}
		putimage(300, 300, &img[n%8]);
		Sleep(500);
		n++;
	}
}

这就是我的音乐相册,哈哈哈,我可以去给女朋友了!!!诶,好像,没有女朋友,呜呜呜呜

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值