C语言实现 三子棋小游戏(详细+文尾附全代码)

本文介绍如何使用C语言实现一个三子棋小游戏,通过多文件组织代码,包括test.c(测试函数和菜单)、game.h(头文件、宏定义及函数声明)和game.c(各功能函数)。文章详细讲解了各个函数的实现,如INITBUF()用于初始化棋盘,DisplayBuf()用于显示棋盘,PlayerMova()和ComputerMove()分别对应玩家和电脑的移动,whowin()用于判断输赢。文章最后给出了完整代码流程。
摘要由CSDN通过智能技术生成

声明

我写的可能有点复杂,如果想直接看代码,可直接跳转到完整的代码流程部分,将其拼起来即可!

多文件

在开始讲三子棋之前呢,先说说多文件吧。我们平常写代码的时候,如果程序比较大,那么直接包含在一个文件中就会显得比较乱,并且不容易维护,这个时候就需要用到多文件。使用多文件的时候可以将整个程序拆分开来,比方说分为头文件、函数文件、测试文件。当然如果有需要的话,还可以继续细分。
在这里我用了三个文件来分,第一是test.c,用来存放主函数和菜单,用来进行测试使用,第二是game.h用来存放头文件、宏定义以及函数声明,第三是game.c用来存放各个函数。

三子棋游戏实现讲解

test.c

要实现三子棋游戏,首先要一个可以用来测试我们的代码的主函数部分 。我们玩游戏通常都会有选择,所以我们就可以在主函数这里提供一个选择的权力:玩还是退出,游戏嘛,当然是玩完一盘又一盘的所以可以通过循环来实现!

//测试三子棋游戏

#include "game.h"

void menu()
{
   
	printf("**********************\n");
	printf("****1.play   0.exit***\n");
	printf("**********************\n");
}

void test()
{
   
	int num;
	srand((size_t)time(NULL));
	do
	{
   
		menu();
		printf("请输入你的选择:>");
		scanf("%d", &num);
		switch (num)
		{
   
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择有误,请重新选择:");
			break;
		}
	} while (num);
}
int main()
{
   
	test();
	return 0;
}

game.h

这是头文件的代码

#pragma once
#define _CRT_SECURE_NO_WARNINGS 

#define ROW 3 //行数
#define COL 3 //列数

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

//声明
void INITBUF(char buf[ROW][COL], int row, int col);
void DisplayBuf(char buf[ROW][COL], int row, int col);
void PlayerMova(char buf[ROW][COL], int row, int col);
void ComputerMove(char buf[ROW][COL], int row, int col);

//告诉我们四种游戏状态
//玩家赢-'*'
//电脑赢-'# '
//平局-'P'
//继续-'C'
char whowin(char buf[ROW][COL], int row, int col);

三子棋是三行三列,所以我们设定全局变量方便使用,这里的’*’,’#’是为了区别双方对弈的棋子,大家也可以用其他替换,方便观看即可!首先我们初始化棋盘信息(INITBUF(buf, ROW, COL)),然后我们打印出棋盘(DisplayBuf(buf, ROW, COL))随便后我们便开始玩家下棋(PlayerMova(buf, ROW, COL)),和电脑下棋(ComputerMove(buf, ROW, COL)),每下一次棋打印棋盘。最后判断输赢(whowin(char buf[ROW][COL], int row, int col))

game.c

实现三子棋每一个步骤的函数代码
有点长,所以我分成一个个的发,这样更直观

INITBUF()

初始化棋盘,初始化为空格

void INITBUF(char buf[ROW][COL], int row, int col)
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
   
		for (j = 0; j < col; j++)
		{
   
			buf[i][j] = ' ';
		}
	}
}

DisplayBuf()

打印棋盘

void DisplayBuf(char buf[ROW][COL], int row, int col)
{
   
	int i = 0;
	for (i = 0; i < row; i++)
	{
   
		int j = 0;
		for (j = 0; j < col; j++)
		{
   
			printf(" %c ", buf[i][j]);
			if (j < col - 1)
			{
   
				printf("|");
			}
		}
		puts("");
		if (i < row - 1)
		{
   
			for (j = 0; j < col; j++)
			{
   
				printf("---");
				if (j < col - 1)
				{
   
					printf("|");
				}
			}
			puts("");
		}
	
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值