如何用C语言实现三子棋游戏

本文介绍了一个简单的五子棋游戏程序实现,使用C语言编写。该程序包括玩家与电脑对战的功能,通过随机算法实现电脑下棋逻辑,并提供用户交互界面进行游戏操作。此外,还实现了游戏状态检查功能,用于判断游戏胜负。

board.h

<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Line 3
#define Column 3
void meau();
void Init(char board[Line][Column], int x, int y);//初始化一个棋盘即初始化二维数组中所有元素的函数
void Display(char board[Line][Column]);//打印棋盘的函数
void computer(char board[Line][Column]);//电脑下棋的函数
void player(char board[Line][Column],int x,int y);//玩家下棋的函数
int check_complete(char board[Line][Column]);//检测棋盘是否下满的函数
int check_win(char board[Line][Column]);//判断是电脑赢还是玩家赢的函数</span>

board.c

<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include"board.h"
void meau()
{
	printf("**************<1>--player**********\n");
	printf("**************<0>-- exit **********\n");
	printf("***********************************\n");
}
void Init(char board[Line][Column], int x, int y)
{
	int i = 0, j = 0;
	for (i = 0; i < Line; i++)
	{
		for (j = 0; j < Column; j++)
		{
			board[i][j] = ' ';
		}
	}
}
void Display(char board[Line][Column])
{
	int i;
	for (i = 0; i<3; i++)

	{

		printf("_%c_|_%c_|_%c_\n", board[i][0], board[i][1], board[i][2]);

		if (i<2)

			printf("   |   |   \n");
	}

}
void computer(char board[Line][Column])
{
	int x, y, sum = 0;
	srand((unsigned)time(NULL));
	x = rand() % 3;
	y = rand() % 3;
	while (board[x][y] != ' ')
	{
			if (check_complete(board) < 9)
			{
				x = rand() % 3;
				y = rand() % 3;   
			}
			else
			{
				break;
			}
	}
	board[x][y] = '*';

}
void player(char board[Line][Column],int x, int y)
{
	while (1)
	{
		printf("请输入玩家所对应的坐标:\n");
		scanf("%d%d", &x, &y);
		if ((x>=0&&x < Line)&&(y>=0&&y < Column)&& (board[x][y] == ' '))
		{
			board[x][y] = '@'; break;
		}
		else
			printf("输入有误请重新输入\n");
	}
}
int check_complete(char board[Line][Column])
{
	int i, j, count = 0;
	for (i = 0; i < Line; i++)
	{
		for (j = 0; j < Column; j++)
		{
			if (board[i][j] != ' ')
			{
				count++;
			}
		}
	}
	return count;

}
int check_win(char board[Line][Column])
{
	if ((board[0][1] == '*'&& board[0][0] == '*' && board[0][2] == '*') || (board[1][1] == '*'&& board[1][0] == '*' && board[1][2] == '*') || (board[2][1] == '*'&& board[2][0] == '*' && board[2][2] == '*') || (board[1][0] == '*'&& board[0][0] == '*' && board[2][0] == '*') || (board[1][1] == '*'&& board[0][1] == '*' && board[2][1] == '*') || (board[0][2] == '*'&& board[1][2] == '*' && board[2][2] == '*') || (board[2][2] == '*'&& board[1][1] == '*' && board[2][0] == '*') || (board[0][0] == '*'&& board[1][1] == '*' && board[2][2] == '*'))
	{

		return 1;
	}
	if ((board[0][1] == '@'&& board[0][0] == '@' && board[0][2] == '@') || (board[1][1] == '@'&& board[1][0] == '@' && board[1][2] == '@') || (board[2][1] == '@'&& board[2][0] == '@' && board[2][2] == '@') || (board[1][0] == '@'&& board[0][0] == '@' && board[2][0] == '@') || (board[1][1] == '@'&& board[0][1] == '@' && board[2][1] == '@') || (board[0][2] == '@'&& board[1][2] == '@' && board[2][2] == '@') || (board[2][2] == '@'&& board[1][1] == '@' && board[2][0] == '@') || (board[0][0] == '@'&& board[1][1] == '@' && board[2][2] == '@'))
	{
		return 0;
	}
	else
	{
		return -1;
	}
}</span>

test.c

<span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include "board.h"
void game()
{
	int line=0, column=0;
	char board1[Line][Column];
	Init(board1, Line, Column);
	while (1)
	{
	
		player(board1, line, column);
		computer(board1);
		Display(board1);
		if (check_win(board1) == 1)
		{
			printf("电脑获胜"); break;
		}
		if (check_win(board1) == 0)
		{
			printf("人获胜"); break;
		}
		if (check_complete(board1) == 9 && check_win(board1) != 1 && check_win(board1) != 0)
		{
			printf("此次为平局"); break;
		}
	}
}
int main()
{
	int num;
	while (1)
	{
		meau();
		printf("请选择输入一个数0或1:\n");
		scanf("%d", &num);
		printf("\n");
		switch (num)
		{
		case 1:game();
			break;
		case 0:exit(1);
			break;
		default:printf("输入错误请重新选择:\n"); break;
		}
	}
		system("pause");
		return 0;
}</span>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值