笔记|c语言写一个五子棋小游戏

部分效果图:
笔记|c语言写一个五子棋小游戏
文章图片

笔记|c语言写一个五子棋小游戏
文章图片


  1. 总体设计

笔记|c语言写一个五子棋小游戏
文章图片

【笔记|c语言写一个五子棋小游戏】这里我将叙述一个大概的设计过程。
玩家一使用的棋子是’*’ 玩家二以及电脑使用的棋子是’#’。这两个字符只是方便做相关操作。
实际显示时,我将玩家一显示为白棋子,玩家二显示为黑棋子。而不是直接把’*’和’#’显示给用户。
棋盘用的是二维数组。
一盘游戏几乎所有操作都是在这个二维数组上面实现。主要功能有:游戏背景音乐,实时棋盘的更新,棋子的移动,判断胜负,胜负播报音乐,电脑实现智能化落子。
本程序分为两大部分,一部分是人机对战,另一部分是人人对战。人人对战就不说了。人机对战让电脑实现了一定的智能化,主要算法是Ai()函数。
以下是各个功能函数的简要概述。
int isWin(); //判定胜负
void Ai6(); //电脑随机放子
void Ai5(); //阻止玩家冲三
void Ai4(); //电脑实现冲四
void Ai3(); //阻止玩家冲四
void Ai2(); //让电脑实现冲五
void Ai1(); //阻止玩家冲五
void load(); //初始界面
void printS(); //打印棋盘
void newgame(); //游戏主体
void gamer(); //双人对战
void movedown(int *x,int *y,int ret); //向上
void moveup(int *x,int *y,int ret); //向下
void moveright(int *x,int *y,int ret); //向右
void moveleft(int *x,int *y,int ret); //向左
void move(); //人机模式移动
void move1(); //双人对战 玩家一
void move2(); //双人对战 玩家二
void end(int flag); //结束界面
2. 算法设计
笔记|c语言写一个五子棋小游戏
文章图片

主要算法函数:电脑智能下棋。
使用了函数嵌套,
优先级:
Ai1()->Ai2()->Ai3()->Ai4()->Ai5()->Ai6()
阻止玩家冲五->让电脑实现冲五->阻止玩家冲四->电脑实现冲四->阻止玩家冲三->随机放子
函数说明:
阻止玩家冲五:通过遍历棋盘(用两个for循环),得到玩家的棋子位置,判断它的棋子里面是否有连四的情况出现,如果有就进行防守。其它防守函数同理。电脑实现冲五则是通过遍历棋盘上自己的棋子,如果有连四的情况,那么就补上最后一个棋子完成胜局。其它进攻函数同理。
怎样实现优先级?通过函数嵌套,把Ai1()(阻止玩家冲五)作为第一个返回函数,如果能找到相应的位置(成功防守)那么就返回该位置,否则继续进行下一个判断也就是Ai2()(让自己实现冲五),以此类推。

void Ai6(); //电脑随机放子
void Ai5(); //阻止玩家冲三
void Ai4(); //电脑实现冲四
void Ai3(); //阻止玩家冲四
void Ai2(); //让电脑实现冲五
void Ai1(); //阻止玩家冲五
void Ai1()//阻止玩家冲五

以下是Ai1()的示例:
void Ai1(){int i,j; /*遍历棋盘,找出玩家的棋子是否有连四的情况,四种连四情况都得查找,即横/纵/左上斜/右下斜*/for(i=1; i<20; i++)for(j=1; j<20; j++){if(game[i][j]=='*'&&game[i][j+1]=='*'&&game[i][j+2]=='*'&&game[i][j+3]=='*')//横向{if(game[i][j-1]=='.'){game[i][j-1]='#'; return; //如果找到该位置那么把棋子放好之后直接return}if(game[i][j+4]=='.'){game[i][j+4]='#'; return; }}if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]==game[i+3][j]&&game[i+3][j]=='*')//纵向{if(game[i-1][j]=='.'){game[i-1][j]='#'; return; }if(game[i+4][j]=='.'){game[i+4][j]='#'; return; }}if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]=='*') //斜向1{if(game[i-1][j-1]=='.'){game[i-1][j-1]='#'; return; }if(game[i+4][j+4]=='.'){game[i+4][j+4]='#'; return; } }if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]==game[i-3][j+3]&&game[i-3][j+3]=='*') //斜向2{if(game[i+1][j-1]=='.'){game[i+1][j-1]='#'; return; }if(game[i-4][j+4]=='.'){game[i-4][j+4]='#'; return; }}}Ai2(); //如果没找到那么进入下一个函数return; }


个人总结 首先对我的编程思维的提升是巨大的,在此之前我从未尝试过去敲一个几百行的代码,甚至在写这个程序的前期(未修改完善之前)一度达到了上千行。写这种工程量稍大的程序项目,令我不敢太马虎应对,因为如果出现bug,那修复Bug 的工作量也是比较恐怖的。所以我在写的时候打了不少的草稿。一开始这个程序的下棋方式是输入坐标进行棋子的定位。但是自己试玩的时候发现这样的方式极不方便,密密麻麻的棋盘线条看着眼睛也很不舒服,下棋的时候很容易出现落下的棋子位置跟自己的意愿不一样的情况。用户体验感极差。于是我就想能不能改成用方向键去移动棋子。这样移动比较直观,也不会出现下错位置的尴尬情况。但是通过方向键去移动棋子,画面就应该实时刷新。不然移动的跨度大了,用户界面上会出现很多个棋盘。所以我又去网上搜索刷新界面的方法。又查到了一个清屏的命令。“system(“cls”)”.这样,我就能够实现棋子的移动并且实时更新画面了。我写完这个程序之后又去学习了一点图形编程,安装了相关的软件。并且又写出了一个小小的图形游戏。总的来说,就是这种自主查阅能力提升了,编程思维也提升了。深刻体会到程序中把若干功能分成各个功能函数的重要性。既美观,排查bug也方便。
不足之处:应该把这个棋盘写成图形界面的,这样会更好看。
以下是完整代码:
#include #include #include #include #include #pragma comment(lib,"Winmm.lib") int FLAG=1; char game[21][21]; //棋盘矩阵 int isWin(); //判定胜负 void Ai6(); void Ai5(); //电脑随机放子 void Ai4(); //电脑实现冲四 void Ai3(); //阻止玩家冲四 void Ai2(); //让电脑实现冲五 void Ai1(); //阻止玩家冲五 void load(); //初始界面 void printS(); //打印棋盘 void newgame(); //游戏主体 void gamer(); //双人对战 void movedown(int *x,int *y,int ret); //向上 void moveup(int *x,int *y,int ret); //向下 void moveright(int *x,int *y,int ret); //向右 void moveleft(int *x,int *y,int ret); //向左 void move(); //人机模式移动 void move1(); //双人对战 玩家一 void move2(); //双人对战 玩家二 void end(int flag); //结束界面 int main() { while(FLAG) { load(); //游戏入口 } return 0; } void movedown(int *x,int *y,int ret) { /*这里将棋盘返回之前状态*/ if(game[*x][*y]!='*'&&game[*x][*y]!='#') game[*x][*y]='.'; *x+=1; if(*x>=19||*x<=0)return; if(game[*x][*y]!='.'){ *x+=1; return; } system("cls"); if(game[*x][*y]!='*'&&game[*x][*y]!='#') { if(ret==1)game[*x][*y]='O'; if(ret==2)game[*x][*y]='Q'; } printS(); printf("你的位置:【%d】 【%d】\n",*x,*y); return; } void moveup(int *x,int *y,int ret) { /*这里将棋盘返回之前状态*/ if(game[*x][*y]!='*'&&game[*x][*y]!='#') game[*x][*y]='.'; *x-=1; if(*x>=19||*x<=0)return; if(game[*x][*y]!='.'){ *x-=1; return; } system("cls"); if(game[*x][*y]!='*'&&game[*x][*y]!='#') { if(ret==1)game[*x][*y]='O'; if(ret==2)game[*x][*y]='Q'; } printS(); printf("你的位置:【%d】 【%d】\n",*x,*y); return; } void moveright(int *x,int *y,int ret) { /*这里将棋盘返回之前状态*/ if(game[*x][*y]!='*'&&game[*x][*y]!='#') game[*x][*y]='.'; *y+=1; if(*x>=19||*x<=0)return; if(game[*x][*y]!='.'){ *y+=1; return; } system("cls"); if(game[*x][*y]!='*'&&game[*x][*y]!='#') { if(ret==1)game[*x][*y]='O'; if(ret==2)game[*x][*y]='Q'; } printS(); printf("你的位置:【%d】 【%d】\n",*x,*y); return; } void moveleft(int *x,int *y,int ret) { /*这里将棋盘返回之前状态*/ if(game[*x][*y]!='*'&&game[*x][*y]!='#') game[*x][*y]='.'; *y-=1; if(*x>=19||*x<=0)return; if(game[*x][*y]!='.'){ *y-=1; return; } system("cls"); if(game[*x][*y]!='*'&&game[*x][*y]!='#') { if(ret==1)game[*x][*y]='O'; if(ret==2)game[*x][*y]='Q'; } printS(); printf("你的位置:【%d】 【%d】\n",*x,*y); return; } void move() { int x=1,y=1; char ret; int shift=1; while(shift) { ret=getch(); switch(ret) { case 72: moveup(&x,&y,1); break; case 80: movedown(&x,&y,1); break; case 75: moveleft(&x,&y,1); break; case 77: moveright(&x,&y,1); break; case 's':movedown(&x,&y,1); break; case 'S':movedown(&x,&y,1); break; case 'W':moveup(&x,&y,1); break; case 'w':moveup(&x,&y,1); break; case 'a':moveleft(&x,&y,1); break; case 'A':moveleft(&x,&y,1); break; case 'd':moveright(&x,&y,1); break; case 'D':moveright(&x,&y,1); break; case ' ': game[x][y]='*'; system("cls"); printS(); shift=0; break; } } return; } void move1() { int x=1,y=1; char ret; int shift=1; while(shift) { ret=getch(); switch(ret) { case 's':movedown(&x,&y,1); break; case 'S':movedown(&x,&y,1); break; case 'W':moveup(&x,&y,1); break; case 'w':moveup(&x,&y,1); break; case 'a':moveleft(&x,&y,1); break; case 'A':moveleft(&x,&y,1); break; case 'd':moveright(&x,&y,1); break; case 'D':moveright(&x,&y,1); break; case ' ': game[x][y]='*'; system("cls"); printS(); shift=0; break; } } return; } void move2() { int x=1,y=1; char ret; int shift=1; while(shift) { ret=getch(); switch(ret) { case 72: moveup(&x,&y,2); break; case 80: movedown(&x,&y,2); break; case 75: moveleft(&x,&y,2); break; case 77: moveright(&x,&y,2); break; case ' ': game[x][y]='#'; system("cls"); printS(); shift=0; break; } } return; } int isWin()//判定胜负 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]==game[i][j+1]&&game[i][j+1]==game[i][j+2]&&game[i][j+2]==game[i][j+3]&&game[i][j+3]==game[i][j+4]&&game[i][j+4]=='*')return 1; //横向赢 if(game[j][i]==game[j+1][i]&&game[j+1][i]==game[j+2][i]&&game[j+2][i]==game[j+3][i]&&game[j+3][i]==game[j+4][i]&&game[j+4][i]=='*') return 1; //纵向赢 if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]==game[i+4][j+4]&&game[i+4][j+4]=='*') return 1; //从左上到右下 if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]==game[i-3][j+3]&&game[i-3][j+3]==game[i-4][j+4]&&game[i-4][j+4]=='*') return 1; //从右上到左下 /*相同的条件,判定电脑胜利*/ if(game[i][j]==game[i][j+1]&&game[i][j+1]==game[i][j+2]&&game[i][j+2]==game[i][j+3]&&game[i][j+3]==game[i][j+4]&&game[i][j+4]=='#')return 2; //横向 if(game[j][i]==game[j+1][i]&&game[j+1][i]==game[j+2][i]&&game[j+2][i]==game[j+3][i]&&game[j+3][i]==game[j+4][i]&&game[j+4][i]=='#') return 2; //纵向 if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]==game[i+4][j+4]&&game[i+4][j+4]=='#')return 2; //斜向1 if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]==game[i-3][j+3]&&game[i-3][j+3]==game[i-4][j+4]&&game[i-4][j+4]=='#') return 2; //斜向2 } for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='.') return -1; //比赛继续 } return 0; //平局即是棋盘上没有.了 } void Ai6()//电脑随机放子 { int i,j; srand(time(NULL)*10); for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='#') { if(game[i+1][j]=='.'){ game[i+1][j]='#'; return; } if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i][j+1]=='.') { game[i][j+1]='#'; return; } if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } } } while(game[i][j]!='.') { i=rand()%19+1; j=rand()%19+1; } game[i][j]='#'; return; } void Ai5()//阻止玩家冲三 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='*'&&game[i][j+1]=='*')//横向 { if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } if(game[i][j+2]=='.'){ game[i][j+2]='#'; return; } } if(game[i][j]=='*'&&game[i+1][j]=='*') //纵向 { if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i+2][j]=='.'){ game[i+2][j]='#'; return; } } if(game[i][j]=='*'&&game[i+1][j+1]=='*')//斜向1 { if(game[i-1][j-1]=='.'){ game[i-1][j-1]='#'; return; } if(game[i+2][j+2]=='.'){ game[i+2][j+2]='#'; return; } } if(game[i][j]=='*'&&game[i-1][j+1]=='*')//斜向2 { if(game[i+1][j-1]=='.'){ game[i+1][j-1]='#'; return; } if(game[i-2][j+2]=='.'){ game[i-2][j+2]='#'; return; } } } Ai6(); return; } void Ai4()//电脑实现冲四 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='#'&&game[i][j+1]=='#'&&game[i][j+2]=='#')//横向 { if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } if(game[i][j+3]=='.'){ game[i][j+3]='#'; return; } } if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]=='#') //纵向 { if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i+3][j]=='.'){ game[i+3][j]='#'; return; } } if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]=='#') //斜向1 { if(game[i-1][j-1]=='.'){ game[i-1][j-1]='#'; return; } if(game[i+3][j+3]=='.'){ game[i+3][j+3]='#'; return; } } if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]=='#')//斜向2 { if(game[i+1][j-1]=='.'){ game[i+1][j-1]='#'; return; } if(game[i-3][j+3]=='.'){ game[i-3][j+3]='#'; return; } } } Ai5(); return; } void Ai3()//阻止玩家冲四 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='*'&&game[i][j+1]=='*'&&game[i][j+2]=='*')//横向 { if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } if(game[i][j+3]=='.'){ game[i][j+3]='#'; return; } } if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]=='*') //纵向 { if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i+3][j]=='.'){ game[i+3][j]='#'; return; } } if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]=='*')//斜向1 { if(game[i-1][j-1]=='.'){ game[i-1][j-1]='#'; return; } if(game[i+3][j+3]=='.'){ game[i+3][j+3]='#'; return; } } if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]=='*')//斜向2 { if(game[i+1][j-1]=='.'){ game[i+1][j-1]='#'; return; } if(game[i-3][j+3]=='.'){ game[i-3][j+3]='#'; return; } } } Ai4(); return; } void Ai2()//让电脑实现冲五 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='#'&&game[i][j+1]=='#'&&game[i][j+2]=='#'&&game[i][j+3]=='#')//横向 { if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } if(game[i][j+4]=='.'){ game[i][j+4]='#'; return; } } if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]==game[i+3][j]&&game[i+3][j]=='#') //纵向 { if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i+4][j]=='.'){ game[i+4][j]='#'; return; } } if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]=='#') //斜向1 { if(game[i-1][j-1]=='.'){ game[i-1][j-1]='#'; return; } if(game[i+4][j+4]=='.'){ game[i+4][j+4]='#'; return; } } if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]==game[i-3][j+3]&&game[i-3][j+3]=='#')//斜向2 { if(game[i+1][j-1]=='.'){ game[i+1][j-1]='#'; return; } if(game[i-4][j+4]=='.'){ game[i-4][j+4]='#'; return; } } } Ai3(); return; } void Ai1()//阻止玩家冲五 { int i,j; for(i=1; i<20; i++) for(j=1; j<20; j++) { if(game[i][j]=='*'&&game[i][j+1]=='*'&&game[i][j+2]=='*'&&game[i][j+3]=='*')//横向 { if(game[i][j-1]=='.'){ game[i][j-1]='#'; return; } if(game[i][j+4]=='.'){ game[i][j+4]='#'; return; } } if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]==game[i+3][j]&&game[i+3][j]=='*')//纵向 { if(game[i-1][j]=='.'){ game[i-1][j]='#'; return; } if(game[i+4][j]=='.'){ game[i+4][j]='#'; return; } } if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]=='*') //斜向1 { if(game[i-1][j-1]=='.'){ game[i-1][j-1]='#'; return; } if(game[i+4][j+4]=='.'){ game[i+4][j+4]='#'; return; } } if(game[i][j]==game[i-1][j+1]&&game[i-1][j+1]==game[i-2][j+2]&&game[i-2][j+2]==game[i-3][j+3]&&game[i-3][j+3]=='*') //斜向2 { if(game[i+1][j-1]=='.'){ game[i+1][j-1]='#'; return; } if(game[i-4][j+4]=='.'){ game[i-4][j+4]='#'; return; } } } Ai2(); return; } void load()//初始界面 { int i,j; char ret; for(i=0; i<17; i++){ for(j=0; j<34; j++) { if(i!=8)printf("**"); else { printf("\n<<<欢迎进入五子棋游戏>>>\n"); printf("<<<输入【1】开始人机游戏>>>\n"); printf("<<<输入【2】开始双人对战模式>>>\n<<<输入【ESC】退出游戏>>>\n"); printf("<<<祝你玩得开心>>>\n"); system("color 70"); break; } } printf("\n"); } ret=getch(); puts("\a"); switch(ret) { case '1':system("cls"); newgame(); break; case '2':system("cls"); gamer(); break; case 27:FLAG=0; return; break; } return; } void printS()//打印棋盘 { int i,j; for(i=0; i<21; i++) for(j=0; j<21; j++) { if(i==0&&j==0)printf(" 0"); if((i==0&&j!=0&&j!=20)||(i==20&&j!=0&&j!=20))printf(" %2d",j); if(j==0&&i!=0)printf("%2d",i); if(i!=0&&j!=0) { if(game[i][j]=='.'||game[i][j]=='O'||game[i][j]=='Q') printf("_%c|",game[i][j]); else { if(game[i][j]=='*') printf("_Ο"); else if(game[i][j]=='#') printf("_●"); } } if(j==19&&i!=20&&i!=0)printf("_%2d",i); if(j==20)printf("\n"); } } void newgame()//游戏主体 { PlaySound(TEXT("song.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐 int i,j,x=1,y=1,flag,cnt=0; char tip,ret; srand(time(NULL)); for(i=0; i<20; i++) for(j=0; j<20; j++) game[i][j]='.'; printf("开始游戏之前,请选择你想先手还是想后手\n输入【1】你先手,输入【2】你后手,【ESC】返回"); tip=getch(); puts("\a"); if(tip==27){ load(); return; } if(tip=='1')//玩家先手 { while(1){ system("cls"); printS(); printf("<<<轮到你下棋:你是【白棋】>>>\n移动方式:\n【W】上 【A】左 【S】下 【D】右\n【↑】【↓】【←】【→】\n【按空格落子】\n"); move(); flag=isWin(); if(flag==1||flag==0||flag==2)end(flag); else Ai1(); //还未分出胜负 电脑落子:智能化 system("cls"); printS(); flag=isWin(); //判定胜负,否则一直循环下棋 if(flag==1||flag==0||flag==2){ end(flag); break; } } } else if(tip=='2')//玩家后手 { while(1){ Ai1(); system("cls"); system("cls"); printS(); flag=isWin(); if(flag==1||flag==0||flag==2)end(flag); printf("<<<轮到你下棋:你是【白棋】>>>\n移动方式:\n【W】上 【A】左 【S】下 【D】右\n【↑】【↓】【←】【→】\n【按空格落子】\n"); move(); flag=isWin(); if(flag==1||flag==0||flag==2){ end(flag); break; } } } } void gamer() { PlaySound(TEXT("song2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐 int i,j,x=1,y=1,flag,cnt=0; char tip,ret; for(i=0; i<20; i++) for(j=0; j<20; j++) game[i][j]='.'; printf("始游戏之前,请选择:\n输入【1】玩家一先手\n输入【2】玩家二先手\n【ESC】返回"); tip=getch(); puts("\a"); if(tip==27){ load(); return; } if(tip=='1')//玩家一先手 { while(1){ system("cls"); printS(); printf("轮到【玩家一】下棋:你是白棋\n玩家一【W】上 【A】左 【S】下 【D】右\n玩家二【↑】【↓】【←】【→】移动棋子\n按【空格】落子"); move1(); flag=isWin(); if(flag==1||flag==0||flag==2)end(flag); else { printf("轮到【玩家二】下棋:你是黑旗\n玩家一【W】上 【A】左 【S】下 【D】右\n玩家二【↑】【↓】【←】【→】移动棋子\n按【空格】落子"); move2(); } system("cls"); printS(); flag=isWin(); //判定胜负,否则一直循环下棋 if(flag==1||flag==0||flag==2){ end(flag); break; ; } } } else if(tip=='2')//玩家二先手 { while(1){ printf("轮到【玩家二】下棋:你是黑旗\n玩家一【W】上 【A】左 【S】下 【D】右\n玩家二【↑】【↓】【←】【→】移动棋子\n按【空格】落子"); move2(); system("cls"); printS(); flag=isWin(); if(flag==1||flag==0||flag==2)end(flag); printf("轮到【玩家一】下棋:你是白棋\n玩家一【W】上 【A】左 【S】下 【D】右\n玩家二【↑】【↓】【←】【→】移动棋子\n按【空格】落子"); move1(); flag=isWin(); if(flag==1||flag==0||flag==2){ end(flag); break; } } } return; } void end(int flag) { switch(flag) { case 1: system("cls"); printf("************WINNER**************\n"); printf("************你赢啦*************\n"); printf("*************666*****************\n"); PlaySound(TEXT("win.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐 system("pause"); load(); break; case 2: system("cls"); printf("************LOSER**************\n"); printf("************你输啦*************\n"); printf("*************菜鸡*****************\n"); PlaySound(TEXT("lose.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐 system("pause"); load(); break; case 0: system("cls"); printf("************PEACE**************\n"); printf("************平局*************\n"); printf("******************************\n"); PlaySound(TEXT("peace.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐 system("pause"); load(); break; } }


    推荐阅读