C语言实现三子棋

三子棋

Ttt.c文件

#include"Ttt.h"


static void InitBoard(char arr[][COL1], int row, int col)
{
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			arr[i][j] = INIT;
}
static void ShowBoard(char arr[][COL1], int row, int col)
{
	system("cls");
	printf(" ");
	for (int i = 0; i < col; i++)
		printf("%3d", i + 1);
	printf("\n------------\n");
	for (int i = 0; i < row; i++)
	{
		printf("%-2d", i + 1);
		for (int j = 0; j < col; j++)
			printf("| %c", arr[i][j]);
		printf("\n-----------\n");
	}
}

static PlayerMove(char arr[][COL1], int row, int col)
{
	int x = 0, y = 0;
	while (1)
	{
		printf("Please input the position you want<x,y>#");
		scanf("%d%d", &x, &y);
		if (x < 1 || x>3 || y < 1 || y>3)
		{
			printf("Please input again!!!\n");
			continue;
		}
		if (arr[x - 1][y - 1] == INIT)
		{
			arr[x - 1][y - 1] = WHITE;
			break;
		}
		else
			printf("There are already pieces in this position\n");
	}
}

static void ComputerMove(char arr[][COL1], int row, int col)
{
	while (1)
	{
		int x = rand() % row;
		int y = rand() % row;
		if (arr[x][y] == INIT)
		{
			arr[x][y] = BLACK;
			break;
		}
	}
}

static char IsEnd(char arr[][COL1], int row, int col)
{
	for (int i = 0; i < row; i++)
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != INIT)
			return arr[i][0];
	for (int i = 0; i < row; i++)
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != INIT)
			return arr[0][i];
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != INIT)
		return arr[1][1];
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != INIT)
		return arr[1][1];
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			if (arr[i][j] == INIT)
				return NEXT;
	return DRAW;
}

void GameTtt()
{
	char board[ROW1][COL1];
	InitBoard(board, ROW1, COL1);

	srand((unsigned long)time(NULL));
	char result = 0;

	while (1)
	{
		ShowBoard(board, ROW1, COL1);
		PlayerMove(board, ROW1, COL1);
		result = IsEnd(board, ROW1, COL1);
		if (result != NEXT)
			break;
		ShowBoard(board, ROW1, COL1);
		ComputerMove(board, ROW1, COL1);
		if (result != NEXT)
			break;
	}
	ShowBoard(board, ROW1, COL1);
	switch (result) {
	case WHITE:
		printf("You Win!\n");
		break;
	case BLACK:
		printf("You Lose!\n");
		break;
	case DRAW:
		printf("it ends in a draw!\n");
		break;
	default:
		printf("BUG!!!\n");
		break;
	}
}

Ttt.h文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<Windows.h>

#define ROW1 3
#define COL1 3

#define INIT ' '
#define WHITE 'x'
#define BLACK 'o'

#define DRAW 'D'
#define NEXT 'N'

extern void GameTtt();

代码实现截图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值