這是簡易的五子棋程式代碼,目前隻能在終端裡運作。
思路如下:以目前棋子坐标為查找的起始點,在查找函數中,先将相連子數設定為0,橫向查找(分别向左向右查找,遇到相同的,棋子個數累加,直到遇到不同的,停止查找),如果橫向不滿足條件,再縱向查找,其次左對角線,最後右對角線。
我設x為列坐标,y為行坐标。
k記錄黑白棋。
目前該程式之運作一次,如果想多次運作,可以直接在while循環中更改相應條件。
```c
#include<stdio.h>
void Piece(char a[][16],int x,int y,int &e)//e是用來傳遞值的。
{
int c=0; //c用來記錄相連接配接的棋子個數
//橫向查找,向左走,遇到不同的,停止
for(int i=x;i>=1;i--)
{
if(a[y][i]==a[y][x])
c++;
else
break;
}
for(int i=x+1;i<16;i++)//向右走,遇到不同的,停止
{
if(a[y][i]==a[y][x])
c++;// printf("\n%c",a[y][i]);
else
break;
}
if(c==5)
e=c;
else
{
c=0;
//縱向查找,先向上走
for(int i=y;i>=0;i--)
{
if(a[i][x]==a[y][x])
c++;
else
break;
}
for(int i=y+1;i<16;i++)
{
if(a[i][x]==a[y][x])
c++;
else
break;
}
if(c==5)
e=c;
else
{
c=0;
//左對角線
int j=y;
for(int i=x;i>=1;i--)
{
if(a[j][i]==a[y][x])
c++;
else
break;
j--;
}
j=y+1;
for(int i=x+1;i<16;i++)//向右走,遇到不同的,停止
{
if(a[j][i]==a[y][x])
c++;
else
break;
j++;
}
if(c==5)
e=c;
else
{
c=0;
//右對角線
j=y ;
for(int i=x;i>=0;i--)
{
if(a[j][i]==a[y][x])
c++;
else
break;
j++;
}
j=y-1;
for(int i=x+1;i<16;i++)//向右走,遇到不同的,停止
{
if(a[j][i]==a[y][x])
c++;
else
break;
j--;
}
if(c==5) e=c;
}
}
}
}
int main()
{
int x,y,p,k=0;
char a[16][16];
printf("棋盤的坐标為(x,y),0<=x,y<=15。\n");
printf("規則:黑棋當先,先五子連成一線者勝。可橫向、縱向、左右對角線。\n") ;
printf("0為黑子,1為白子。\n");
for(int i=0;i<=15;i++)
for(int j=0;j<=15;j++)
a[i][j]='+';
while(1)
{ //k==0是黑棋,k==1是白棋
if(k==0)
printf("請黑棋手落子:\n");
else if(k==1)
printf("請白棋手落子:\n");
scanf("%d%d",&x,&y);
if(x<0||x>=16||y<0||y>16)
{
printf("坐标超出範圍,請輸入0~15之間的數!\n");continue;
}
if(a[y][x]!='+')
{
printf("這裡已經下過了!請選擇空白的地方!\n");
continue;
}
if(k==1)
{
a[y][x]='1';k=0;
}
else if(k==0)
{
a[y][x]='0';k=1;
}
Piece(a,x,y,p);
if(p==5) printf("%d\n",p);
if(k==1&&p==5)
{
printf("黑勝!\n");
for(int i=0;i<=15;i++)
{
for(int j=0;j<=15;j++)
{
printf(" %c ",a[i][j]);a[i][j]='+';
}
printf("\n");
}
p=0;
return 0;
}
else if(k==0&&p==5)
{
printf("白勝!\n");
for(int i=0;i<=15;i++)
{
for(int j=0;j<=15;j++)
{
printf(" %c ",a[i][j]);a[i][j]='+';
}
printf("\n");
}
p=0;
return 0;
}
}
return 0;
}
/*
這是一次執行個體測試:
0 4
1 5
1 4
2 4
2 5
3 4
2 3
3 5
3 3
2 6
1 3
1 7
1 6
0 6
2 2
4 3
4 4
5 5
3 1
0 5
4 0
*/