浅学C++(3)学习C语言(五子棋)

五子棋项目
    数据分析
        1,定义字符类型棋盘 15*15
        2,定义变量,记录棋子位置
        3,定义一个变量记录棋子角色 黑棋'@',白棋'O'
    逻辑分析
        定义需要的数据
        是否需要对数据进行初始化
        for(;;)
        {
            1,清理屏幕,显示棋盘
            2,落子(坐标和方向键各实现)
                坐标是否合法,该位置不能有棋子
                否则继续重新落子
            3,检查是否五子连珠
                是,结束游戏
            4,交换角色
        }

其中的头文件#include<getch.h>参考7月11日发布的 迷宫推箱子

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>

char Arr[15][15];//棋盘
int X=0,Y=0;//落子变量,相同个数
char Piece='@';//'@'黑棋 'O'白棋

void map(void);
int play(void);
void display(void);
int test(void);

int test(void)//判断五子连珠
{
	int cnt=0;
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X][Y-i])
			cnt++;
		else
			break;
	}
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X][Y+i])
			cnt++;
		else if(cnt>=4)
			return 1;
		else
			break;
	}		//左右方向
	cnt=0;
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X+i][Y])
			cnt++;
		else
			break;
	}
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X-i][Y])
			cnt++;
		else
			break;
	}//上下方向
	if(cnt>=4)
		return 1;
	cnt=0;
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X-i][Y-i])
			cnt++;
		else
			break;
	}
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X+i][Y+i])
			cnt++;
		else
			break;
	}//斜上
	if(cnt>=4)
		return 1;
	cnt =0;
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X+i][Y-i])
			cnt++;
		else
			break;
	}
	for(int i=1;i<=4;i++)
	{
		if(Arr[X][Y] == Arr[X-i][Y+i])
			cnt++;
		else
			break;
	}//斜下
	if(cnt>=4)
		return 1;
	else
		return 10;
}
void display(void)//显示落子后棋盘
{
	system("clear");
	for(int i=0;i<15;i++)
	{
		for(int j=0;j<15;j++)
		{
			printf("%c ",Arr[i][j]);	
		}
		printf("\n");
	}

}
int play(void)//落子
{
	printf("请%c下子",Piece);	
	for(;;)
	{
		printf("\33[%d;%dH",X+1,Y*2+1);//使用方向键控制落子
		switch(getch())
		{
			case 183:	X>0 && X--;	break;
			case 184:	X<14 && X++;break;
			case 186:	Y>0 && Y--;	break;
			case 185:	Y<14 && Y++;break;
			case 10:
				if('*' != Arr[X][Y])
					continue;
				else
					Arr[X][Y]=Piece;
					return 1;
		}
		/*scanf("%d %d",&X,&Y);  //使用坐标控制落子
		if(X>14 || X<0 || Y>14 || Y<0)
		{
			printf("坐标非法,请重新输入 ");
			continue;
		}
		else if('@' == Arr[X][Y] || 'O' == Arr[X][Y])
		{
			printf("当前坐标有棋子,请重新输入 ");
			continue;
		}
			Arr[X][Y]=Piece;
			return 1;*/
	}

}

void map(void)//初始化显示棋盘
{
	for(int i=0;i<15;i++)
	{
		for(int j=0;j<15;j++)
		{
			Arr[i][j]='*';
		}
	}

}
int main(int argc,const char* argv[])//主函数
{
	map();
	for(;;)
	{
		display();
		if(1 == play())
		{
			if(1==test())
			{
		        display();
				printf("\33[%d;%dH",17,1);
				printf("%c胜利,游戏结束",Piece);
				return 0;
			}
			else if('@'==Piece)
				Piece='O';	
			else
				Piece='@';
		}
	}
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值