C语言写简易五子棋

    需要的数据:

        1、定义棋盘:二维数组 15*15 空位置 *

        2、定义棋子角色:白棋‘#’,黑棋‘$’

        3、定义一个变量记录下棋位置

    业务逻辑:(实现成一个个函数)

        是否需要初始化

        for(;;)                     //死循环

        {

            1、清理屏幕,打印棋盘

            2、落子

                坐标要合法,该位置不能有棋子,否则继续落子

            3、判断是否五子连珠

            4、交换角色

        }

具体代码如下

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//定义棋盘
char board[15][15];
//定义棋子角色
char role ='@';
//棋子落子坐标
char x=7,y=7;

void init_board(void)
{
	for(int i=0;i<15;i++)
	{
		for(int j=0;j<15;j++)
		board[i][j]	= '*';
	}
}

void show_board(void)
{
	system("clear");
	for(int i=0;i<15;i++)
	{
		for(int j=0;j<15;j++)
		printf(" %c",board[i][j]);	
	printf("\n");
	}
}


void get_key()
{
	for(;;)
	{
		printf("请输入%c棋子坐标\n",role);
		scanf("%hhd%hhd",&x,&y);
		//检查是否合法
		if(x>14||x<0||y>14||y<0)
		{
			printf("坐标不合法,请重新输入\n");
			continue;
		}
		//检查该位置是否已经有棋子
		if('*'!=board[x][y])
		{
			printf("此位置已有棋子,请重新输入\n");
			continue;
		}
		board[x][y]=role;
		return;
	}
}

bool is_win(void)
{
	int cnt=0;
	//上下
	for(int i=x-1,j=y;i>=0&&j>=0;i--)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	for(int i=x+1,j=y;i<15&&j<15;i++)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	if(cnt>=4)
		return true;
	cnt=0;
	
	//左右
	for(int i=x,j=y-1;i>=0&&j>=0;j--)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	for(int i=x,j=y+1;i<15&&j<15;j++)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	if(cnt>=4)
		return true;
	cnt=0;

	//左上右下
	for(int i=x-1,j=y-1;i>=0&&j>=0;i--,j--)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	for(int i=x+1,j=y+1;i<15&&j<15;i++,j++)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	if(cnt>=4)
		return true;
	cnt=0;
	//左下右上
	for(int i=x-1,j=y+1;i>=0&&j<15;i--,j++)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	for(int i=x+1,j=y-1;i<15&&j>=0;i++,j--)
	{
		if(board[i][j]==board[x][y])
			cnt++;
		else
			break;
	}
	if(cnt>=4)
		return true;
	cnt=0;
	return false;
}

int main(int argc,const char* argv[])
{
	//初始化棋盘
	init_board();
	for(int i=0;i<225;i++)
	{
		//清屏,打印棋盘
		show_board();
		//落子
		get_key();
		//判断是否五子连珠
		if(is_win())
		{
			show_board();
			printf("游戏结束,%c赢了\n",role);
			return 0;
		}
		//交换角色
		role=role=='@'?'$':'@';
	}
}

运行结果如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值