求!!!!怎么在C语言添加背景音乐

我打算在个C语言程序中加背景音乐,找了好多都不行,总会报错,希望有大佬可以教我一下怎么加背景音乐,用的是DV源代码如下(拜托了各位大佬!!!)
#include
#include
#include
#include
#include
#define N 65

int status[N][N]={{0},{0}};//记录棋盘情况,0无,1红棋/玩家,2为白棋/电脑
int flag=0;//判断输赢
int direct[2];//方向
int Value1[N][N]={{0},{0}};//计算权值
int Value2[N][N]={{0},{0}};//计算权值
int regrex,regrey,regrex1,regrey1;
int count=0;//计算棋子数量

void chess_board();//打印棋盘
void red_movexy();//红子棋移动光标
void white_movexy();//白棋移动光标
void red_chess(int x,int y);//红棋
void white_chess(int x,int y);//白棋
void man_machine();//人机对战
int judge_chess(int x,int y);//判断这个位置是否下过
int judge_winner(int x,int y,int temp);//判断输赢
void machine_attack();//电脑进攻权值
void machine_defend();//电脑防守权值
void find_position();//寻找最佳权值
void Regret();//悔棋函数
void BackGround(unsigned int ForeColor, unsigned int BackGroundColor) //颜色
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台的句柄
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改变当前光标的背景和字体颜色
}

void gotoxy(int x, int y) //光标函数
{
HANDLE handle;
COORD coord; //获取坐标轴结构体
coord.X = x;
coord.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄,值为-11
SetConsoleCursorPosition(handle, coord); //移动光标到x,y处
}
void chess_board()//打印棋盘
{
int i,j;
for(i=0;i<=30;i++)
for(j=0;j<=60;j+=4)
{
gotoxy(j,i);
printf("|");
}
for(i=0;i<=30;i+=2)
for(j=1;j<=57;j+=4)
{
gotoxy(j,i);
printf("---");
}
}

void chess_menu()//打印棋盘旁的菜单
{
int i,j;
for(i=1;i<=29;i++)
{
gotoxy(67,i);
printf("||");
}
for(i=1;i<=29;i++)
{
gotoxy(89,i);
printf("||");
}
gotoxy(69,1);
printf("--------------------");
gotoxy(69,29);
printf("--------------------");
gotoxy(75,3);
printf("模 式");
gotoxy(73,9);
printf("WASD移动光标");
gotoxy(73,10);
printf("选择下棋位置");
gotoxy(73,11);
printf("按空格键确认");
gotoxy(73,12);
printf("按Q悔棋");
gotoxy(73,20);
printf("提 示");
}

void red_movexy()//红棋移动光标
{
loop2:gotoxy(direct[0],direct[1]);
char key='y';
int temp;
while(key!=' ')
{
key=getch();
switch(key)
{
case 'W':
case 'w':
direct[1]-=2;
if(direct[1]<=1)
direct[1]=1;
break;
case 's':
case 'S':
direct[1]+=2;
if(direct[1]>=29)
direct[1]=29;
break;
case 'a':
case 'A':
direct[0]-=4;
if(direct[0]<=2)
direct[0]=2;
break;
case 'd':
case 'D':
direct[0]+=4;
if(direct[0]>=58)
direct[0]=58;
break;
case 'q':
case 'Q':
{
int message=MessageBox(NULL,"是否确定悔棋?","友情提示",MB_OKCANCEL);
if(IDCANCEL==message)
break;
if(IDOK==message)
{
Regret();
break;
}
}
}
gotoxy(direct[0],direct[1]);
}
temp=judge_chess(direct[1],direct[0]);
if(temp==1)
{
gotoxy(70,22);
BackGround(4, 0);
printf("这里已经被人下过了");
goto loop2;
}
}

void white_movexy()//白棋移动光标
{
loop1:gotoxy(direct[0],direct[1]);
char key='y';
int temp;
while(key!='0')
{
key=getch();
switch(key)
{
case 72:
direct[1]-=2;
if(direct[1]<=1)
direct[1]=1;
break;
case 80:
direct[1]+=2;
if(direct[1]>=29)
direct[1]=29;
break;
case 75:
direct[0]-=4;
if(direct[0]<=2)
direct[0]=2;
break;
case 77:
direct[0]+=4;
if(direct[0]>=58)
direct[0]=58;
break;
case 'B':
case 'b':
{
int message=MessageBox(NULL,"是否确定悔棋?","友情提示",MB_OKCANCEL);
if(IDCANCEL==message)
break;
if(IDOK==message)
{
Regret();
break;
}
}
}
gotoxy(direct[0],direct[1]);
}
temp=judge_chess(direct[1],direct[0]);
if(temp==1)
{
gotoxy(70,22);
BackGround(4, 0);
printf("这里已经被人下过了");
goto loop1;
}
}

void red_chess(int x,int y)//打印红棋
{
BackGround(4,0);
regrex=x;//记录上一落子的位置 ,方便悔棋
regrey=y;
count++;
printf("●");
status[x][y]=1;
}

void white_chess(int x,int y)//打印白棋
{
BackGround(7,0);
regrex1=x;
regrey1=y;
printf("●");
count++;
status[x][y]=2;
}

void machine_chess(int x,int y)//电脑落子
{
BackGround(7,0);
status[x][y]=2;
regrex1=x;
regrey1=y;
count++;
gotoxy(y,x);
printf("●");
}

int judge_chess(int x,int y)//判断这个地方是否有棋子
{
if(status[x][y]==0)
return 0;
else
return 1;
}

int judge_winner(int x,int y,int temp)//判断输赢
{
int i,j,n1,n2;
n1=n2=0;
for(i=x,j=y+4;j<=58;j+=4)//右
{
if(status[i][j]==temp)
n1++;
else
break;
}
for(i=x,j=y;j>=2;j-=4)//左
{
if(status[i][j]==temp)
n2++;
else
break;
}
if(n1+n2>=5)
return temp;
n1=n2=0;
for(i=x,j=y;i>=1;i-=2)//上
{
if(status[i][j]==temp)
n1++;
else
break;
}
for(i=x+2,j=y;i<=30;i+=2)//下
{
if(status[i][j]==temp)
n2++;
else
break;
}
if(n1+n2>=5)
return temp;
n1=n2=0;
for(i=x-2,j=y+4;i>=1&&j<=58;i-=2,j+=4)//右上
{
if(status[i][j]==temp)
n1++;
else
break;
}
for(i=x,j=y;i<=30&&j>=2;i+=2,j-=4)//左下
{
if(status[i][j]==temp)
n2++;
else
break;
}
if(n1+n2>=5)
return temp;
n1=n2=0;
for(i=x,j=y;i>=0&&j>=0;i-=2,j-=4)//左上
{
if(status[i][j]==temp)
n1++;
else
break;
}
for(i=x+2,j=y+4;i<=30&&j<=58;i+=2,j+=4)//右下
{
if(status[i][j]==temp)
n2++;
else
break;
}
if(n1+n2>=5)
return temp;
return 0;
}

void machine_attack()//电脑进攻权值
{
int i1,j1;
int k1,k2,k;
for(int i=1;i<=30;i+=2)
{
for(int j=2;j<=58;j+=4)
{
if(status[i][j])
Value1[i][j]=0;
if(status[i][j]==0)
{
k1=k2=0;
for(i1=i,j1=j-4;j1>=2;j1-=4)//往左数寻找电脑棋子数
{
if(status[i1][j1]==2)
k1++;
else
break;
}
for(i1=i,j1=j+4;j1<=58;j1+=4)//往右数寻找电脑棋子数
{
if(status[i1][j1]==2)
k2++;
else
break;
}
k=k1>k2? k1:k2;
k1=k2=0;
for(i1=i-2,j1=j;i1>=1;i1-=2)//往上数寻找电脑棋子数
{
if(status[i1][j1]==2)
k1++;
else
break;
}
for(i1=i+2,j1=j;i1<=30;i1+=2)//往下数寻找电脑棋子数
{
if(status[i1][j1]==2)
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1? k:k1;
k1=k2=0;
for(i1=i-2,j1=j-4;i1>=0&&j1>=0;i1-=2,j1-=4)//往左上数寻找电脑棋子数
{
if(status[i1][j1]==2)
k1++;
else
break;
}
for(i1=i+2,j1=j+4;i1<=30&&j1<=58;i1+=2,j1+=4)//往右下数寻找电脑棋子数
{
if(status[i1][j1]==2 )
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1?k:k1;
k1=k2=0;
for(i1=i+2,j1=j-4;i1<=30&&j1>=2;i1+=2,j1-=4)//往左下数寻找电脑棋子数
{
if(status[i1][j1]==2)
k1++;
else
break;
}
for(i1=i-2,j1=j+4;i1>=1&&j1<=58;i1-=2,j1+=4)//往右上数寻找电脑棋子数
{
if(status[i1][j1]==2)
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1?k:k1;
switch(k)
{
case 3:
Value1[i][j]=15;break;

case 4:
Value1[i][j]=25;break;
default:
Value1[i][j]=3+2*k;break;
}
}
}
}
}

void machine_defend()//防守权值
{
int i1, j1;
int k1,k2,k;
for(int i=1;i<=30;i+=2)
{
for(int j=2;j<=58;j+=4)
{
if(status[i][j])
Value2[i][j]=0;
if(status[i][j]==0)
{
k1=k2=0;
for(i1=i,j1=j-4;j1>=2;j1-=4)//往左数寻找玩家棋子数
{
if(status[i1][j1]==1)
k1++;
else
break;
}
for(i1=i,j1=j+4;j1<=58;j1+=4)//往右数寻找玩家棋子数
{
if(status[i1][j1]==1)
k2++;
else
break;
}
k=k1>k2? k1:k2;
k1=k2=0;
for(i1=i-2,j1=j;i1>=1;i1-=2)//往上数寻找玩家棋子数
{
if(status[i1][j1]==1)
k1++;
else
break;
}
for(i1=i+2,j1=j;i1<=30;i1+=2)//往下数寻找玩家棋子数
{
if(status[i1][j1]==1)
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1?k:k1;
k1=k2=0;
for(i1=i-2,j1=j-4;i1>=1&&j1>=2;i1-=2,j1-=4)//往左上数寻找玩家棋子数
{
if(status[i1][j1]==1)
k1++;
else
break;
}
for(i1=i+2,j1=j+4;i1<=30&&j1<=58;i1+=2,j1+=4)//往右下数寻找玩家棋子数
{
if(status[i1][j1]==1)
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1?k:k1;
k1=k2=0;
for(i1=i+2,j1=j-4;i1<=30&&j1>=2;i1+=2,j1-=4)//往左下数寻找玩家棋子数
{
if(status[i1][j1]==1)
k1++;
else
break;
}
for(i1=i-2,j1=j+4;i1>=1&&j1<=58;i1-=2,j1+=4)//往右上数寻找玩家棋子数
{
if(status[i1][j1]==1)
k2++;
else
break;
}
k1=k1>k2? k1:k2;
k=k>k1?k:k1;
switch(k)
{
case 3:
Value2[i][j]=10;break;

case 4:

Value2[i][j]=20;break;
default:
Value2[i][j]=2+k*2;
}
}
}
}
}

void find_position()//找到最有价值的位置
{
int k1=0, k2=0;
int i, j, max=0;
for( i=1;i<=30;i+=2)
for( j=2;j<=58;j+=4)
{
if(max<=Value1[i][j])
{
max=Value1[i][j];
k1=i;
k2=j;
}
}
for( i=1;i<=30;i+=2)
for( j=2;j<=58;j+=4)
{
if(max<=Value2[i][j])
{
max=Value2[i][j];
k1=i;
k2=j;
}
}
direct[1]=k1; //将找到的位置传给光标
direct[0]=k2;
}
void man_machine()//人机对战模式
{
loop6:system("cls");
char key;
int control;
gotoxy(2, 3);
printf("1.玩 家 先 手(玩家为红子)");

gotoxy(2, 5);
printf("2.电 脑 先 手(电脑为白子)");

gotoxy(2, 7);
printf("(输入相应序号选择)");
key=getch();
system("cls");
if(key=='1')
    control=1;
else if(key=='2')
{
    control=1;
    machine_chess(13,26);
}
else 
    goto loop6;
gotoxy(70,5);
printf("   人 机 对 战    ");
direct[1]=15;
direct[0]=30;
chess_board();
chess_menu();
while(flag==0)
{
    if(control==1)
    {
        gotoxy(70,22);
        BackGround(6,0);
        printf("   玩 家 执 手    "); 
        red_movexy();
        red_chess(direct[1],direct[0]);
        flag=judge_winner(direct[1],direct[0],1);
    }
    else
    {
        gotoxy(70,22);
        BackGround(6,0);
        printf("   电 脑 执 手    "); 
        machine_defend();
        machine_attack();
        find_position();
        machine_chess(direct[1],direct[0]);
        flag=judge_winner(direct[1],direct[0],2);
    }
    control=-control;
}
gotoxy(8,18);
if(flag==1)
{
    BackGround(7,0);
    MessageBox(NULL,"太厉害了,您竟然战胜了电脑!","五子棋游戏",MB_OK);
}
if(flag==2)
{
    MessageBox(NULL,"游戏结束,您输给了电脑","五子棋游戏",MB_OK);
}
if(count>=225)
{
    MessageBox(NULL,"平局","五子棋游戏",MB_OK);
}

}

void Regret()//悔棋函数
{
gotoxy(regrey,regrex);
BackGround(0,0);
printf(" ");
status[regrex][regrey]=0;
gotoxy(regrey1,regrex1);
BackGround(0,0);
printf(" ");
status[regrex1][regrey1]=0;
count-=2;
}

void welcome()//游戏菜单
{
int k;
char choose;
system("cls");
for(k=2;k<=12;k+=2)//游戏菜单
{
gotoxy(5,k);

printf("|-----------------|");
}
gotoxy(5, 3);
printf("| 五 子 棋 游 戏 |");

gotoxy(5, 5);
printf("|     菜    单    |");

gotoxy(5, 7);
printf("|  1.人 机 对 战  |");

gotoxy(5, 9);   
printf("|  2.最 高 纪 录  |");

gotoxy(5, 11);
printf("|  3.退 出 游 戏  |");

gotoxy(5, 16);
printf("温馨提示:输入菜单对应序号进行操作");

gotoxy(5, 18);
printf("祝您游戏愉快!");

gotoxy(13, 20);

}
char Updatediary()//最高纪录
{
system("cls");

gotoxy(2, 3);
printf("(暂时没有)"); 

gotoxy(2, 5);
printf("(按E键返回,按其它任意键退出)");

return getch();

}

int main()
{
system("title 五子棋");
system("mode con cols=92 lines=33");
char choose,temp;
loop:welcome();
choose=getch();
switch(choose)
{
case '1':
man_machine();
break;
case '2':
temp=Updatediary();
if(temp=='E'||temp=='e')
goto loop;
break;
case '3':
int message=MessageBox(NULL,"是否退出?","友情提示",MB_OKCANCEL);
if(IDCANCEL==message)
goto loop;
if(IDOK==message)
{
break;
}
}
}


1个回答

你这个头文件没有无法运行include 后面东西都不写吗

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐