level 5
啊,搞定了,那个自定义函数不会用数组,弄的很笨拙很麻烦,得多了一半的代码……
2010年10月15日 14点10分
1
level 5
/************五子棋程序************/
#include <stdio.h>
#define white 2
#define black 4
/*预留声明部分*/
/*棋盘部分*/
int
main(void)
{
char qipan[10][10]={{0,1,2,3,4,5,6,7,8,9},{1},{2},{3},{4},{5},{6},{7},{8},{9}}; int x,y,x1,y1;/*棋子坐标定义值*/
int num=1,zi; /*计算胜负辅助用值*/
int x2,y2,x_1,y_1; /*x2,y2计算正加值,x_1,y_1用来计算负加值*/
/********************棋盘的格式化输出程序**********************/ for (y=0;y<10;y++)
{
for(x=0;x<10;x++)
{
if (x==0||y==0) /*第一横列和第一纵列输出数字*/ {
if (qipan[x][y]!=0)
printf ("%d ",qipan[x][y]);
else
printf (" "); /*数值为零的地方不输出零,输出两个空格*/ }
else /*其他的按ASC码输出*/
{
if (qipan[x][y]!=0)
printf ("%c ",qipan[x][y]);
else
printf (" ");
}
}
printf ("\n");
}
/*以上部分应单独提出作为显示棋盘的独立函数(知识不足,待修改)*/ /********************************轮番落子部分**********************************/ loop1:printf ("请黑方落子");
scanf ("%d.%d",&x1,&y1);
if (qipan[x1][y1]==0)
{
qipan[x1][y1] =black;
for (y=0;y<10;y++)
{
for(x=0;x<10;x++)
{
if (x==0||y==0)
{
if (qipan[x][y]!=0)
printf ("%d ",qipan[x][y]);
else printf (" ");
}
else
{
if (qipan[x][y]!=0)
printf ("%c ",qipan[x][y]);
else printf (" ");
}
}
printf ("\n");
}
}
else
{
2010年10月17日 12点10分
2
level 5
printf ("此处不可落子\n");
goto loop1;
}
/**************胜负判断***************/
/*横向判断*/
for (zi=1;zi<5;zi++)
{
x2=x1+zi;
if(qipan[x1][y1]==qipan[x2][y1])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y1])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*横向判断完成*/
/*纵向判断*/
for (zi=1;zi<5;zi++)
{
y2=y1+zi;
if (qipan[x1][y1]==qipan[x1][y2])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
if (qipan[x1][y1]==qipan[x1][y_1])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*纵向判断完成*/
/*右斜向判断*/
for (zi=1;zi<5;zi++)
{
y2=y1+zi;
x2=x1+zi;
if (qipan[x1][y1]==qipan[x2][y2])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y_1])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
2010年10月17日 12点10分
3
level 5
}
else num=1;
/*右斜向判断完成*/
/*左斜向判定*/
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
x2=x1+zi;
if (qipan[x1][y1]==qipan[x2][y_1])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y2=y1+zi;;
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y2])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*左斜向判断完成*/
/***************胜负判断完成**************/
loop2:printf ("请白方落子");
scanf ("%d.%d",&x1,&y1);
if (qipan[x1][y1]==0)
{
qipan[x1][y1] =white;
for (y=0;y<10;y++)
{for(x=0;x<10;x++)
{
if (x==0||y==0)
{
if (qipan[x][y]!=0)
printf ("%d ",qipan[x][y]);else printf (" ");
}
else
{
if (qipan[x][y]!=0)
printf ("%c ",qipan[x][y]);
else printf (" ");
}
}
printf ("\n");
}
}
else
{
printf ("此处不可落子\n");
goto loop2;
}
/**************胜负判断***************/
/*横向判断*/
for (zi=1;zi<5;zi++)
{
x2=x1+zi;
if (qipan[x1][y1]==qipan[x2][y1])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y1])
{
num=num+1;
}
else
break;
}
if (num==5)
2010年10月17日 12点10分
4
level 5
{
printf("获胜\n");
}
else num=1;
/*横向判断完成*/
/*纵向判断*/
for (zi=1;zi<5;zi++)
{
y2=y1+zi;
if (qipan[x1][y1]==qipan[x1][y2])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
if (qipan[x1][y1]==qipan[x1][y_1])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*纵向判断完成*/
/*右斜向判断*/
for (zi=1;zi<5;zi++)
{
y2=y1+zi;
x2=x1+zi;
if (qipan[x1][y1]==qipan[x2][y2])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y_1])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*右斜向判断完成*/
/*左斜向判定*/
for (zi=1;zi<5;zi++)
{
y_1=y1-zi;
x2=x1+zi;
if (qipan[x1][y1]==qipan[x2][y_1])
{
num++;
}
else
break;
}
for (zi=1;zi<5;zi++)
{
y2=y1+zi;;
x_1=x1-zi;
if (qipan[x1][y1]==qipan[x_1][y2])
{
num=num+1;
}
else
break;
}
if (num==5)
{
printf("获胜\n");
}
else num=1;
/*左斜向判断完成*/
/***************胜负判断完成**************/
goto loop1;
/********************************到此结束*******************************/ getchar();
}
2010年10月17日 12点10分
5
level 5
手动分格式,有的地方有点乱,大家将就看看吧。
另外求高人帮忙修改一下:
1、无奈的用的goto,听说不是很好,怎么能改掉?
2、没有自定义函数,那个判断和显示部分显得太冗余了,那个自定义函数中用数组不会的,哪个能给讲解一下。
3、能不能在下子后清屏再显示棋盘,那个清屏的函数是什么?
2010年10月17日 12点10分
6