一个简单的三子棋游戏

这是一个简单的井字游戏实现,包括菜单显示、棋盘打印、初始化、胜负判断、玩家与电脑落子以及平局判断等功能。玩家和电脑交替下棋,直到一方获胜或平局。代码中使用了C语言编写,实现了游戏的基本逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

game.h

#pragma once


#define  ROW  3
#define  COL  3


void menu();
void  game();
void printboard(char board[ROW][COL], int row, int col);
void  boardinit(char board[ROW][COL], int row, int col);//棋盘初始化
int judge_winner(char board[ROW][COL]);
void computermove(char board[ROW][COL]);//电脑落子
void playermove(char board[ROW][COL]);//玩家落子
int blance_judge(char board[ROW][COL]);//平局判定

game.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
#include<stdlib.h>


void menu()
{
	printf("**********  1.play   0.exit *********\n");
}
void printboard(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++)
		{
			printf(" %c ", board[i][j]);
			if(j<col-1)
				printf("|");
		}
		printf("\n");
		if (i < row - 1)
		{
			for (j = 0;j < col;j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}
void  boardinit(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++)
		{
			board[i][j] = ' ';
		}
	}
}
int judge_winner(char board[ROW][COL])
{
	int i = 0;
	for (i = 0;i < ROW; i++)
	{
		if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*')
			return 0;
		else if (board[0][i] == '*' && board[1][i] == '*' && board[2][i] == '*')
			return 0;
	}
	if(board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*')
		return 0;
	else if (board[2][0] == '*' && board[1][1] == '*' && board[0][2] == '*')
		return 0;
	for (i = 0;i < ROW; i++)
	{
		if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#')
			return 1;
		else if (board[0][i] == '#' && board[1][i] == '#' && board[2][i] == '#')
			return 1;
	}
	if (board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#')
		return 1;
	else if (board[2][0] == '#' && board[1][1] == '#' && board[0][2] == '#')
		return 1;
	return -1;
}

void computermove(char board[ROW][COL])//电脑落子
{
	int x = 0;
	int y = 0;
	do
	{
		x = rand() % ROW;
		y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = '*';
			break;
		}
	} while (1);
}
void playermove(char board[ROW][COL])//玩家落子
{
	int x = 0;
	int y = 0;
	do
	{
		printf("请输入落子位置->");
		scanf("%d %d",&x,&y);
		if (board[(x-1)][(y-1)] == ' ')
		{
			board[(x-1)][(y-1)] = '#';
			break;
		}
		printf("位置错误,重新输入\n");
	} while (1);
}

int blance_judge(char board[ROW][COL])//平局判定
{
	int count = 0;
	int i = 0;
	int j = 0;
	for (i = 0;i < ROW;i++)
	{
		for (j = 0;j < COL;j++)
		{
			if (board[i][j] == ' ')
				count++;
		}
	}
	return count;
}
void game()
{
	int winner = 0;
	char chessboard[ROW][COL] = { ' ' };
	boardinit(chessboard, ROW, COL);
	printboard(chessboard, ROW, COL);
	do
	{
		computermove(chessboard);
		printboard(chessboard, ROW, COL);
		winner = judge_winner(chessboard);
		if (winner == 0)
		{
			printf("电脑胜利\n");
			break;
		}
		if (blance_judge(chessboard) == 0)
		{
			printf("平局\n");
			break;
		}
		playermove(chessboard);
		winner = judge_winner(chessboard);
		if (winner == 1)
		{
			printboard(chessboard, ROW, COL);
			printf("玩家胜利\n");
			break;
		}
		if (blance_judge(chessboard) == 0)
		{
			printf("平局\n");
			break;
		}
	} while (1);
}

main.c

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

int main()
{
	int input=0;
	srand((unsigned int)time(NULL));
	menu();
	scanf("%d", &input);
	switch (input)
	{
	case 0:
		return 0;
		break;
	case 1:
		game();
		break;
	default:
		printf("输入错误,请重新输入");
		break;
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JDSZGLLL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值