当前位置: 首页 > news >正文

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版

  • 代 码 全 貌 与 功 能 介 绍
  • 扫雷游戏的功能说明
  • 游 戏 效 果 展 示
  • 游 戏 代 码 详 解
    • game.h
    • test.c
    • game.c
  • 总结

💻作 者 简 介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言
💡个 人 主 页:@笑口常开xpr 的 个 人 主 页
📚系 列 专 栏:C 启新程
✨代 码 趣 语:每 个 人 都 应 该 学 习 编 程,因 为 它 教 会 你 如 何 思 考。
💪代 码 千 行,始 于 坚 持,每 日 敲 码,进 阶 编 程 之 路。
📦gitee 链 接:gitee

在这里插入图片描述

       在 编 程 的 世 界 里,每 一 行 代 码 都 可 能 隐 藏 着 无 限 的 可 能 性 。你 是 否 想 过,一 个 小 小 的 程 序 究 竟 能 改 变 什 么?它 可 以 是 解 决 复 杂 问 题 的 工 具 ,也 可 以 是 实 现 梦 想 的 桥 梁。今 天,就 让 我 们 一 起 走 进 C 语 言 扫 雷 的 世 界,探 索 它 的 无 限 潜 力。

网页版扫雷游戏

代 码 全 貌 与 功 能 介 绍


         整 个 游 戏 项 目 由 三 个 主 要 文 件 构 成:game.h、test.c 和 game.c。这 种 多 文 件 的 架 构 设 计,有 助 于 将 不 同 功 能 模 块 分 离,提 高 代 码 的 可 读 性、可 维 护 性 与 可 扩 展 性 。

game.h

game.h 包 含 了 游 戏 所 需 的 头 文 件 引 用、常 量 定 义 以 及 函 数 声 明。

test.c

test.c 是游戏的主逻辑文件,负责处理用户输入和游戏流程的控制;

game.c

game.c 则实现了游戏的具体功能函数。

下 面 展 示完整代码

读 者 可 以 将 这 段 代 码 复 制 到 自 己 的 编 译 器 中 运 行:

game.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2//雷的数量
#define EASY_COUNT 10//实现扫雷游戏中的函数声明
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col);//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);//排查雷
void FindMine(char board[ROWS][COLS], char show[ROWS][COLS], int row, int col);

test.c

#include "game.h"
void menu()
{printf("**********************************\n");printf("**********    1.play     *********\n");printf("**********    0.exit     *********\n");printf("**********************************\n");
}void game()
{//需要存放布置雷的信息,需要存放排查出的雷的信息 -- 需要2个二维数组//排查时,防止坐标越界,要给数组行,列各加2char mine[ROWS][COLS] = { 0 };//布置好的雷的信息char show[ROWS][COLS] = { 0 };//排查出的雷的信息//1.初始化棋盘InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//2.打印棋盘//DisPlayBoard(mine, ROW, COL);DisPlayBoard(show, ROW, COL);//3.布置雷SetMine(mine, ROW, COL);//DisPlayBoard(mine, ROW, COL);//4.排查雷FindMine(mine, show, ROW, COL);
}
void test()
{srand((unsigned int)time(NULL));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);
}
int main()
{//实现游戏的主逻辑test();return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}
void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("----------扫雷----------\n");for (i = 0; i <= col; i++){if (i == 0){printf("  ");continue;}printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("----------扫雷----------\n");
}
void SetMine(char board[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){//1.产生随机的坐标1~9int x = rand() % row + 1;int y = rand() % col + 1;//2.在坐标中放置雷if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}
int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1]+ mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1]+ mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0');
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < (row * col - EASY_COUNT)){printf("请输入要排查的坐标:> ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] != '*'){printf("该坐标被排查过了\n");continue;}if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisPlayBoard(mine, ROW, COL);break;}else{//统计一下坐标int n = get_mine_count(mine, x, y);show[x][y] = n + '0';DisPlayBoard(show, ROW, COL);win++;}}else{printf("坐标非法,请重新输入\n");}}if (win == (row * col - EASY_COUNT)){printf("恭喜你,排雷成功\n");DisPlayBoard(mine, ROW, COL);}
}

扫雷游戏的功能说明


  • 使 用 控 制 台 实 现 经 典 的 扫 雷 游 戏
  • 游 戏 可 以 通 过 菜 单 实 现 继 续 玩 或 者 退 出 游 戏
  • 扫 雷 的 棋 盘 是 9 * 9 的 格 子
    默 认 随 机 布 置 10 个 雷
  • 可 以 排 查 雷
    如 果 位 置 不 是 雷,就 显 示 周 围 有 几 个 雷
    如 果 位 置 是 雷,就 炸 死 游 戏 结 束
    把 除 10 个 雷 之 外 的 所 有 非 雷 都 找 出 来,排 雷 成 功,游 戏 结 束

游 戏 效 果 展 示


游 戏 启 动 后,玩 家 看 到 简 洁 的 主 菜 单,选 择 1 开 始 游 戏,反 之,选 择 0 退 出 游 戏。

在这里插入图片描述

此 时,空 棋 盘 呈 现 眼 前,9 × 9 的 棋 盘 格 等 待 着 玩 家 进 行 排 查 雷。

在这里插入图片描述

         玩 家 输 入 下 棋 坐 标 后,程 序 会 验 证 坐 标 合 法 性。若 坐 标 合 法 且 对 应 位 置 没 有 雷,将 会 显 示 棋 盘 等 待 玩 家 下 一 次 排 查 雷;如 果 坐 标 是 雷,玩 家 会 收 到 “ 很 遗 憾 ,你 被 炸 死 了 ” 的 提 示; 若 坐 标 不 合 法 ,玩 家 会 收 到 “ 坐 标 非 法 ” 或 “ 该 坐 标 被 排 查 过 了” 的 提 示,需 重 新 输 入 坐 标。

在这里插入图片描述

         玩 家 不 断 根 据 游 戏 规 则 排 查 雷 直 到 雷 全 部 排 查 完 ,在 这 个 过 程 中,程 序 不 断 检 查 玩 家 输 入 的 坐 标 是 否 是 雷 以 及 雷 是 否 全 部 排 查 完。若 玩 家 把 雷 全 部 排 查 完,程 序 立 即 宣 告 “ 恭 喜 你,排 雷 成 功 ”,游 戏 结 束。

在这里插入图片描述


游 戏 代 码 详 解


game.h

#pragma once

防 止 重 复 包 含

         #pragma once 指 令 确 保 这 个 头 文 件 在 整 个 项 目 中 只 会 被 包 含 一 次。在 大 型 项 目 中,若 多 个 源 文 件 包 含 同 一 个 头 文 件,若 不 加 以 限 制,头 文 件 中 的 内 容 会 被 重 复 编 译,导 致 错 误。使 用 此 指 令 可 避 免 这 种 情 况。

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

引 入 标 准 库

         #include <stdio.h> 引 入 标 准 输 入 输 出 库,使 得 代 码 能 够 使 用 如 printf(用 于 输 出 信 息)和 scanf( 用 于 获 取 用 户 输 入)等 函 数。#include <stdlib.h> 引 入 标 准 库,为 rand 函 数( 随 机 布 置 雷 时 用 到 )等 提 供 支 持。

#define ROW 9
#define COL 9#define ROWS ROW + 2
#define COLS COL + 2//雷的数量
#define EASY_COUNT 10

常 量 定 义

         定 义 了 游 戏 棋 盘 的 大 小 ROW 和 COL 为 9,为 了 防 止 排 查 雷 时 数 组 越 界,定 义 了 ROWS 和 COLS 为 ROW + 2 和 COL + 2。同 时,还 定 义 了 初 级 难 度 下 雷 的 数 量 EASY_COUNT 为 10。

//实现扫雷游戏中的函数声明
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col);//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);//排查雷
void FindMine(char board[ROWS][COLS], char show[ROWS][COLS], int row, int col);

函 数 声 明

         声 明 了 四 个 关 键 函 数,分 别 是 初 始 化 棋 盘 函 数 InitBoard、打 印 棋 盘 函 数 DisPlayBoard、布 置 雷 函 数 SetMine 和 排 查 雷 函 数 FindMine。


test.c


#define _CRT_SECURE_NO_WARNINGS 1 

消 除 安 全 警 告

         用 于 消 除 因 使 用 了 一 些 不 安 全 的 函 数( 如 scanf)而 产 生 的 编 译 警 告。在 较 新 的 编 译 器 中,为 了 安 全 考 虑,对 一 些 函 数 的 使 用 会 给 出 警 告 , 通 过 定 义 这 个 宏 可 屏 蔽 这 些 警 告。

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

menu 函 数

         menu 函 数 用 于 打 印 游 戏 主 菜 单。通 过 printf 函 数 输 出 一 个 包 含“ 1.play ”(开 始 游 戏)和 “0.exit”( 退 出 游 戏 )选 项 的 菜 单,为 玩 家 提 供 操 作 选 择 界 面。

void game()
{//需要存放布置雷的信息,需要存放排查出的雷的信息 -- 需要2个二维数组//排查时,防止坐标越界,要给数组行,列各加2char mine[ROWS][COLS] = { 0 };//布置好的雷的信息char show[ROWS][COLS] = { 0 };//排查出的雷的信息//1.初始化棋盘InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//2.打印棋盘//DisPlayBoard(mine, ROW, COL);DisPlayBoard(show, ROW, COL);//3.布置雷SetMine(mine, ROW, COL);//DisPlayBoard(mine, ROW, COL);//4.排查雷FindMine(mine, show, ROW, COL);
}

game 函 数

         game 函 数 按 照 游 戏 的 逻 辑 顺 序,依 次 完 成 了 棋 盘 初 始 化、显 示 初 始 棋 盘、布 置 雷 以 及 让 玩 家 进 行 扫 雷 操 作 等 关 键 步 骤,是 实 现 整 个 扫 雷 游 戏 功 能 的 核 心 函 数。

void test()
{srand((unsigned int)time(NULL));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);
}

test 函 数

         test 函 数 通 过 srand 初 始 化 随 机 数 种 子,然 后 进 入 一 个 循 环,显 示 游 戏 菜 单,根 据 用 户 输 入 选 择 开 始 游 戏 或 退 出 游 戏。选 择 开 始 游 戏 时 调 用 game 函 数,game 函 数 依 次 调 用 上 述 功 能 函 数 来 完 成 游 戏 的 初 始 化、布 置 雷 和 排 查 雷 等 操 作。

int main(){test();return 0;}

main 函 数

main 函 数 作 为 程 序 入 口,调 用 test() 函 数 启 动 游 戏 流 程,最 后 return 0; 表 示 程 序 正 常 结 束 。


game.c


void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}

初 始 化 棋 盘( InitBoard 函 数 )

         该 函 数 接 受 棋 盘 数 组、行 数、列 数 和 初 始 化 字 符 作 为 参 数,通 过 两 层 循 环 将 棋 盘 数 组 的 每 个 元 素 初 始 化 为 指 定 字 符。

void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("----------扫雷----------\n");for (i = 0; i <= col; i++){if (i == 0){printf("  ");continue;}printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("----------扫雷----------\n");
}

打 印 棋 盘( DisPlayBoard 函 数 )

         此 函 数 用 于 在 控 制 台 打 印 棋 盘。先 打 印 棋 盘 的 表 头( 列 号 ),然 后 逐 行 打 印 棋 盘 的 内 容,包 括 行 号 和 每 个 格 子 的 字 符。

void SetMine(char board[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){//1.产生随机的坐标1~9int x = rand() % row + 1;int y = rand() % col + 1;//2.在坐标中放置雷if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}

布 置 雷( SetMine 函 数 )

         该 函 数 通 过 随 机 生 成 坐 标,并 在 相 应 位 置 放 置 雷( 将 字 符 设 置 为 ‘1’),直 到 雷 的 数 量 达 到 EASY_COUNT。

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < (row * col - EASY_COUNT)){printf("请输入要排查的坐标:> ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] != '*'){printf("该坐标被排查过了\n");continue;}if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisPlayBoard(mine, ROW, COL);break;}else{//统计一下坐标int n = get_mine_count(mine, x, y);show[x][y] = n + '0';DisPlayBoard(show, ROW, COL);win++;}}else{printf("坐标非法,请重新输入\n");}}if (win == (row * col - EASY_COUNT)){printf("恭喜你,排雷成功\n");DisPlayBoard(mine, ROW, COL);}
}

排 查 雷( FindMine 函 数 )

         玩 家 输 入 坐 标 后,函 数 会 检 查 坐 标 的 合 法 性 和 是 否 已 被 排 查 过 。如 果 坐 标 合 法 且 未 被 排 查,判 断 该 位 置 是 否 为 雷,若 是 则 游 戏 失 败,否 则 统 计 周 围 雷 的 数 量 并 显 示 在 显 示 棋 盘 上,直 到 所 有 非 雷 格 子 都 被 排 查 出 来 则 游 戏 胜 利。

在这里插入图片描述


总结


       通 过 这 个 简 单 的 扫 雷 游 戏,我 们 不 仅 实 践 了 C 语 言 中 的 基 本 语 法,如 变 量 定 义、循 环 结 构、条 件 判 断 和 函 数 调 用,还 学 习 了 如 何 使 用 随 机 数 生 成 函 数 和 输 入 输 出 函 数。希 望 这 篇 博 客 能 帮 助 你 更 好 地 理 解 C 语 言 编 程,激 发 你 在 编 程 世 界 中 不 断 探 索 和 创 新 的 热 情 。

相关文章:

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版 代 码 全 貌 与 功 能 介 绍扫雷游戏的功能说明游 戏 效 果 展 示游 戏 代 码 详 解game.htest.cgame.c 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 人 主…...

黑鲨外设2025春季新品发布会:全球首款“冷暖双控”鼠标亮相!

据可靠消息称&#xff0c;电竞外设领域的创新引领者——黑鲨外设&#xff0c;正式官宣将于2025年3月28日17:00召开主题为“究极体验&#xff0c;竞在其中”春季新品发布会。据悉&#xff0c;此次新品发布会将于黑鲨游戏外设和黑鲨游戏手机官方平台同步直播&#xff0c;&#xf…...

SpringBoot-MVC配置类与 Controller 的扫描

文章目录 前言一、自动配置类位置二、自动配置类解析2.1 WebMvcAutoConfiguration2.1.1 EnableWebMvcConfiguration 2.2 DispatcherServletAutoConfiguration 三、RequestMapping 的扫描过程3.1 RequestMappingHandlerMapping#afterPropertiesSet3.2 RequestMappingHandlerMapp…...

Nexus L2 L3基本配置

接口基本配置 N7K上所有端口默认处于shutdown状态; N5K上所有端口默认处于no shutdown状态(所有端口都是switchport) 默认所有接口都是三层route模式, 只有当线卡不支持三层的时候, 接口才会处于二层switchport模式 show run all | in “system default” 创建SVI口需要提前打…...

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境&#xff1a; asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE&#xff08;服务器发送事件&#xf…...

LCCI ESG 中英联合认证国际分析师适合的岗位

LCCI ESG中英联合认证国际分析师领域热门岗位大揭秘&#xff01;&#x1f30d; 大家好&#xff01;今天我们来探讨LCCI ESG中英联合认证国际分析师领域的热门岗位&#xff0c;看看是否有适合你的选择。 1️⃣ LCCI ESG中英联合认证国际分析师报告专员&#xff1a;主要负责编制…...

AGI成立的条件

AGI&#xff08;通用人工智能&#xff09;的成立需满足多项核心条件&#xff0c;这些条件既涵盖技术能力层面的突破&#xff0c;也涉及伦理与认知维度的考量。 一、通用性与多任务处理能力 跨领域泛化能力 AGI需具备类似人类的通用性&#xff0c;能够灵活切换不同领域&#xf…...

论文阅读:2023 EMNLP SeqXGPT: Sentence-level AI-generated text detection

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 SeqXGPT: Sentence-level AI-generated text detection https://aclanthology.org/2023.emnlp-main.73/ https://github.com/Jihuai-wpy/SeqXGPT https://www.doubao.com/…...

解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题

配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下&#xff0c;ConfigParser会将ini配置文件中的KEY&#xff0c;转为小写。 重载后配置类&#xff1a; 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…...

超图神经网络的详细解析与python示例

扩展传统集合关系至超边结构&#xff0c;处理高阶交互问题。 有关人工智能的数学基础之逻辑、集合论和模糊理论&#xff1a;看我文章人工智能的数学基础之逻辑、集合论和模糊理论-CSDN博客 一、超图神经网络概述 超图神经网络&#xff08;Hypergraph Neural Network&#xff0…...

机器视觉中图像的腐蚀和膨胀是什么意思?它能用来做什么?

​腐蚀&#xff08;Erosion&#xff09;​和膨胀&#xff08;Dilation&#xff09;​是两种基本的形态学操作&#xff0c;通常用于二值图像&#xff08;黑白图像&#xff09;的处理。它们是形态学图像处理的基础&#xff0c;广泛应用于图像分割、边缘检测、噪声去除等任务。 1…...

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁&#xff1f; 当 多个事务 在并发执行时&#xff0c;每个事务都 持有其他事务需要的锁&#xff0c;同时又在 等待对方释放锁&#xff0c;导致所有事务都无法继续执行的状态&#xff0c;称为 死锁&#xff08;Deadlock&#xff09;。 2. 死锁的四个必要…...

机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)

纠正自己的误区&#xff1a;机器学习是一个大范围&#xff0c;并不是一个小的方向&#xff0c;比如&#xff1a;线性回归预测、卷积神经网络和强化学都是机器学习算法在不同场景的应用。 机器学习最为关键的是要有数据&#xff0c;也就是数据集 名词解释&#xff1a;数据集中的…...

脚本语言 Lua

概念 Lua由标准C编写而成&#xff0c;几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用&#xff0c;也可以反过来调用C/C的函数&#xff0c;这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库&#xff0c;它是不适合作为开发独立应…...

Spring相关面试题

目录 Spring中常用的注解有哪些 Spring Boot中RestController和Controller注解有什么区别&#xff1f; Spring的注解requestBody和responseBody的区别 说说Bean和componentscan的区别 简单介绍一下springboot Spring Boot有哪些常用的Starter依赖&#xff1f; 说说sprin…...

Python学习- 数据结构类型

一. list list_data [10, 20, 30]列表&#xff1a;是一个不限制类型&#xff0c;可增加&#xff0c;修改&#xff0c;删除的数据类型 可操作的方法&#xff1a;append&#xff0c;extend, pop&#xff0c;del &#xff0c;insert append: 可向list最后一个位置添加一个元…...

Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks&#xff0c;结合 Azure Event Hubs/Kafka 摄入实时数据&#xff0c;通过 Delta Lake 实现 Exactly-Once 语义&#xff0c;实时欺诈检测&#xff08;流数据写入 Delta Lake&#xff0c;批处理模型实时更新&#xff0…...

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...

C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础 在C#中&#xff0c;文件操作主要通过System.IO命名空间中的类来实现&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件读取 1. **使用File.ReadAllText方法读取文件内容为字符串** …...

深入探究 JVM 堆的垃圾回收机制(一)— 判活

垃圾回收分为两步&#xff1a;1&#xff09;判定对象是否存活。2&#xff09;将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法&#xff1a;通过一系列“GC Roots”对象作为起始节点集&#xff0c;从这些节点开始&#xff0c;根据引用关系向下搜索&#xff0c;…...

SQL优化主要有哪些方式

对经常查询的区分度高的条件字段建立索引&#xff0c;也就是用在where条件里的字段。使用没有建立索引的非主键字段作为条件查询时&#xff0c;会进行全表扫描&#xff0c;因为这个字段的数据分步是不规律的&#xff0c;但是需要避免在频繁更新的字段上建立索引&#xff0c;因为…...

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…...

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…...

【C++】多态

目录 文章目录 前言 一、多态的概念 二、多态的定义及实现 三、重载/重写/隐藏的对比 四、纯虚函数和抽象类 五、多态的原理 总结 前言 本文主要讲述C中的多态&#xff0c;涉及的概念有虚函数、协变、纯虚函数、抽象类、虚表指针和虚函数表等。 一、多态的概念 多态分…...

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引&#xff0c;进入 Docker rpm 包下载的地址&#xff0c;根据自己系统的架构和具体版本选择对应的路径 这里使用 Index of linux/centos/7/x86_64/stable/ 版本&#xff0c;根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包 最终使用 yum …...

STT-MRAM CIM 赋能边缘 AI:高性能噪声鲁棒贝叶斯神经网络宏架构详解

引言 近年来&#xff0c;基于卷积神经网络&#xff08;CNN&#xff09;和视觉转换器&#xff08;ViT&#xff09;的存算一体&#xff08;CIM&#xff09;边缘AI设备因其低延迟、高能效、低成本等性能受到越来越广泛的关注。然而&#xff0c;当环境中存在噪声时&#xff08;例如…...

Performance Hub Active Report

Performance Hub 是 Oracle Enterprise Manager Database Express &#xff08;EM Express&#xff09; 中的一项功能&#xff0c;可提供给定时间范围内所有性能数据的新整合视图。用户可以使用 Database Express 页面顶部的时间选择器选择时间范围&#xff0c;详细信息选项卡将…...

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…...

【数学建模】TOPSIS法简介及应用

文章目录 TOPSIS法的基本原理TOPSIS法的基本步骤TOPSIS法的应用总结 在 多目标决策分析中&#xff0c;我们常常需要在多个选择中找到一个最优解。 TOPSIS&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;法是一个广泛应用的决策方法…...

优选算法训练篇08--力扣15.三数之和(难度中等)

目录 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 3.解法(排序双指针) 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &…...

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…...

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…...

解决stm32引脚如果选择输入模式

1. 输入模式分类 STM32的GPIO输入模式主要分为以下四种&#xff1a; 浮空输入&#xff08;Floating Input / Input Floating&#xff09; 上拉输入&#xff08;Input Pull-Up&#xff09; 下拉输入&#xff08;Input Pull-Down&#xff09; 模拟输入&#xff08;Analog Inp…...

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…...

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…...

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性&#xff0c;其中一个指标就是看崩溃率&#xff0c;如何降低崩溃率&#xff0c;就需要知道存在哪些崩溃&#xff0c;然后对症下药&#xff0c;解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢&#xff1f;又改如何解决…...

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面&#xff0c;结合PyCATIA库实现CATIA V5的自动化操作&#xff0c;提供两大核心功能&#xff1a; ​空几何体清理&#xff1a;智能识别并删除零件文档中的无内容几何体&#xff08;Bodies&#xff09;​空几何图形集清理&#xff1…...

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…...

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用&#xff0c;但是他必须要满足两个点&#xff1a; 1.被广泛的使用&#xff0c;并且部署在服务器中。 2.漏洞必须依赖在服务器中的配置。 并且漏洞补丁已经发布。 漏洞攻击方式&#xff1a; CVE-2025-24813 是 Apache Tomcat 部分 PUT…...

Spring常用注解汇总

1. IOC容器与Bean管理 注解说明示例Component通用注解&#xff0c;标记类为Spring Bean Component public class MyService { ... } Controller标记Web控制器&#xff08;应用在MVC的控制层&#xff09; Controller public class UserController { ... } Service标记业务逻辑层…...

【CXX-Qt】2.1.1 为 WebAssembly 构建

CXX-Qt 及其编写的应用程序可以编译为 WebAssembly&#xff0c;但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。 你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。 此外&#xff0c;如果尚未完成&#xff0c;请从此处克隆 emsdk git 仓库。 使用正确…...

MySql创建分区表并且按月分区

前言 在mysql中&#xff0c;按月份分区&#xff0c;再使用分区字段时间来查询数据将会很快&#xff0c;因为这样只需要扫描指定的分区。因此&#xff0c;在处理大量数据时&#xff0c;使用分区表是一个非常好的选择。 1、创建表&#xff0c;并使用RANGE COLUMNS分区 按创建时间…...

YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Flink实战教程从入门到精通(基础篇)(一)Flink简介

目录 一、Flink 二、谁在用Flink? 三、Flink特点 1、批流统一 2、性能卓越 3、规模计算 4、生态兼容性 5、高容错性 四、Flink介绍 1、无界数据 2、有界数据流 3、有状态流处理 五、Flink的发展历史 六、Flink的核心特点 1、高吞吐和低延迟 2、结果的准确性 …...

C/C++编程:Openssl使用 Windows安装包32和64位 RSA加密/解密、AES-GCM加密/解密以及ECDSA签名/验证示例

Openssl的头文件和库 C/C使用openssl&#xff0c;需要openssl的头文件和库&#xff0c;这些都在安装包里。从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包。 也可以从官网下载源码&#xff0c;再编译成安装包&#xff0…...

Es6新特性

1. let 和 const 概念 let&#xff1a;用于声明 块级作用域 的变量。const&#xff1a;用于声明 块级作用域 的常量&#xff0c;声明后不可重新赋值&#xff08;但可以修改对象的属性或数组的内容&#xff09;。 原理 JavaScript 在 ES5 中只有全局作用域和函数作用域&…...

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...