C语言实现简易版三子棋

//三子棋
//game.h头文件
#ifndef __GAME_H__
#define __GAME_H__

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

#define ROW 3 
#define COL 3

void Inin_Board(char arr[ROW][COL],int row,int col);
void Display_Board(char arr[ROW][COL], int row, int col);
void Computer_Put(char arr[ROW][COL], int row, int col);
void Customer_Put(char arr[ROW][COL], int row, int col);
char Check_Win(char arr[ROW][COL], int row, int col);
#endif



//game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void Inin_Board(char arr[ROW][COL], int row, int col)//初始化棋盘,使其全为空格
{
	memset(arr, ,row*col);
}
void Display_Board(char arr[ROW][COL], int row, int col)//打印一个棋盘
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		printf("  %c | %c | %c 
", arr[i][0], arr[i][1], arr[i][2]);
		if (i < row - 1)
		{
			printf(" -----------
");
		}
	}
}
void Computer_Put(char arr[ROW][COL], int row, int col)//电脑走一步
{
	printf("电脑走:
");
	while (1)
	{
		row = rand() % 3;
		col = rand() % 3;
		if (arr[row][col] ==  )
		{
			break;
		}
	}
	arr[row][col] = @;
}
void Customer_Put(char arr[ROW][COL], int row, int col)//你走一步
{
	int i = 0, j = 0;
	printf("你走:
");
	printf("请输入你要走的坐标:");
	while (1)
	{
		scanf("%d%d", &i, &j);
		i--; j--;
		if ((i >= 0 && i <= 2) && (j <= 2 && j >= 0))
		{
			if (arr[i][j] ==  )
			{
				arr[i][j] = X;
				break;
			}
			else 
			{
				printf("坐标已被占用,请重新输入:");
			}
		}
		else
		{
			printf("输入坐标错误,请重新输入:");
		}
	}
}

int Full_Board(char arr[ROW][COL], int row, int col)//判断棋盘是否下满
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (arr[i][j] !=  )
				return 0;
		}
	}
	return 1;
}
char Check_Win(char arr[ROW][COL], int row, int col)//检查是电脑赢了,还是你赢了,还是平局,然后输出,否则继续
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] !=  )
		{
			return arr[i][1];
		}
	}
	for (i = 0; i < col; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] !=  )
		{
			return arr[0][i];
		}
	}
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] !=  )
	{
			return arr[1][1];
	}
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] !=  )
	{
		return arr[1][1];
	}
	else
	{
		if (Full_Board(arr, row, col))
		{
			return q;
		}
		else return  ;
	}
}



//Main.C
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include"game.h"
void Menu()
{
	printf("**************************
");
	printf("****  1.play  0.exit  ****
");
	printf("**************************
");
}
void game()
{
	char flag = 0;
	char board[ROW][COL];
	Inin_Board(board, ROW, COL);
	Display_Board(board, ROW, COL);
	while (1)
	{
		Computer_Put(board, ROW, COL);
		Display_Board(board, ROW, COL);
		if ((flag = Check_Win(board, ROW, COL)) !=  )
			break;
		Customer_Put(board, ROW, COL);
		Display_Board(board, ROW, COL);
		if ((flag = Check_Win(board, ROW, COL)) !=  )
			break;
	}
	if (flag == @)
	{
		printf("电脑赢!
");
	}
	if (flag == X)
	{
		printf("你赢了!
");
	}
	if (flag == q)
		printf("平局
");
}
int main()
{
	int choose = 0;
	srand((unsigned int)time(NULL));
	do
	{
		Menu();
		printf("请输入你的选择:");
		scanf("%d", &choose);
		switch (choose)
		{
		case 1:game(); 
			break;
		case 0:break;
		default:printf("输入错误,请重新输入!
");
			break;
		}


	} while (choose);
	fflush(stdin);
	getchar();
	return 0;
}

经验分享 程序员 微信小程序 职场和发展