一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——三子棋游戏实现

news2025/2/12 15:46:24

硬控我一上午,小编还是太菜了,大家可以自行升级电脑难度,也可以升级游戏到五子棋

1.game.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3

//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘
void DispalyBoard(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);
//判断输赢
char IfWin(char board[ROW][COL], int row, int col);
int IfFull(char board[ROW][COL], int row, int col);

2.test.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
	{
		printf("****************************\n");
		printf("****** 1.play 0.exist ******\n");
		printf("****************************\n");
	}
void game()
{
	char ret='C';
	char board[ROW][COL] = { 0 };
	//初始化棋盘的函数
	InitBoard(board,ROW,COL);
	DispalyBoard(board,ROW,COL);
	while (1)
	{
		PlayerMove(board,ROW,COL);
		ret=IfWin(board,ROW,COL);
		if (ret != 'C')
	      {
		 	break;
		  }
		DispalyBoard(board,ROW,COL);
		ComputerMove(board,ROW,COL);
		ret=IfWin(board,ROW,COL);
		if (ret != 'C')
		{
			break;
		}
		DispalyBoard(board,ROW,COL); 

	
	
	}

if (ret == '*')
	{
		printf("玩家赢\n");
	}		
	if (ret == '#')
	{
		printf("电脑赢\n");
	}
	if (ret == 'Q')
	{
		printf("平局\n");
	}
	

}

int main()
{
	int input = 0;
do
	{
	menu();//菜单
	printf("请选择:>");
	scanf("%d", &input);
	switch (input)
	{
	case 1:
		printf("三子棋\n");
		game();
		break;
	case 0:
		printf("退出游戏\n");
		break;
	default:
		printf("选择错误\n");
		break;
	}
} while (input);
return 0;

}

3.game.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
int IfFull(char board[ROW][COL],int row,int col)
{
	for (int i = 0;i < row;i++)
	{
		for (int j = 0;j < col;j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
void InitBoard(char board[ROW][COL], int row, int col)
{

	for (int i = 0;i < row;i++)
	{
		for (int j = 0;j < col;j++)
		{
			board[i][j] = ' ';
		}
	}
}

void DispalyBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0;i < row;i++)
	{

		for (int j = 0;j < col;j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
				printf("|");
		}
		printf("\n");

		if (i < row - 1)
		{
			for (int j = 0;j < col;j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");

			}
			printf("\n");


		}
	}
}

void PlayerMove(char board[ROW][COL], int row, int col)
 {
	 int  x = 0, y = 0;
	 printf("玩家下棋:>\n");
	 while (1)
	 {
		
		 printf("请输入坐标:>");
		 scanf("%d %d", &x,&y);
		 if (x >= 1 && x <= row && y >= 1 && y <= col)
		 {
			 if (board[x - 1][y - 1] == ' ')
			 {
				 board[x - 1][y - 1] = '*';
				 break;
			 }
			 else
			 {
				 printf("坐标被占用,请选择其他位置\n");
			 }
		 }
		 else
		 {
			 printf("坐标非法,请重新输入\n");
		 }
	 }


}
 
void ComputerMove(char board[ROW][COL], int row, int col)
{
	srand((unsigned int)time(NULL));
	 printf("电脑下棋\n");
	 int x = 0, y = 0;
	 while(1)
	 {
		int  x = rand() % row;
		int  y = rand() % col;
		 if (board[x][y] == ' ')
		 {
			 board[x][y] = '#';
			 break;
		 }
	 }
 }

char IfWin(char board[ROW][COL], int row, int col)
{
	//行
	for (int i = 0;i < row;i++)
	{
		if (board[i][0] == board[i][1] && board[i][2] == board[i][1] && board[i][1] != ' ')
		{
			return board[i][0];
		}
	}
	//列
	
	for (int j = 0;j< col;j++)
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] !=' ')
		{
			return board[0][j];
		}
	}
	//对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}


	if (IfFull(board, row, col))
	{
		return 'Q';
	}
	return 'C';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bingAI生成的易语言编程基础

易语言编程基础 易语言&#xff08;EPL&#xff09;是一种基于中文的编程语言&#xff0c;旨在简化编程学习过程&#xff0c;特别适合初学者和有一定编程基础的开发者。它通过中文关键词和语法&#xff0c;降低了编程的门槛&#xff0c;使得代码更加直观易懂。 示例&#xff…

DeepSeek AI R1推理大模型API集成文档

DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展&#xff0c;大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型&#xff0c;凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计&#xff0c;吸引了大量开发…

【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和

【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和 文章目录 一、dp1.1 题意理解1.2 整体思路1.3 具体思路1.4 代码 二、多语言解法 一、dp 1.1 题意理解 nums 数组, 有正负0, 使用最多两次魔法卷轴, 希望使数组整体的累加和尽可能大. 求尽可能大的累加和 其实就…

【R】Dijkstra算法求最短路径

使用R语言实现Dijkstra算法求最短路径 求点2、3、4、5、6、7到点1的最短距离和路径 1.设置data&#xff0c;存放有向图信息 data中每个点所在的行序号为起始点序号&#xff0c;列为终点序号。 比如&#xff1a;值4的坐标为(1,2)即点1到点2距离为4&#xff1b;值8的坐标为(6,7)…

深入浅出:探索 DeepSeek 的强大功能与应用

深入浅出&#xff1a;探索 DeepSeek 的强大功能与应用 在人工智能技术飞速发展的今天&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为其重要分支&#xff0c;正逐渐渗透到我们生活的方方面面。DeepSeek 作为一款功能强大的 NLP 工具&#xff0c;凭借其易用性和高效性…

西门子S7-200 PLC串口PPI转以太网通讯的模块链接方式

项目背景 某汽车零部件生产车间有30台自动化生产设备&#xff0c;控制系统采用西门子S7-200系列的CPU226。此前&#xff0c;设备的一个通讯端口用于和变频器进行自由口通讯&#xff0c;另一个通讯端口连接着一台昆仑通态触摸屏作为人机界面。车间计划进行智能化升级&#xff…

win10向windows server服务器传输文件

win10向windows server服务器传输文件 遇到无法直接拖动文件进行传输时 解决方案&#xff1a; 1.点击显示选项 2.点击本地资源-详细信息 3.在窗口中选择你需要共享的磁盘 4.然后远程连接到Windows server服务器 5.登录Windows server服务器后&#xff0c;在此电脑下就能看…

git服务器搭建,gitea服务搭建,使用systemclt管理服务

文章目录 页面展示使用二进制文件安装git服务下载选择架构使用wget下载安装 验证 GPG 签名服务器设置准备环境创建systemctl文件 备份与恢复备份命令 (dump)恢复命令 (restore) 页面展示 使用二进制文件安装git服务 所有打包的二进制程序均包含 SQLite&#xff0c;MySQL 和 Po…

Mybatis快速入门与核心知识总结

Mybatis 1. 实体类&#xff08;Entity Class&#xff09;1.1 实体类的定义1.2 简化编写1.2.1 Data1.2.2 AllArgsConstructor1.2.3 NoArgsConstructor 2. 创建 Mapper 接口2.1 Param2.2 #{} 占位符2.3 SQL 预编译 3. 配置 MyBatis XML 映射文件&#xff08;可选&#xff09;3.1 …

用docker在本地用open-webui部署网页版deepseek

前置条件 用Ollama在本地CMD窗口运行deepseek大模型-CSDN博客文章浏览阅读109次&#xff0c;点赞5次&#xff0c;收藏2次。首次运行需要下载deepseek的大模型包&#xff08;大约5GB&#xff0c;根据本地网速的不同在半个小时到几个小时之间下载完成&#xff09; &#xff0c;并…

2025.2.8——一、[护网杯 2018]easy_tornado tornado模板注入

题目来源&#xff1a;BUUCTF [护网杯 2018]easy_tornado 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;分析已知信息 step 2&#xff1a;目标——找到cookie_secret step 3&#xff1a;构造payload 三、小结 一、打开靶机&#xff0c;整理信…

前端实现在PDF上添加标注(1)

前段时间接到一个需求&#xff0c;用户希望网页上预览PDF&#xff0c;同时能在PDF上添加文字&#xff0c;划线&#xff0c;箭头和用矩形框选的标注&#xff0c;另外还需要对已有的标注进行修改&#xff0c;删除。 期初在互联网上一通搜索&#xff0c;对这个需求来讲发现了两个问…

GitCode 助力 Easy-Es,革新 Elasticsearch 开发体验

项目仓库&#xff08;点击阅读原文链接可直达&#xff09; https://gitcode.com/dromara/easy-es 项目背景&#xff1a;填补 Elasticsearch ORM 框架空白 在 Java 开发领域&#xff0c;Excel 和 Elasticsearch 的代码编写难度一直名列前茅&#xff0c;尤其是 Elasticsearch&a…

EF Core中实现值对象

目录 值对象优点 值对象的需求 值类型的实现 值类型GEO的实现 值类型MultilingualString的实现 案例&#xff1a;构建表达式树&#xff0c;简化值对象的比较 值对象优点 把有紧密关系的属性打包为一个类型把领域知识放到类的定义中 class shangjia {long id;string nam…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十一)-回文日期、移动距离、日期问题

前言 在这篇博客中&#xff0c;我们将通过模拟的方法来解决三道经典的算法题&#xff1a;回文日期、移动距离和日期问题。这些题目不仅考察了我们的基础编程能力&#xff0c;还挑战了我们对日期处理和数学推理的理解。通过模拟算法&#xff0c;我们能够深入探索每个问题的核心…

Docker Compose介绍及安装使用MongoDB数据库详解

在现代容器化应用部署中&#xff0c;Docker Compose是一种非常实用的工具&#xff0c;它允许我们通过一个docker-compose.yml文件来定义和运行多容器应用程序。然而&#xff0c;除了Docker之外&#xff0c;Podman也提供了类似的工具——Podman Compose&#xff0c;它允许我们在…

11.swagger使用

菜单位置 未登录接口会返回401 登录的token存储的位置 配置文件swagger配置中将/dev-api修改/

java高级知识之集合

前言 集合是java开发中的重点内容&#xff0c;需要掌握的东西很多&#xff0c;面试中可问的东西很多&#xff0c;无论是深度还是广度。集合框架中Collection对应的实现类如下所示&#xff0c;这些都是要完全掌握&#xff0c;一个可以分为三大类List集合、Set‘集合以及Map集合…

deepseek + kimi 高效生成PPT

1.在deepseek中生成ppt大纲 2.将大纲复制到kimi中生成PPT kimi&#xff1a;https://kimi.moonshot.cn/

好好说话:深度学习扫盲

大创项目是和目标检测算法YOLO相关的&#xff0c;浅浅了解了一些有关深度学习的知识。在这里根据本人的理解做一些梳理。 深度学习是什么&#xff1f; 之前经常听到AI&#xff0c;机器学习&#xff0c;深度学习这三个概念&#xff0c;但是对于三者的区别一直很模糊。 AI&…