导火线
2020/3/26 周四的晚上,上完公选课的我跑去打了几局排位,还遇到对面开挂。我心里那个气啊,就差2颗星了,还让不让人玩了。直接举报!
完了之后。某某人给我发了一条微信,说某某人其实比较喜欢音乐,有时会弹钢琴。
我一脸黑人问号,我的音乐基础那么菜,怎么可能会弹钢琴。。。
除了平时爱吃炸鸡,爱码些扣脚代码看黑白屏外一无所有。索性还是写一个电子钢琴给她好了。排位掉分的失落感被肾上腺素的爆发所替代,沙雕本质被激活。有了代码还要什么自行车啊?日常肝!
效果图如下:
结尾
调试完后直接发送过去,等待结果。然后就这样了。
是的,就不该心存幻想。乖乖继续码代码多练练吧。单身大义深入人心。(若是脱了我还不至于在这个时间点还没睡,想着发博文。。。)
最后
代码放在问尾,有兴趣的可以试试,有更多功能一起商讨的可以在讨论区提议或者私聊我。当然可以添加一个可以捕捉到按键然后打印在屏幕上的功能,但我没加上去,大佬们可以考虑下。
#include<cstdio>
#include<windows.h>
#include <graphics.h>
#include <stdio.h>
#include<iostream>
#include<conio.h>
int a=523,ab=554,b=578,bc=622,c=659,d=698,de=740,e=784,ef=831,f=880,fg=932,g=988;
int m=200;
void color(int a)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);//调用系统颜色,制成一个函数
}
//-------------------------------主函数----------------------------
int main()
{
int i,j,stepx=40,stepy=250;
initgraph(1200, 500); // 初始化图形窗口
SetConsoleTitle("电子琴");
circle(10, 10, 3); // 画圆,圆心(10, 10),半径
//白色矩形
settextstyle(30,0,"楷体");outtextxy(14, 10, "键盘电子钢琴");//
circle(10, 50, 3); // 画圆,圆心(10, 10),半径
settextstyle(20,0,"楷体");outtextxy(14, 50, "使用键盘主区与计算器区进行演奏,按o、p键可以调节音调");
//-------------------------------钢琴黑白键----------------------------
//白键
setcolor(15);
for(i=0;i<28;i++){
fillrectangle(stepx+i*40,stepy,stepx+40+i*40,stepy+210);//矩形的绘制
bar(stepx+i*40+2,stepy+2,stepx+i*40+40-2,stepy+210-2);}
//黑键
setfillcolor(BLACK);
for(i=0;i<27;i++){
rectangle(stepx+i*40+30,stepy,stepx+i*40+50,stepy+100);
bar(stepx+i*40+30+2,stepy+2,stepx+i*40+50-2,stepy+100-2);
}
第2版块
//-------------------------------调用电脑蜂鸣器发声----------------------------
char p;
while(i<100)
{
p = getch();
switch(p)
{
case '1':
Beep(a,250);m=0;//Beep(音调,间隔时间单位是毫秒)
break;
case '2':
Beep(b,250);m=1;
break;
case '3':
Beep(c,250);m=2;
break;
case '4':
Beep(d,250);m=3;
break;
case '5':
Beep(e,250);m=4;
break;
case '6':
Beep(f,250);m=5;
break;
case '7':
Beep(g,250);m=6;
break;
case 'a':
Beep(a,250);m=1;
break;
case 's':
Beep(b,250);m=2;
break;
case 'd':
Beep(c,250);m=3;
break;
case 'f':
Beep(d,250);m=4;
break;
case 'g':
Beep(e,250);m=5;
break;
case 'h':
Beep(f,250);m=6;
break;
case 'j':
Beep(g,250);m=7;
break;
case 'z':
Beep(2*a,250);m=8;
break;
case 'x':
Beep(2*b,250);m=9;
break;
case 'c':
Beep(2*c,250);m=10;
break;
case 'v':
Beep(2*d,250);m=11;
break;
case 'b':
Beep(2*e,250);m=12;
break;
case 'n':
Beep(2*f,250);m=13;
break;
case 'm':
Beep(2*g,250);m=14;
break;
case 'q':
Beep(4*a,250);m=15;
break;
case 'w':
Beep(4*b,250);m=16;
break;
case 'e':
Beep(4*c,250);m=17;
break;
case 'r':
Beep(4*d,250);m=18;
break;
case 't':
Beep(4*e,250);m=19;
break;
case 'y':
Beep(4*f,250);m=20;
break;
case 'u':
Beep(4*g,250);m=21;
break;
case 'o':
a*=2;ab*=2;b*=2;bc*=2;c*=2;d*=2;de*=2;e*=2;ef*=2;f*=2;fg*=2;g*=2;
break;
case 'p':
a/=2;ab/=2;b/=2;bc/=2;c/=2;d/=2;de/=2;e/=2;ef/=2;f/=2;fg/=2;g/=2;
break;
case ' ':
return 0;break;
default:
break;
}
第三板块
//--------------------------钢琴键的闪烁-------------------------------------
if(m!=200){
setfillcolor(0x0000FF);fillrectangle(stepx+m*40,stepy,stepx+40+m*40,stepy+210);//第i块钢琴键变为红色
Sleep(1000);
setfillcolor(0xFFFFFF);fillrectangle(stepx+m*40,stepy,stepx+40+m*40,stepy+210);//第i块钢琴键变为白色
setfillcolor(BLACK);
for(i=0;i<27;i++){//遍历重新打印黑键,覆盖掉表层
rectangle(stepx+i*40+30,stepy,stepx+i*40+50,stepy+100);
bar(stepx+i*40+30+2,stepy+2,stepx+i*40+50-2,stepy+100-2);
}
}
}
Sleep(100000000000); // 如果不设置延时的话,终端显示会一闪而过
//closegraph(); // 关闭图形界面
}
结束语