三子棋游戏

 #### text.c:用来放主体
#include"game.h"
###### 先写一个函数显示初始化界面
void menu()
{
	printf("**************************\n");
	printf("******    1.play    ******\n");
	printf("******    0.exit    ******\n");
	printf("**************************\n");

}
###### 然后写一个函数放需要用到的函数
void game() {
	//存放玩家或者电脑的落子情况
	char board[ROW][COL];
	char ret = 0;
	//初始化一下棋盘为全空格
	init(board, ROW, COL);
	//打印棋盘
	print(board, ROW, COL);
	//玩家下棋
	//player_move(board, ROW, COL);
	电脑下棋
	//computer_move(board, ROW, COL);
	判断输赢
	//is_win(board, ROW, COL);
	while (1)
	{
		//玩家下棋
		player_move(board, ROW, COL);
		print(board, ROW, COL);
		//用一个变量接收判断输赢的结果,并判断
		ret= is_win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑下棋
		computer_move(board, ROW, COL);
		print(board, ROW, COL);
		ret = is_win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}
	//对返回结果进行判断
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	if (ret == '#')
	{
		printf("电脑赢\n");
	}
	if (ret == 'Q')
	{
		printf("平局\n");
	}
}

void text()
{
	srand((unsigned)time(NULL));
	int inpt;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d", &inpt);
		switch (inpt)
		{
		case 1:
			game();
			break;
		case 2:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (inpt);
}
int main()
{
	text();
	return 0;
}
#### game.h:用来放需要用到的库函数和定义的常量并且对需要用到的函数进行声明

#define ROW 3
#define COL 3

#include
#include
#include

void init(char board[ROW][COL], int row, int col);

//打印棋盘
void print(char board[ROW][COL], int row, int col);
//玩家下棋
void player_move(char board[ROW][COL], int row, int col);
//电脑下棋
void computer_move(char board[ROW][COL], int row, int col);
//判断输赢
char is_win(char board[ROW][COL], int row, int col);
#### game.c:对函数进行定义
#include"game.h"
void init(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}
void print(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
				printf("|");
		}
		printf("\n");
		if (i < row - 1)
		{
			//printf("---|---|---\n");
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}
void player_move(char board[ROW][COL], int row, int col) {
	printf("玩家下棋\n");
	while (1)
	{
		int x, y;
		printf("请输入想下的坐标\n");
		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("坐标非法\n");
		}
	}
}
void computer_move(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋\n");
	while (1)
	{
		int x = rand() % row;
		int y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}

}
//判断棋盘是否下满(只有本项使用所以用static修饰)
static int is_full(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			if (board[i][j] = ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
char is_win(char board[ROW][COL], int row, int col)
{
	//判断三行
	for (int i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2]&& board[i][2]!=' ')
		{
			return board[i][0];
		}
	}
	//判断三列
	for (int j = 0; j < col; j++)
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j]&& board[2][j]!=' ')
		{
			return board[0][j];
		}
	}
	//判断对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	//判断平局
	if (is_full == 1)
	{
		return 'Q';
	}
	return 'C';
}



你可能感兴趣的:(游戏,c++)