C语言:3*3棋盘实现三子棋

三子棋的实现功能:

通过输入坐标确认下棋地点,与电脑对战,电脑产生随机数(随机坐标)。

输出棋盘,并判断玩家与电脑的输赢,输出赢家。

#include<stdio.h>
#include<stdlib.h>
#include"game.h"
#include<windows.h>

void start_game(char arr[ROWS][COLS])
{
	show_arr(arr, ROWS, COLS);  //输出棋盘;
	while (1)
	{
		player_game(arr, ROWS, COLS);//玩家开始玩游戏;
		if (check(arr) == 'p')   
		{
			break;
		}
		show_arr(arr, ROWS, COLS);
		printf("电脑开始下棋:>\n");
		computer_game(arr, ROWS, COLS);//电脑开始玩游戏;
		if (check(arr) == 'c')
		{
			break;
		}
		Sleep(1000);
		show_arr(arr, ROWS, COLS);
	}
		if (check(arr) == 'p')
		{
			printf("玩家获胜\n");
		}
		else
		{
			printf("电脑获胜\n");
		}
}

void menu()  //简易的菜单输出;
{
	printf("**************************\n");
	printf("******    1.play    ******\n");
	printf("******    0.exit    ******\n");
	printf("**************************\n");
}

void game()
{
	int tmp = 0;
	char arr[ROWS][COLS] = { 0 };//初始化棋盘输出 ROWS,COLS宏定义大小;
	init_arr(arr, ROWS, COLS);
	srand((unsigned)time(NULL));//产生随机数,此处需要调用头文件#include<time.h> 
	menu();
	printf("请选择是否开始玩游戏:>");
	scanf("%d", &tmp);
	switch (tmp)
	{
	case PLAY:
		start_game(arr);
		break;
	case EXIT:
		break;
	}
}

int main()
{
	game();
	system("pause");
	return 0;
}

text.c写大概的逻辑,通过调用各个函数判断是否开始游戏,并写一个简易的判断输赢的函数。text.c需要调用头文件#include "game.h"。

#include<stdio.h>
#include<stdlib.h>
#include"game.h"

void init_arr(char arr[ROWS][COLS])   //给棋盘复制为空格’ ’;
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROWS; i++)
	{
		for (j = 0; j < COLS; j++)
		{
			arr[i][j] = ' ';
		}
	}
}

void show_arr(char arr[ROWS][COLS])  //按一定格式输出棋盘;
{
	int i = 0;
	for (i = 0; i < ROWS; i++)
	{
		printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
		if (i != 2)
		{
			printf("---|---|--- \n");
		}
	}
}

void player_game(char arr[ROWS][COLS])  //玩家开始玩游戏
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请玩家输入坐标:>");
		scanf("%d %d", &x, &y);
		//判断坐标是否合法;
		if ((x > 0 && x <= 3) && (y > 0 && y <= 3))    
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = 'X';
				break;
			}
			else
			{
				printf("坐标不可以使用.\n");
			}
		}
		else
		{
			printf("坐标输入不合法\n");
		}
	}
}

void computer_game(char arr[ROWS][COLS])  //电脑开始玩游戏
{
	while (1)
	{
		int x = rand() % 3;  //此处产生随机数,对3取余,使x,y的坐标数为0或者1或者2;
		int y = rand() % 3;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '0';
			break;
		}
	}
}

char check(char arr[ROWS][COLS])    
{
	int i = 0;
	//判断玩家的输赢;
	for (i = 0; i < ROWS; i++)//判断三个行数是否均为X,是的话返回p,代表player获胜;
	{
		if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == 'X'))
			return 'p';
	}
	for (i = 0; i < COLS; i++)//判断三个列数是否均为X,是的话返回p,代表player获胜;
	{
		if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == 'X'))
			return 'p';
	}
	//用两个if语句判断两个对角是否均为X,是的话返回p,代表player获胜;
	if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'X'))
	{
		return 'p';
	}
	if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'X'))
	{
		return 'p';
	}
	//判断电脑的输赢;
	for (i = 0; i < ROWS; i++)
	{
		if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == '0'))
			return 'c';
	}
	for (i = 0; i < COLS; i++)
	{
		if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == '0'))
			return 'c';
	}
	if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == '0'))
	{
		return 'c';
	}
	if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == '0'))
	{
		return 'c';
	}
}
game.c主要写text.c调用的函数,实现三子棋的主要函数功能。

1、初始化棋盘;

2、输出棋盘;

3、玩家和电脑分别下棋;

4、判断输赢;

此处的函数声明均放在下面的game.h头文件中,因此此处应该写入#include "game.h"

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __GAME_H__
#define __GAME_H__

#define ROWS 3     //定义行数;
#define COLS 3	   //定义列数;

enum XP    //枚举 使得选择菜单容易理解1.play  0.exit;
{
	PLAY = 1,
	EXIT = 0
};
//函数的声明;
void init_arr(char arr[ROWS][COLS]);
void show_arr(char arr[ROWS][COLS]);
void player_game(char arr[ROWS][COLS]);
void computer_game(char arr[ROWS][COLS]);
char check(char arr[ROWS][COLS]);


#endif
三子棋的主要代码如上。可以写在一个.c文件中,像上面这样,代码容易读懂。

你可能感兴趣的:(游戏,编程,C语言)