五子棋人人对战。。。。求大神改进优化算法

xuqingxiang1990 2013-07-30 08:25:22
代码:
#include<stdio.h>

void print_chess(int a[][10])
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;

printf(" ");
for(i=0;i<10;i++)
printf("%2d",i);
putchar(10);
printf(" ");
for(i=0;i<10;i++)
printf(" _");
putchar(10);

for(i=0;i<10;i++)
{
printf("%2d|",i);
for(j=0;j<10;j++)
{
printf("%2d",a[i][j]);
}
putchar(10);
}
}


int foo(int x,int y,int z,int a[][10])
{
int i,j;
a[x][y]=z;
printf(" ");
for(i=0;i<10;i++)
printf("%2d",i);
putchar(10);

printf(" ");
for(i=0;i<10;i++)
printf(" _");
putchar(10);

for(i=0;i<10;i++)
{
printf("%2d|",i);
for(j=0;j<10;j++)
{
printf("%2d",a[i][j]);
}
putchar(10);
}

}

int my_scanf(int p,int *a,int *b,int c[][10])
{
while(1)
{
printf("player%d\n",p);
scanf("%d%d",a,b);
if(*a>10||*b>10||c[*a][*b]!=0)
{
printf("%d %d is not permitted! pleare reininput\n",*a,*b);
continue;
}
else
break;
}
}

int decide(int a[][10], int *pa, int *pb, int person)//判断;
{
int i, j, cont = 0;
for(i=*pa; i<10; i++) {
if(a[i][*pb]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(i=*pa; i>=0; i--) {
if(a[i][*pb]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(j=*pb; j>=0; j--) {
if(a[*pa][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(j=*pb; j<10; j++) {
if(a[*pa][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}


cont=0;
for(j=*pb, i=*pa; i<10&&j<10; i++, j++) {
if(a[i][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(j=*pb, i=*pa; i>=0&&j>=0; i--, j--) {
if(a[i][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(j=*pb, i=*pa; i>=0&&j<10; i--, j++) {
if(a[i][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
cont=0;
for(j=*pb, i=*pa; i<10&&j>=0; i++, j--) {
if(a[i][j]==person)
cont++;
else
break;
if(cont==5)
return cont;
}
return 0;

}



int main()
{
int a,b,c[10][10];
int count1,count2;
printf("start game\n");
print_chess(c);
while(1)
{
my_scanf(1,&a,&b,c);
foo(a,b,1,c);
count1=decide(c,&a,&b,1);
if(count1==5)
{
printf("you are clever");
break;
}

my_scanf(2,&a,&b,c);
foo(a,b,2,c);
count2=decide(c,&a,&b,2);
if(count2==5)
{
printf("you are clever");
break;
}
}
putchar(10);
return 0;
}
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpcads 2013-07-31
  • 打赏
  • 举报
回复
带禁手吗? 字数补丁
xuqingxiang1990 2013-07-31
  • 打赏
  • 举报
回复
新手 忘带注释了 从新发下 主要是判断玩家输赢优化下 #include<stdio.h> void print_chess(int a[][10]) //打印棋盘 初始化 { int i,j; for(i=0;i<10;i++) for(j=0;j<10;j++) a[i][j]=0; printf(" "); for(i=0;i<10;i++) printf("%2d",i); putchar(10); printf(" "); for(i=0;i<10;i++) printf(" _"); putchar(10); for(i=0;i<10;i++) { printf("%2d|",i); for(j=0;j<10;j++) { printf("%2d",a[i][j]); } putchar(10); } } int foo(int x,int y,int z,int a[][10]) //玩家1和玩家2下棋(更新棋盘) { int i,j; a[x][y]=z; printf(" "); for(i=0;i<10;i++) printf("%2d",i); putchar(10); printf(" "); for(i=0;i<10;i++) printf(" _"); putchar(10); for(i=0;i<10;i++) { printf("%2d|",i); for(j=0;j<10;j++) { printf("%2d",a[i][j]); } putchar(10); } } int my_scanf(int p,int *a,int *b,int c[][10]) //判断是否溢出棋盘和重复棋子 { while(1) { printf("player%d\n",p); scanf("%d%d",a,b); if(*a>10||*b>10||c[*a][*b]!=0) { printf("%d %d is not permitted! pleare reininput\n",*a,*b); continue; } else break; } } int decide(int a[][10], int *pa, int *pb, int person)//判断玩家赢棋; { int i, j, cont = 0; for(i=*pa; i<10; i++) { //横行 if(a[i][*pb]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(i=*pa; i>=0; i--) { if(a[i][*pb]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb; j>=0; j--) { //竖行 if(a[*pa][j]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb; j<10; j++) { if(a[*pa][j]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb, i=*pa; i<10&&j<10; i++, j++) { if(a[i][j]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb, i=*pa; i>=0&&j>=0; i--, j--) { if(a[i][j]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb, i=*pa; i>=0&&j<10; i--, j++) { if(a[i][j]==person) cont++; else break; if(cont==5) return cont; } cont=0; for(j=*pb, i=*pa; i<10&&j>=0; i++, j--) { if(a[i][j]==person) cont++; else break; if(cont==5) return cont; } return 0; } int main() { int a,b,c[10][10]; int count1,count2; printf("start game\n"); print_chess(c); //初始化棋盘 while(1) { my_scanf(1,&a,&b,c); //玩家一下棋(横竖坐标代表棋子) foo(a,b,1,c); count1=decide(c,&a,&b,1); //判断是否赢棋 if(count1==5) { printf("you are clever"); break; } my_scanf(2,&a,&b,c); //玩家二下棋 foo(a,b,2,c); count2=decide(c,&a,&b,2); //判断是否赢棋 if(count2==5) { printf("you are clever"); break; } } putchar(10); return 0; }
BinGo_2014 2013-07-31
  • 打赏
  • 举报
回复
飘过 我更新手 不知道怎么优化 但是觉得很有意思
天台的故事 2013-07-30
  • 打赏
  • 举报
回复
亲,你想怎么优化?
一根烂笔头 2013-07-30
  • 打赏
  • 举报
回复
亲,你想怎么优化?
max_min_ 2013-07-30
  • 打赏
  • 举报
回复

优化代码,你也得把你每个函数的功能加以文字说明吧!
以及你自己写完感觉那里需要优化的可能性比较也指名下
这样大家也好对号入座了!
亲

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧