天天看點

簡易五子棋

這是簡易的五子棋程式代碼,目前隻能在終端裡運作。

思路如下:以目前棋子坐标為查找的起始點,在查找函數中,先将相連子數設定為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
 
 */

           

繼續閱讀