0
点赞
收藏
分享

微信扫一扫

Linux中,配置systemctl操作Nginx

花明 03-14 16:30 阅读 2

目录

一、环境配置

二、功能模块

        1.打印菜单

2.初始化并打印棋盘

3、行棋 

        3.1玩家行棋

        3.2电脑行棋

4、判断是否和棋 

5.判赢

三、代码实现

        1、test.c文件

        2、game.c文件

        3、game.h文件


一、环境配置

二、功能模块

1.打印菜单

void menu()
{
	
	printf("********************************\n");
	printf("*****        1.play        *****\n");
	printf("*****        0.exit        *****\n");
	printf("********************************\n");
}

  运行结果: 

 玩家选择(1/0)决定是否进入游戏。

 2.初始化并打印棋盘

InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
			
		}
		
	}
}
/* 通过创建一个char类型的二维数组对其进行初始化 */
char board[ ][ ] = { 0 };       
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j;
	for (i = 0; i < row; i++)
	{
		j = 0; 
		for ( j; j < col; j++) //打印   |   |   
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}
		}
		
		printf("\n");
		j = 0;
		for ( j; j < col; j++)//打印---|---|---
		{
			if (i < row - 1)
			{
				printf("---");
				if (j < col - 1)
				{
					printf("|");
				}
			}
		}
		printf("\n");
	}
}

 运行结果:

#define ROW 3
#define COL 3

3、行棋 

3.1玩家行棋

void PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("玩家走:>\n");
	while (1)
	{
		printf("请输入下棋的坐标:>");
		scanf("%d %d", &x, &y);
		//判断坐标的合法性
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			//下棋
			//首先判断坐标是否被占用
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';//玩家使用*下棋
				
				break;
			}
			else
			{
				printf("坐标被占用,请重新输入\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入!");
		}
		
	}
}

3.2电脑行棋

void ComputerMove(char board[ROW][COL], int row, int col)
{
	printf("电脑走:>");
	while (1)
	{
		//生成随机坐标
		int x = rand() % row;
		int y = rand() % col;
		
		//下棋
		//判断坐标是否被占用
		if (board[x][y] == ' ')
		{
			printf("%d %d\n", x + 1, y + 1);//输出电脑下棋的坐标
			board[x][y] = '#';//电脑使用#下棋

			break;
		}
			
	}
}

4、判断是否和棋 

int IfFull(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;//棋盘没满
			}
		}
	}
	return 1;//棋盘满了
}

5.判赢

char IfWin(char board[ROW][COL], int row, int col)
{
	//判断行
	for (int i = 0; i < row; i++)
	{
		for (int j = 2; j < col; j++)
		{
			if (board[i][j - 2] == board[i][j - 1] && board[i][j - 1] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断列
	for (int j = 0; j < col; j++)
	{
		for (int i = 2; i < row; i++)
		{
			if (board[i - 2][j] == board[i - 1][j] && board[i - 1][j] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断右交叉
	for (int i = 2; i < row; i++)
	{
		for (int j = 2; j < col; j++)
		{
			if (board[i - 2][j - 2] == board[i - 1][j - 1] && board[i - 1][j - 1] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断左交叉
	for (int i = 1; i < row - 1; i++)
	{
		for (int j = 1; j < col - 1; j++)
		{
			if (board[i - 1][j + 1] == board[i][j] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断平局
	int full = IfFull(board, row, col);
	if (full == 1)
	{
		return 'Q';
		
	}
	//游戏继续
	return 'C';
}

三、代码实现

1、test.c文件

#include"game.h"
char ret = 0;//ret用来存放比赛结果
void menu()
{
	
	printf("********************************\n");
	printf("*****        1.play        *****\n");
	printf("*****        0.exit        *****\n");
	printf("********************************\n");
}

void game()
{
	//存储数据 - 二维数组
	char board[ROW][COL];
	//初始化棋盘 - 初始化空格
	InitBoard(board,ROW,COL);
	//打印棋盘 - 本质是打印数组的内容
	DisplayBoard(board, ROW, COL);
	//玩家 电脑 走旗
	while (1)
	{
		//玩家下棋
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL); //打印玩家的每一步走棋
		//判断玩家是否赢得游戏
		ret = IfWin(board, ROW, COL);//玩家赢了*  电脑赢了#  平局Q  游戏继续C
		if (ret != 'C')
			break;
			
		//电脑下棋
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL); //打印电脑的每一步走棋
		//判断电脑是否赢得游戏
		ret = IfWin(board, ROW, COL);
		if (ret != 'C')
			break;
		
	}

	if (ret == '*')
	{
		printf("%c玩家获胜!\n", ret);

	}
	else if (ret == '#')
	{
		printf("%c电脑获胜!\n", ret);

	}
	else 
	{
		printf("%c     平局!\n", ret);
	}
	
	DisplayBoard(board, ROW, COL);
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//配合rand()函数生成随机值,因为只需要调用一次所以放到main()函数中
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("三子棋游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	} while (input);
	return 0;
}

2、game.c文件

#include"game.h"

//初始化棋盘的函数
InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
			
		}
		
	}
}

//打印棋盘的函数
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j;
	for (i = 0; i < row; i++)
	{
		j = 0; 
		for ( j; j < col; j++) //打印   |   |   
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}
		}
		
		printf("\n");
		j = 0;
		for ( j; j < col; j++)//打印---|---|---
		{
			if (i < row - 1)
			{
				printf("---");
				if (j < col - 1)
				{
					printf("|");
				}
			}
		}
		printf("\n");
	}
}

//玩家下棋的函数
void PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("玩家走:>\n");
	while (1)
	{
		printf("请输入下棋的坐标:>");
		scanf("%d %d", &x, &y);
		//判断坐标的合法性
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			//下棋
			//首先判断坐标是否被占用
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';//玩家使用*下棋
				
				break;
			}
			else
			{
				printf("坐标被占用,请重新输入\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入!");
		}
		
	}
}

//电脑下棋的函数
void ComputerMove(char board[ROW][COL], int row, int col)
{
	printf("电脑走:>");
	while (1)
	{
		//生成随机坐标
		int x = rand() % row;
		int y = rand() % col;
		
		//下棋
		//判断坐标是否被占用
		if (board[x][y] == ' ')
		{
			printf("%d %d\n", x + 1, y + 1);//输出电脑下棋的坐标
			board[x][y] = '#';//电脑使用#下棋

			break;
		}
			
	}
}

//判断棋盘是否已经满了的函数
int IfFull(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;//棋盘没满
			}
		}
	}
	return 1;//棋盘满了
}

//判断游戏结果的函数
char IfWin(char board[ROW][COL], int row, int col)
{
	//判断行
	for (int i = 0; i < row; i++)
	{
		for (int j = 2; j < col; j++)
		{
			if (board[i][j - 2] == board[i][j - 1] && board[i][j - 1] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断列
	for (int j = 0; j < col; j++)
	{
		for (int i = 2; i < row; i++)
		{
			if (board[i - 2][j] == board[i - 1][j] && board[i - 1][j] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断右交叉
	for (int i = 2; i < row; i++)
	{
		for (int j = 2; j < col; j++)
		{
			if (board[i - 2][j - 2] == board[i - 1][j - 1] && board[i - 1][j - 1] == board[i][j] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断左交叉
	for (int i = 1; i < row - 1; i++)
	{
		for (int j = 1; j < col - 1; j++)
		{
			if (board[i - 1][j + 1] == board[i][j] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' ')
			{
				return board[i][j];
			}
		}
	}
	//判断平局
	int full = IfFull(board, row, col);
	if (full == 1)
	{
		return 'Q';
		
	}
	//游戏继续
	return 'C';
}

3、game.h文件

//头文件的包含
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


//符号的定义
#define ROW 3
#define COL 3

//函数的声明

//初始化棋盘函数
InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘的函数
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col);
//判断游戏结果  玩家赢了*  电脑赢了#  平局Q  游戏继续C
char IfWin(char board[ROW][COL], int row, int col);
//判断棋盘是否已经下满
int IfFull(char board[ROW][COL], int row, int col);


感谢你的阅读,希望对你有所帮助~

欢迎批评指正,共同进步!

举报

相关推荐

0 条评论