忙活了两天,终于把五子棋做完了
c语言吧
全部回复
仅看楼主
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
1