⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 钢琴模拟.txt

📁 一个钢琴模拟软件
💻 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 + -