您的位置:首页 > 编程语言

C语言+二维数组+非递归实现五子棋游戏(代码贴过来后无缩进,尽请谅解,工程完成度:100%)

2015-07-21 16:23 555 查看
规则:

1、白子为O;

2、黑子为@;

3、白子先手;

4、格子占满时为平局;

5、四个方向上有连续五个子为胜利;

6、如果选择0 3表示选的第1行与第4列;

备注:

1、本程序会持续进行代码与流程的完善;

#include <stdio.h>

#define N 16

//显示五子棋棋盘

void wzq_show(char (*GAME)
)

{

int i=0,j=0;

printf("五子棋棋盘如下:\n");

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

printf("%c ",GAME[i][j]);

}

printf("\n");

}

}

//初始化五子棋棋盘

void wzq_init(char (*GAME)
)

{

int i=0,j=0;

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

GAME[i][j]='+';

}

}

//memset(GAME,'+',N*N);

}

//游戏是否胜利的运算,一旦有人胜利则返回1

int wzq_play(int a,int b,char (*GAME)
)

{

int i=0,j=0,k=0;

//方向-上的

for(j=b-4;j<b+4;j++)

{

if(j<0 || j>N-1)

{

continue;

}

for(i=0;i<5;i++)

{

if('@'==GAME[a][j+i] ||'+'==GAME[a][j+i])

{

break;

}

if('O'==GAME[a][j+i] &&4==i)

{

printf("\n恭喜你,白家-方向上获胜!\n");

return1;

}

}

}

//方向|上的

for(i=a-4;i<a+4;i++)

{

if(i<0 || i>N-1)

{

continue;

}

for(j=0;j<5;j++)

{

if('@'==GAME[i+j][b] ||'+'==GAME[i+j][b])

{

break;

}

if('O'==GAME[i+j][b] &&4==j)

{

printf("\n恭喜你,白家|方向上获胜!\n");

return1;

}

}

}

//方向\上的

for(i=a-4,j=b-4;i<a+4
&& j<b+4;i++,j++)

{

if(i<0 || i>N-1 || j<0
|| j>N-1)

{

continue;

}

for(k=0;k<5;k++)

{

if('@'==GAME[i+k][j+k] ||'+'==GAME[i+k][j+k])

{

break;

}

if('O'==GAME[i+k][j+k] &&4==k)

{

printf("\n恭喜你,白家\方向上获胜!\n");

return1;

}

}

}

//方向/上的

for(i=a+4,j=b-4;i>a-4
&& j<b+4;i--,j++)

{

if(i<0 || i>N-1 || j<0
|| j>N-1)

{

continue;

}

for(k=0;k<5;k++)

{

if('@'==GAME[i-k][j+k] ||'+'==GAME[i-k][j+k])

{

break;

}

if('O'==GAME[i-k][j+k] &&4==k)

{

printf("\n恭喜你,白家/方向上获胜!\n");

return1;

}

}

}

return0;

}

int main()

{

char GAME

={0};

int count=0;//轮换落子计算

int m=0,n=0;//白家

int x=0,y=0;//黑家

int res=0;

int k=0;

wzq_init(GAME);

wzq_show(GAME);

while(1)

{

//当棋盘格子被下满了时

if(N*N==count)

{

printf("棋盘已经下满了,平局!\n");

return0;

}

if(0==count%2)

{

printf("请白家落子(例如0 3或1
3):");

scanf("%d%d",&m,&n);

while(m<0 || m>N-1 || n<0
|| n>N-1)

{

printf("输入的坐标超出范围,请重新输入:");

scanf("%d%d",&m,&n);

}

while('+'!=GAME[m]
)

{

printf("此处已经落过子,请重新落子:");

scanf("%d%d",&m,&n);

}

GAME[m]
='O';

res=wzq_play(m,n,GAME);

if(1==res)

{

wzq_show(GAME);

printf("程序结束\n");

return0;

}

}else

{

printf("请黑家落子(例如0 3或1
3):");

scanf("%d%d",&x,&y);

while(m<0 || m>N-1 || n<0
|| n>N-1)

{

printf("输入的坐标超出范围,请重新输入:");

scanf("%d%d",&m,&n);

}

while('+'!=GAME[x][y])

{

printf("此处已经落过子,请重新落子:");

scanf("%d%d",&x,&y);

}

GAME[x][y]='@';

res=wzq_play(x,y,GAME);

if(1==res)

{

wzq_show(GAME);

printf("程序结束\n");

return0;

}

}

count++;

wzq_show(GAME);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: