📄 钢琴模拟.txt
字号:
# include<stdio.h>
# include<conio.h>
# include<dos.h>
# include<ctype.h>
void w_m(),w_2(),w_m_();
int w_1(int page,char fn[]);
void m_c(),m_1(),m_2(),m_2_(int y);
void m_1_chushi(char fn[]);
void mode(int);
void move_choice(char ss1[],char ss2[],int *y,int way);
void play_(char c);
void play(int a,int b);
int f_play(char ss[]);
int search(int m,char fn[], char ss[]);
static char s[]="欢 迎 使 用 钢 琴 模 拟 器";
static char s1[]="1. 音 乐 欣 赏";
static char s2[]="2. 自 我 演 奏";
static char s3[]="1. 练 习 模 式";
static char s4[]="2. 记 录 模 式";
main()
{
w_m_();
w_m();
m_c();
mode(0);
clrscr();
return;
}
void w_m_()
{
window(1,1,80,25);
mode(0);
clrscr();
window(1,21,80,21);
textbackground(15);
clrscr();
mode(0);
window(1,23,27,25);
printf(" 钢 琴 演 奏 模 拟 程 序");
gotoxy(1,3);
printf(" 作者: NETDUST");
window(30,23,80,25);
printf(" ESC--退出 PAGEUP--前页 PAGEDOWN--后页");
gotoxy(1,2);
printf("数字键<1~0>和相应的右下方的字母键<第1,2排>分别");
gotoxy(1,3);
printf("\"A\"排为低音 \"Q\"排为中音 数字排为高音");
window(1,1,2,2);
return;
}
void m_c()
{
int y=2;
char c1,c2;
while((c1=getch())!=27)
{
if (c1==13)
{
if (y==3){m_2();y=2;continue;}
else {m_1();y=2;continue;}
}
if (c1==0)
{
c2=getch();
if (c2==27) return;
if (c2==72 && y==3) {move_choice(s2,s1,&y,1);}
if (c2==80 && y==2) {move_choice(s1,s2,&y,2);}
}
}
return;
}
void m_2()
{
int y=2;
char c1,c2;
w_2();
while(1)
{
c1=getch();
if (c1==27){w_m();return;}
if (c1==13)
{
if (y==2)m_2_(0);
else m_2_(1);
w_2();y=2;
}
if (c1==0)
{
c2=getch();
if (c2==72 && y==3) move_choice(s4,s3,&y,1);
if (c2==80 && y==2) move_choice(s3,s4,&y,2);
}
}
}
void move_choice(char ss1[],char ss2[],int *y,int way)
{
gotoxy(5,*y);
mode(0);
cprintf("%s",ss1);
if (way==1)*y=*y-1;
else *y=*y+1;
gotoxy(5,*y);
mode(1);
cprintf("%s",ss2);
return;
}
void mode(int i)
{
if (i==0){textcolor(WHITE);textbackground(BLACK);}
else {textcolor(BLACK);textbackground(LIGHTGRAY);}
return;
}
void m_2_(int y)
{
char c,f[13],ff[200],name[30];
FILE *p;
mode(0);
clrscr();
window(18,10,80,20);
gotoxy(12,1);
if (y==0) printf("练 习 模 式");
else printf("记 录 模 式");
gotoxy(1,4);
printf("在这里,您可以尽情地发挥您的音乐才华!");
if (y==1)
{
tmpnam(f);
p=fopen(f,"w+");
}
while(1)
{
c=getch();
if (c==27)
{
if (y==0)return;
fclose(p);
clrscr();window(25,10,80,20);
gotoxy(5,1);
printf("确定要保存吗 ? [y/n]");
while(1)
{
c=getch();
if (c=='y' || c=='Y')
{
clrscr();window(1,10,80,20);
while(1)
{clrscr();gotoxy(25,1);
printf("请输入您要保存的文件名 :");
scanf("%s",&ff);strcpy(name,"music\\");
strcat(name,ff);strcat(name,".mus");
if (rename(f,name)==0) {
clrscr();gotoxy(25,1);
cprintf("是否重放?");c=getch();
if(c!='y' && c!='Y')return;
f_play(ff);
return;
}
gotoxy(25,3);
cprintf("已有此文件名或目录MUSIC不存在!");
getch();}
}
if (c=='n' || c=='N'){remove(f);return;}
}
}
if(c!=0 && y==1)fputc(c,p);
play_(c);
}
}
int f_play(char ss[])
{
char c,fn[13],fd[30];
FILE *p;
tmpnam(fn);
strcpy(fd,"music\\");
strcat(fd,ss);strcat(fd,".mus");
if (rename(fd,fn)==-1) return 0;
p=fopen(fn,"r");
while(1)
{
while(!kbhit())
{
if (feof(p)) rewind(p);
c=fgetc(p);
play_(c);
delay(1000);
}
if((c=getch())==27)break;
}
fclose(p);
rename(fn,fd);
return 1;
}
void play_(char c)
{
c=tolower(c);
switch (c)
{
case 'q':play(523,12000);break;
case 'w':play(587,12000);break;
case 'e':play(659,12000);break;
case 'r':play(698,12000);break;
case 't':play(784,12000);break;
case 'y':play(880,12000);break;
case 'u':play(988,12000);break;
/*case 'i':play(554,12000);break;
case 'o':play(1047,12000);break;
case 'p':play(1175,12000);break;
*/
case 'a':play(1047,12000);break;
case 's':play(1175,12000);break;
case 'd':play(1319,12000);break;
case 'f':play(1397,12000);break;
case 'g':play(1568,12000);break;
case 'h':play(1760,12000);break;
case 'j':play(1976,12000);break;
/*case 'k':play(554,6000);break;
case 'l':play(1047,6000);break;
case '\;':play(1175,6000);break;
*/
case '1':play(262,12000);break;
case '2':play(294,12000);break;
case '3':play(330,12000);break;
case '4':play(349,12000);break;
case '5':play(392,12000);break;
case '6':play(440,12000);break;
case '7':play(494,12000);break;
/*case '8':play(554,24000);break;
case '9':play(1047,24000);break;
case '0':play(1175,24000);break;
*/
}
return;
}
void play(int a,int b)
{
sound(a);
delay(b);
nosound();
return;
}
void w_m()
{
mode(0);
clrscr();
window(25,10,80,20);
mode(0);
cprintf("%s",s);
gotoxy(5,3);
cprintf("%s",s2);
gotoxy(5,2);
mode(1);
cprintf("%s",s1);
m_c();
return;
}
void w_2()
{
mode(0);
clrscr();
window(25,10,80,20);
cprintf("%s",s);
gotoxy(5,3);
cprintf("%s",s4);
gotoxy(5,2);
mode(1);
cprintf("%s",s3);
return;
}
void m_1()
{
int z=1,y=1,m,page=0;
char fn[13],c1,c2,s1[15],s2[15];
m_1_chushi(fn);
window(25,1,80,20);
m=w_1(0,fn);
while(1)
{
if(m==0){remove(fn);w_m();return;}
c1=getch();
if (c1==27){remove(fn);w_m();return;}
if (c1==13)
{
z=search(page*20+y,fn,s1);
z=f_play(s1);
}
if (c1==0)
{
c2=getch();
if (c2==72 && y>1)
{
z=search(page*20+y,fn,s1);
z=search(page*20+y-1,fn,s2);
move_choice(s1,s2,&y,1);
}
if (c2==80 && y<m)
{
z=search(page*20+y,fn,s1);
z=search(page*20+y+1,fn,s2);
move_choice(s1,s2,&y,2);
}
if (c2==73 && page!=0)
{
m=w_1(page-1,fn);
page--;
y=1;
}
if (c2==81 && m==20)
{
if((m=w_1(page+1,fn))==0) m=w_1(page,fn);
else page++;
y=1;
}
}
}
}
void m_1_chushi(char fn[])
{
char ss1[50];
tmpnam(fn);
strcpy(ss1,"dir music\\*.mus >>");
strcat(ss1,fn);
system(ss1);
return;
}
int w_1(int page,char fn[])
{
int n,i;
char ss[15];
FILE *p;
if((p=fopen(fn,"r"))==NULL) return 0;
i=page*20+1;
mode(0);
clrscr();
if (search(i,fn,ss)==0)
{
gotoxy(5,10);
if(page==0) cprintf("没有歌曲可供选择!");
else cprintf("没有更多歌曲可供选择!");
fclose(p);
getch();
return 0;
}
mode(1);
gotoxy(5,1);
cprintf("%s",ss);
mode(0);
n=1;
while(1)
{
i++;n++;
if ((search(i,fn,ss))==0) {n--;break;}
gotoxy(5,n);
cprintf("%s",ss);
if(n==20)break;
}
fclose(p);
return n;
}
int search(int m,char fn[],char s[])
{
int n=0,i;
char fd[300];
FILE *p;
if ((p=fopen(fn,"r"))==NULL) return 0;
while(1)
{
if(feof(p))break;
if (n==(m-1)) break;
fgets(fd,300,p);
if(fd[0]==13 || fd[0]==9 || fd[0]==32 || fd[0]==10) continue;
n++;
}
if (n!=(m-1)) {fclose(p);return 0;}
while(1)
{
if (feof(p)) break;
fgets(fd,300,p);
if(fd[0]!=13 && fd[0]!=9 && fd[0]!=32 && fd[0]!=10) break;
}
if (feof(p)) {fclose(p);return 0;}
n=strlen(fd);
for (i=0;i<n;i++)
{
if (fd[i]==13 || fd[i]==9 || fd[i]==32 || fd[i]==10) break;
s[i]=fd[i];
}
s[i]='\0';
fclose(p);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -