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. 算法设计
主要算法函数:电脑智能下棋。
使用了函数嵌套,
优先级:
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<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<mmsystem.h>
#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; }
}
c语言写一个五子棋小游戏相关推荐
- ChatGPT实现用C语言写一个扫雷小游戏
前几天我们利用 ChatGPT实现用C语言写一个学生成绩管理系统 其过程用时不到30秒,速度惊人 今天又让ChatGPT用C语言写了一个扫雷小游戏,它的回答是:抱歉,我是AI语言模型,无法编写程序. ...
- 使用C语言写一个扫雷小游戏
前言 相信扫雷游戏小伙伴们肯定都玩过吧,学习了C语言中的数组.函数等基础内容之后就可以自己写一个简易的扫雷小游戏了,今天就我写扫雷小游戏的过程及思路写一篇博客,希望大家看完我的博客能有所收获. 软件及 ...
- C语言制作一个五子棋小游戏【附代码】
目录 五子棋游戏设计与实现 1.1 系统开发思路(需求分析) 1.2 系统功能设计 1.3 系统详细设计 1.3.1数据结构设计 1.4 系统实现 1.5 系统测试 五子棋游戏设计与实现 1.1 系统 ...
- 用Java写一个五子棋小游戏
棋盘是15*15(可以自己规定) 游戏规则: (1)对局双方各执一色棋子. (2)空棋盘开局. (3)黑先.白后,交替下子,每次只能下一子. (4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动 ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 用C语言做一个迷宫小游戏
用C语言做一个迷宫小游戏,以下是代码段 这个迷宫游戏使用了递归回溯算法来寻找通往出口的路径.迷宫中的墙用'#'表示,路径用空格表示,入口和出口分别用'S'和'E'表示,已走过的路径用'*'表示.在生成 ...
- 【笔记】用vs2017 c语言写 贪吃蛇 小游戏
目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...
- 教你前端如何用js写一个跑酷小游戏
在线体验地址:http://summer.pkec.net/ 源码地址:https://gitee.com/ihope_top/juejin-summer 前言 不知不觉夏天又到了,提到夏天你们能想到 ...
- ES6 手写一个“辨色”小游戏
1. 前言 依稀记得几年前朋友圈流行的辨色小游戏,找出颜色不同的矩形.前些天突发奇想,打算自己手写一个类似的游戏,话不多说,先上 Demo . --项目源码 本实例基于 ES6 实现,并兼容 ie9及 ...
- 用C语言来实现五子棋小游戏
目录 一.五子棋的准备工作 二.五子棋的具体实现 1.棋盘 2.人机对战 2.1 玩家下棋 2.2 电脑下棋 2.3 判断输赢 三.总结 一.五子棋的准备工作 我们在写一个项目的时候,首先第一步就是应 ...
最新文章
- JavaScript 输出
- QoS技术之流量监管和流量整形
- Nginx服务器编译添加SSL模块
- python配置opencv镜像安装
- CODEVS-2050 派对灯
- 【Elasticsearch】中文分词器比对表
- 怎么删除安卓手机里没用的文件夹,如何知道哪个有用哪些没用?
- opencv 中从cv::line和resize()函数
- antd-pro1.0使用jest对react组件进行单元测试
- Flink CDC + Hudi + Hive + Presto 构建实时数据湖最佳实践
- MSDN Visual系列:用WSSv3中的SPGridView控件来显示数据
- 怎么调用pda的打印机_win7系统如何更改打印机缓存文件夹 win7系统更改打印机缓存文件夹方法【介绍】...
- Elasticsearch7.13+kibana7.13安装
- 我们终究是一群平凡的人
- android 框架搭建养成的良好习惯(一)
- 零基础入门编程神器!苹果的免费编程应用出了Mac版了
- java ftp 被动模式_ftp 主动模式与被动模式
- 中国铁通集团有限公司
- Visual Studio 2022 免费版最新版本下载安装教程
- 量子力学揭示时间为何向前
热门文章
- ueditor 动态设置多语言
- sql server 2000(迷你sql2000) jdbc驱动
- windows10安装adb/fastboot教程
- gitlab 邮件服务器配置
- 死亡之ping(Ping of Death)
- 基于SSM的小区物业管理系统(附源码+论文)
- Extjs EditorGridPanel功能
- 硬盘分区整数计算器(如何让硬盘容量成整数)
- 天堂2芙蕾雅单机版mysql闪退_【图片】天堂2单机版-芙蕾雅。算是我这个老人对天堂2吧友的最后贡献吧!_天堂2吧_百度贴吧...
- 特洛伊木马程序_历史著名的特洛伊木马计,希腊的人造礼物