Linux下开发的五子棋对战

#include 
#include 
#include 

// 定义棋盘
char board[15][15];

// 定义角色 @ #
char role = '@'; 

// 定义棋子的坐标
char key_x,key_y;

// 初始化棋盘
void init_board(void);

// 显示棋盘
void show_board(void);

// 落子
void get_key(void);

// 判断是否有五子边珠
bool check_key(void);

// 切换角色
void change_role(void);

int main()
{
     
	// 初始化棋盘
	init_board();

	for(;;)
	{
     
		// 显示棋盘
		show_board();

		// 落子
		get_key();

		// 判断是否有五子连珠
		if(check_key())
		{
     
			show_board();
			printf("恭喜%c胜利,游戏结束!\n",role);
			return 0;
		}

		// 切换角色
		change_role();
	}
}

// 初始化棋盘
void init_board(void)
{
     
	for(int x=0; x<15; x++)
	{
     
		for(int y=0; y<15; y++)
		{
     
			board[x][y] = '*';
		}
	}
}

// 显示棋盘
void show_board(void)
{
     
	system("clear");//cls
	for(int x=0; x<15; x++)
	{
     
		for(int y=0; y<15; y++)
		{
     
			printf(" %c",board[x][y]);
		}
		printf("\n");
	}
}

// 落子
void get_key(void)
{
     
	printf("请%c输入棋子的坐标(x,y):",role);
	scanf("%hhd%hhd",&key_x,&key_y);
	// 判断棋子的坐标是否合法
	board[key_x][key_y] = role;
}

// 判断是否有五子边珠
bool check_key(void)
{
     
	int count = 0;
	// 横向左
	for(int y=key_y-1; y>=0; y--)
	{
     
		if(board[key_x][key_y] == board[key_x][y])
			count++;
		else
			break;
	}
	// 横向右
	for(int y=key_y+1; y<15; y++)
	{
     
		if(board[key_x][key_y] == board[key_x][y])
			count++;
		else
			break;
	}

	if(count >= 4) return true;

	count = 0;
	// 竖向上
	for(int x=key_x-1; x>=0; x--)
	{
     
		if(board[key_x][key_y] == board[x][key_y])
			count++;
		else
			break;
	}
	// 竖向下
	for(int x=key_x+1; x<15; x++)
	{
     
		if(board[key_x][key_y] == board[x][key_y])
			count++;
		else
			break;
	}
	
	if(count >= 4) return true;
	

	count = 0;
	// 左向上
	for(int x=key_x-1,y=key_y-1; x>=0 && y>=0; x--,y--)
	{
     
		if(board[key_x][key_y] == board[x][y])
			count++;
		else
			break;
	}
	// 左向下
	for(int x=key_x-1,y=key_y+1; x>=0 && y<15; x--,y++)
	{
     
		if(board[key_x][key_y] == board[x][y])
			count++;
		else
			break;
	}
	if(count >= 4) return true;

	count = 0;
	// 右向上
	for(int x=key_x+1,y=key_y-1; x<15&&y>=0; x++,y--)
	{
     
		if(board[key_x][key_y] == board[x][y])
			count++;
		else
			break;
	}
	// 右向下
	for(int x=key_x+1,y=key_y+1; x<15 && y<15; x++,y++)
	{
     
		if(board[key_x][key_y] == board[x][y])
			count++;
		else
			break;
	}
	if(count >= 4) return true;

	return false;
}
// 切换角色
void change_role(void)
{
     
	if('@' == role)
	{
     
		role = '#';
	}
	else
	{
     
		role = '@';
	}
}

你可能感兴趣的:(c语言,linux)