三子棋(C语言)

#include<stdio.h>
#include <windows.h>
#define h 3    //行
#define l 3    //列

int menu(int a);//菜单
void xs(char qz[h][l], int t);//显示
int sy(char qz[h][l],int b);//验证输赢
int jy(char qz[h][l], int k);//检验
void tc();//退出
void js(char qz[h][l],int b);//结束语
void game1(char qz[h][l], int t);//玩家出1
void game2(char qz[h][l],int t);//玩家出2
void game3(char qz[h][l]);//玩家出3
void GAME1(char qz[h][l], int b);//先手
void GAME2(char qz[h][l], int b);//后手
void game(char qz[h][l],int b);//游戏
void main();//主函数

int menu(int a)                           //菜单
{
	printf("***************************\n");
	printf("************三子棋*********\n");
	printf("*********1.开始游戏********\n");
	printf("*********2.退出游戏********\n");
	printf("***************************\n");
	printf("请输入序号:");
	scanf_s("%d", &a);
	for (a; a > 2 || a<1;)
	{
		printf("输入错误,请重新输入:");
		scanf_s("%d", &a);
	}
	return a;

}
void xs(char qz[h][l],int t)                       //显示
{
	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < l; j++)
		{
			printf(" %c ", qz[i][j]);
			if (j < l-1)
				printf("|");
		}printf("\n");
		if (i < h - 1)
		{
			for (int j = 0; j < l; j++)
			{
				printf("---");
				if (j < l - 1)
					printf("|");
			}printf("\n");
		}
	}
}
int sy(char qz[h][l],int b)          //检验输赢
{
	int i = 0;
	for (i; i >= 0 && i < 3; i++)
	{
		if (qz[0][i] == qz[1][i] && qz[1][i] == qz[2][i] && qz[1][i] != ' ')
		{
			printf("最终结果如下:\n");
			xs(qz,b);
			if (qz[1][i] == '*')
			{
				printf("玩家赢\n");
			}
			else
			{
				printf("电脑赢\n");
			}
			js(qz, b); b++; 
		}
		if (qz[i][1] == qz[i][0] && qz[i][1] == qz[i][2] && qz[i][1] != ' ')
		{
			printf("最终结果如下:\n");
			xs(qz,b);
			if (qz[i][1] == '*')
			{
				printf("玩家赢\n");
			}
			else
			{
				printf("电脑赢\n");
			}		 js(qz, b); b++;

		}
		if (qz[1][1] == qz[0][0] && qz[2][2] == qz[1][1] && qz[1][1] != ' ')
		{
			printf("最终结果如下:\n");
			xs(qz,b);
			if (qz[1][1] == '*')
			{
				printf("玩家赢\n");
			}
			else
				printf("电脑赢\n");
			js(qz, b); b++; 
		}

		if (qz[0][2] == qz[1][1] && qz[0][2] == qz[2][0] && qz[0][2] != ' ')
		{
			printf("最终结果如下:\n");
			xs(qz,b);
			if (qz[0][2] == '*')
			{
				printf("玩家赢\n");
			}
			else
			{
				printf("电脑赢\n");
			}		
             js(qz, b); b++; 
		}
	}
	return b;
}
int jy(char qz[h][l],int k )       //检验
{
	k = 0;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (qz[i][j] == ' ')
				k++;
		}
	}
	return k;
}
void tc() //退出
{
	system("cls");
	printf("\n\n\n                     感谢游玩         \n\n\n");
} 
void js(char qz[h][l],int b)          //结束语
{
	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < l; j++) {
			qz[i][j] = ' ';
		}
	}
	int q = 0;
	printf("1.再玩一把2.返回菜单:");
	scanf_s("%d", &q); system("cls");
	switch (q)
	{
	case 1:game(qz,b); break;
	case 2:main(); break;
	default: printf("输入错误,请重新输入:");
		game(qz,b); break;

	}
}
void game1(char qz[h][l],int t) {                   //玩家下1
	
	int a = 1, b = 1;
	printf("请输入你要下棋的坐标:");
	scanf_s("%d%d", &a, &b);
	if (a < h + 1 && a>0 && b < l + 1 && b>0)
	{
		qz[a - 1][b - 1] = '*';

	}
	else
	{
		do
		{
			printf("输入有误,请重新输入:\n");
			scanf_s("%d%d", &a, &b);

		} while (a > h + 1 || a<0 || b>l + 1 || b < 0 || qz[a - 1][b - 1] != ' ');
		qz[a - 1][b - 1] = '*';

	}
}
void game2(char qz[h][l],int t)   //玩家出2
{
	printf("请继续输入你要下棋的坐标:\n");
	int a = 1, b = 1;
		scanf_s("%d%d", &a, &b);
		if (a < h + 1 && a>0 && b< l + 1 && b>0&&qz[a-1][b-1]==' ')
		{
			qz[a-1][b-1] = '*';
		}
		else
		{
			do
			{
				printf("输入有误,请重新输入:\n");
				scanf_s("%d%d", &a, &b);
			} while (a > h + 1 || a<0 || b>l + 1 || b <0 || qz[a - 1][b - 1] != ' ');
			qz[a-1][b-1] = '*';
			
		}
	

}
void game3(char qz[h][l])            //电脑出
{
	int x = 0;
	int y = 0;

	x = rand() % h;
	y = rand() % l;
	if (qz[x][y] == ' ')
	{
		qz[x][y] = '$';
		
	}
	else
	{
		do
		{
			
			x = rand() % h;
			y = rand() % l;
		}while(qz[x][y] != ' ');
		qz[x][y] = '$'; 
		
	}
		
}
void GAME1(char qz[h][l],int b) //先手
{
	int k = 0;
	b = 1;
	system("cls");
	xs(qz,b);
	game1(qz,b); 
	do {
		game3(qz); xs(qz, b); b=sy(qz, b);
		if (b == 1)
		{
			game2(qz, b); system("cls"); xs(qz, b); b=sy(qz, b);
			if (jy(qz, k) == 0) { b--; }
		}
	} while (b == 1);
	if (b == 0)
	{
		printf("结束,平局");
		js(qz, b);
	}
}
void GAME2(char qz[h][l],int b)        //后手
{
	int k = 0;
	b = 1;
	system("cls");
	game3(qz); xs(qz, b);
	do {
	game2(qz,b); system("cls"); xs(qz,b); b=sy(qz, b);
	if(b == 1)
	{
		game3(qz); xs(qz, b);	b=sy(qz, b);
		if (jy(qz,k)==0) {
			b--;
		}
	}
	} while (b==1);
	if (b ==0)
	{
		printf("结束,平局");
			js(qz, b);
	}

	
}
void game(char qz[h][l],int b)       //游戏
{
	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < l; j++) {
			qz[i][j] = ' ';
		}
	}
	int e = 0;
	int t = 0;
	printf("你想先手还是后手:");
	printf("1.先手2.后手3.返回菜单\n");
	scanf_s("%d", &t);
	switch (t)
	{
	case 1: GAME1(qz,b); break;
	case 2:GAME2(qz,b); break;
	case 3:main(); break;
	default:  printf("输入错误,请重新输入:\n");
		game(qz,b); break; 
	}
}
void main()          //主函数
{
	int b = 0;
	int a = 0;
	char qz[h][l];
	a=menu(a);
	switch(a)
	{case 1:
		game(qz,b);
		break;
	case 2:
		tc(); break;
	}
}

代码如上,可能有些地方复杂了。希望对你有帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值