c语言实现小游戏之三子棋和五子棋

三子棋和五子棋C的实现,都是一样的,都要分为下面几个部分分别来实现。下面主要介绍三子棋的实现。

1. 棋盘的初始化
2. 棋盘显示
3. 玩家输入
4. 判定是否有三子情况
5. 电脑自动输入
6. 判定是否有三子情况
 
 

1.棋盘初始化:

void InitialArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	for (; i < row; i++)
	{
    
    
		int j = 0;
		for (; j < col; j++)
		{
    
    
			Arr[i][j] = ' ';
		}
	}
}

将最开始的棋盘的字符,全设为' '
 
 

2.棋盘显示:

void ShowArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	printf("-----------\n");
	printf("   1| 2| 3|\n");
	printf("-----------\n");
	for (; i < row; i++)
	{
    
    
		printf("%d| %c| %c| %c|\n", i+1, Arr[i][0], Arr[i][1], Arr[i][2]);
		printf("-----------\n");
	}
}

在这里插入图片描述
这里就3*3的棋盘,不用很复杂,简单显示即可。
 
 

3.玩家输入:

int PlayerArr(char Arr[][COL], int row, int col)
{
    
    
	printf("Please input your row and col:>");
	int i = 0;
	int j = 0;
	scanf("%d %d", &i, &j);
	if (i >= 1 && i <= 3 && j >= 1 && j <= 3)
	{
    
    
		if (Arr[i-1][j-1] != ' ')
		{
    
    
			return 2;  //该位置已经有点了,不能再输入
		}
		else
		{
    
    
			Arr[i - 1][j - 1] = BLACK;
			return 1;  //输入正确
		}
	}
	return -1;  //坐标输入错误
}

玩家输入的显示为:‘X’
在这里插入图片描述
在这里玩家输入方式,我选用的从键盘输入坐标,如果输入错误(范围不对),或者坐标已经有点了,就提示错误,并让玩家重新输入。
 
 

4.判定是否有三子情况:

int JudgeArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	for (;i<row;i++)//每行三子,且不为空
	{
    
    
		if (Arr[i][0]!=' '&& Arr[i][0] == Arr[i][1] && Arr[i][1] == Arr[i][2])
		{
    
    
			return Arr[i][0];
		}
	}
	for (i=0; i < row; i++)//每列三子,且不为空
	{
    
    
		if (Arr[0][i] != ' '&&Arr[0][i] == Arr[1][i] && Arr[1][i] == Arr[2][i])
		{
    
    
			return Arr[0][i];
		}
	}
	if (Arr[0][0] != ' '&&Arr[0][0] == Arr[1][1] && Arr[1][1] == Arr[2][2])
	{
    
    
		return Arr[0][0];
	}//主对角线,且不为空
	if (Arr[0][2] != ' '&&Arr[0][2] == Arr[1][1] && Arr[1][1] == Arr[2][0])
	{
    
    
		return Arr[0][2];
	}//副对角线,且不为空
	for (i = 0; i < row; i++)
	{
    
    
		int j = 0;
		for (; j < col; j++)
		{
    
    
			if (Arr[i][j] == ' ')
			{
    
    
				return 'E'; //Empty,棋盘还有空,继续下棋
			}
		}
	}
	return 'D';//Draw,棋盘满了,未有输赢,平局
}

判定,是在玩家和电脑输入之后,均会进行判定。输赢有8种情况:每行三子,每列三子,主副对角线,且都不为空
另外两种情况:

  1. 棋盘还有空,继续下棋
  2. 棋盘满了,未有输赢,平局
     
     

5.电脑自动输入:

void ComputerArr(char Arr[][COL], int row, int col)
{
    
    
	while (1)
	{
    
    
		int i = rand() % row;
		int j = rand() % col;
		if (Arr[i][j] == ' ')
		{
    
    
			Arr[i][j] = WHITE;
			break;
		}
	}
	Sleep(500);
	printf("Computer done!\n");

}

在这里用了,srand和rand函数,生成随机数。当生成的行和列,此时对应的棋盘为空时,就落入棋子,电脑的棋子为‘O’。在这里设定了一点延时。
在这里插入图片描述
 
 

6.判定是否有三子

这里和上面4的步骤一样。

 
 

游戏的程序:

void Game()
{
    
    
	printf("\n游戏开始!\n");
	char Arr[ROW][COL];
	InitialArr(Arr, ROW, COL);
	char ret = 'E'; //Empty,棋盘最开始全为空,返回值可为D,WHITE和BLACK
	int ProRet = 0;
	while (1)
	{
    
    
		ShowArr(Arr, ROW, COL);
		again: //输入不对的情况,重新输入
	    ProRet=PlayerArr(Arr, ROW, COL);
		if (2 == ProRet)
		{
    
    
			printf("该位置已经有点了,请重新输入\n");
			goto again;
		}
		else if (-1 == ProRet)
		{
    
    
			printf("坐标输入有误,请重新输入\n");
			goto again;
		}
		else
		{
    
    
			printf("Player done!\n");
			Sleep(500);
		}
	    ret=JudgeArr(Arr, ROW, COL);
		if (ret != 'E')//不等于空,棋盘满了,不执行了
		{
    
    
			break;
		}
		ComputerArr(Arr, ROW, COL);
		ret = JudgeArr(Arr, ROW, COL);
		if (ret != 'E')//不等于空,棋盘满了,不执行了
		{
    
    
			break;
		}
	}
	ShowArr(Arr, ROW, COL);
	switch (ret)//进行判定,谁输谁赢,平局
	{
    
    
	case BLACK:
		printf("\n恭喜你,你赢了!\n");
		break;
	case WHITE:
		printf("\n很遗憾,你输了!\n");
		break;
	case 'D':
		printf("\n平局,再接再厉!\n");
		break;
	default:
		break;
	}
	printf("\n游戏结束!\n");
}

在这里插入图片描述
五子棋的样图,和三子棋的实现方法一样。

我把三子棋和五子棋的程序都放在了我的Github上面,有需要的小伙伴请自取:三子棋五子棋

猜你喜欢

转载自blog.csdn.net/w903414/article/details/105622734
今日推荐