【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)

C语言——五子棋、井字棋人机对“战”

针对C语言学习过程中的五子棋、三子棋实现记录


实际效果

五子棋


做的动图太大了,传不上,那就传视频吧。


一、头文件(game.h)

包含了一些会使用到的函数声明、头文件、宏定义等。需要注意的是宏定义的ROW,COL为棋盘的大小规格,可自行调整,ROW为行,COL为列。RULE为棋盘规则,如:RULE = 5,为五子连成为胜;RULE = 3,为三子连成为胜。 可自行调整,但不要超过5,因为我没有为超过5的棋盘规则计算权值。

#pragma once

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

//符号的定义 - 棋盘的大小
#define ROW 10
#define COL 10

//符号的定义 - 棋盘规则
#define RULE 5


//游戏菜单
void menu();
/*
选项1为开始游戏
选项2为退出游戏
*/

//游戏具体实现
void game();

//棋盘初始化
void board_init(char board[ROW][COL], int row, int col);

//棋盘打印
void board_display(char board[ROW][COL], int row, int col);

//判断游戏输赢
char board_wolf(char board[ROW][COL], int row, int col);

//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);

//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col);

//判断棋盘是否已满
int isfull(char board[ROW][COL], int row, int col);

//电脑智能下棋系统(包含计分)
void computer_calc(char board[ROW][COL], int row, int col);

//电脑智能判断
void computer_think(int calc_score[ROW][COL], char board[ROW][COL], int row, int col);

二、测试文件(test.c)

包含游戏主函数的实现,flag控制如果输入错误选项,可以再次回到菜单。

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

//游戏主函数实现
int main()
{
   
	int flag = 0;
	do
	{
   
		int input = 0;
		menu();//菜单
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
   
		case 1:
			printf("开始游戏\n");
			game();//游戏运行
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("输入错误\n");
			flag = 1;
			break;
		}
	} while (flag);
	return 0;
}

三、游戏程序文件(game.c)

包含了一些游戏程序上的函数实现。思路上并不是根据大多数人所做的:按照落子位置上下左右斜方向扫描,来判断输赢。这里我选用了扫描全棋盘,每个棋子都扫描到。当然他们的想法会更好,这里为了简单就这样写了。需要注意的是,这部分代码未写死,比较通用,更改头文件的ROW,COL,RULE都有效。
此部分已在2022/09/07按照本文末尾关于本文章的详细介绍更新。
可放心食用

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

//游戏菜单
void menu()
{
   
	printf("***************************\n");
	printf("*******    1.play     *****\n");
	printf("*******    0.exit     *****\n");
	printf("***************************\n");
}

//游戏实现
void game()
{
   
	//设置随机数的生成器
	srand((unsigned int)time(NULL));
	//存储数据 - 二维数组
	char board[ROW][COL];
	//初始化棋盘 - 初始化空格
	board_init(board, ROW, COL);
	//打印一下棋盘
	board_display(board, ROW, COL);
	char ret = 0;

	while (1) 
	{
   
		//玩家下棋
		PlayerMove(board, ROW, COL);
		//清屏
		system("cls");
		board_display(board, ROW, COL);
		//判断游戏输赢
		ret = board_wolf(board, ROW, COL);
		if (ret != 'C')
			break;

		//电脑下棋
		printf("对方正在下棋......\n");
		Sleep(1000);//让电脑假装思考
		
  • 19
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

afool�‍♂️

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

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

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

打赏作者

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

抵扣说明:

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

余额充值