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

基于C++实现的(控制台)双人俄罗斯方块小游戏

基于win32控制台应用程序的双人俄罗斯方块小游戏

1. 课题概述

1.1 课题目标和主要内容

使用visual studio 2015在win32控制台应用程序下用多线程实现双人同时进行俄罗斯方块的桌面游戏。最终将要完成的效果如图1.1所示,左右共两片工作区,也是游戏的主题;工作区旁边是记录当前游戏的级别和分数以及下一个掉落方块类别,根据工作区的不同各自通过键盘上的’w’, ’a’, ’ s’, ’d’和’↑’, ’←’, ’↓’, ’→’来控制方块的旋转、下移、左移、右移。

1.2 系统的主要功能

  • 能够同时两个人进行俄罗斯方块的对战
  • 每个俄罗斯方块具备基本的旋转、左移、右移和下落操作
  • 当其中一个俄罗斯方块消掉一行时,另一个俄罗斯方块将增加一行
  • 能够调节方块的下落速度
  • 能够保存玩家的历史最高分
  • 双重模式供玩家选择
  • 能够根据模式的不同播放音乐

2. 系统设计

2.1 系统总体框架

俄罗斯方块游戏的设计思路遵循MVC设计模式,该模式是一种使用Model-View-Controller(模型-视图-控制器)设计创建应用程序的模式。MVC框架图如图2.1所示。

  • Model(模型):表示应用程序的数据的存取
  • View(视图):显示界面,根据Model提供的不同数据,显示不同的界面
  • Controller(控制器):处理用户界面的交互,以及向模型发送更新的数据

MVC分层有助于管理复杂的应用程序,这样可以在一段时间内专门关注一个方面。同时也让应用程序的测试更加容易,并且简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

对于俄罗斯方块游戏来说,需要的设计步骤如下:

  • 设计Model。即工作区和方块的存储结构用来方便地存储数据
  • 设计View。即如何根据数据显示不同的界面
  • 设计Controller。即如何用键盘控制数据的变化

2.2 系统详细设计

2.2.1 模块划分图及描述

  • 初始化模块:完成初始界面的显示,以及数据的初始化。该函数封装了GetStdHandle()控制台API
  • 基本的显示函数:在制定位置显示指定颜色的字符串
BOOL textout(HANDLE hOutput,       //控制台句柄
int x,int y,         //显示坐标
WORD wColors[],      //显示颜色
int nColors,         //颜色数量
LPTSTR lpszString);  //显示的字符内容
  • 方块的显示和擦除:完成在指定位置显示/擦除指定颜色、形状的方块。
    • 方块显示:在x,y坐标位置显示长和宽为w和h,颜色为wColors的方块,方块形状由数组a表示,整型数p、q确定工作区位置。
void DrawBlocks(int a[], int w, int h, int x, int y, WORD wColors[], int nColors, int p, int q);
- 方块擦除:擦除x,y,y坐标位置的长和宽为w和h,颜色为wColors的方块,方块形状由数组a表示,整型数p、q确定工作区位置。
void ClearSquare(int a[], int w, int h, int x, int y, int p, int q);
  • 方块旋转:完成每种方块4个方向的旋转。
void Turn(int a[][4], int w, int h, int *x, int y, int MAP[][MAPW]);
  • 判断方块是否能够下落。
bool IsAvailable(int a[], int x, int y, int w, int h, int MAP[][MAPW]);
  • 方块满一行后消行:
  • 参数说明:在工作区row位置的一行,然后将该行之上的方块下移。其中数组m表示工作区,整型数p、q确定工作区位置。
void DeleteLine(int m[][MAPW], int row, int p, int q);
  • 给另一工作区加行:
    参数说明:在另一工作区,将工作区方块整体上移,然后在最底下一行位置增加一行。其中数组m表示工作区,整型数p、q确定工作区位置。
void AddLine(int m[][MAPW], int row, int p, int q);
  • 获取历史最高分:在程序所在路径下生成一个MaxScore.txt文件用来记录最高分。
int GetMaxScore();
  • 整体清屏
    参数说明:默认为0,整体清空界面,参数值为1时清空左工作区内方块,参数值为2时清空右工作区内的方块。
void ClearBlank(int i=0);
  • 判断重新开始还是结束游戏
void Change();
  • 游戏说明
void GameRule();
  • 难度选择
void LevelChoose();
  • 正经模式:按照要求实现双人多线程俄罗斯方块,能够完成相关操作。
void DoubleMode();
  • 地狱模式:改变背景音乐风格,随机确定初始下落位置。其他同正经模式。
void HeheMode();
  • 模式选择:选择正经模式、地狱模式、游戏说明还是退出游戏。
void ModeAlter();
  • 游戏结束:退出游戏时界面,打印GAME OVER。
void GameOver();
  • 线程处理函数:左右工作区分别对应线程0和线程1
DWORD WINAPI ThreadFunc0(LPVOID lpParam);
DWORD WINAPI ThreadFunc(LPVOID lpParam);

2.2.2 程序流程图及描述

按照面向过程的程序设计思想,自顶向下逐步求精的方法,首先需要根据基本功能进行模块划分,设计程序流程。俄罗斯方块游戏的基本的运行模式就是根据用户的按键,显示、翻转、移动不同的方块,因此其流程结构详见附件系统主流程1,系统主流程2,键盘处理流程。

2.2.3 存储结构、内存分配

  • 工作区数据存储:游戏中可划分出两个工作区,在两个区域内方块根据操作进行移动、翻转,用两个两位数组来分别保存两个工作区中每个位置信息点的信息。程序中选用工作区的大小是12*20,由常量MAPW和MAPH表示。
# define MAPW    12     //地图的宽度
# define MAPH    20     //地图的高度
  • 方块数据存储:俄罗斯方块有各种不同的形状,基本形状有7种,每一种形状采用4*4的数组来存储,分别使用三维数组来存储。
int b[7][4][4] = { { { 1 },{ 1,1,1 } },{ { 0,2 },{ 2,2,2 } },{ { 3,3 },{ 0,3,3 } },{ { 0,0,4 },{ 4,4,4 } },{ { 0,5,5 },{ 5,5 } },{ { 6,6,6,6 } },{ { 7,7 },{ 7,7 } }};

3. 程序运行结果分析

3.1 输出显示方式

用Drawblock函数更新方块,配合Textout函数更新游戏参数。

欢迎界面

模式选择界面

正经双人模式界面

3.2 操作流程

程序开始后,进入模式选择界面,可选择游戏说明,或直接开始游戏,模式选择完毕后则选择游戏难度,之后正式开始进行游戏。游戏中中可任意按空格键暂停游戏,或任意按回车键返回模式选择界面,以及按ESC键直接退出游戏。

3.3 运行效果

整体来说程序相对流畅,基本符合要求,各种界面之间切换自然,衔接不会有太多延迟感,音乐循环播放也没有感觉到切换的卡顿。

4. 总结

4.1 课题的难点和关键点

4.1.1 线程同步

本程序中使用双线程,难点在于两个线程彼此同步调配,二者均同从键盘按键中获取键值进行相应操作,为避免二者相互冲突,故引进临界区变量,当某一线程读取键值时锁定使另一线程暂时无法读取,由于临界区锁定时间短,人难以察觉出细微变化,故不影响整体速度。

4.1.2 增加一行

当某一玩家成功消行时,对另一玩家实行加行操作。难点在于重绘上移后的工作区。仿照消行函数Deleteline()的逻辑,从上向下逐行扫描更新。一方面,由于不同于消行操作,加行时的绘制起始点行列,须认真计算,否则容易出现绘制异常;另一方面,由于绘制方块函数Drawblock()逻辑原因,对于工作区内块值为零的区域,不执行任何操作,故当该工作区内方块整体上移时,对于某些排列空隙有可能上移后被填满,所以对于块值为零区域,单独调用Textout()函数在其区域打印char[3]的空格进行擦除,但同时造成下落方块的暂时消失,可以在循环按键处理中更新下落方块,使由于擦除造成的方块闪烁感消失。

本程序中设定由于对方消行所增加的新行不在具有能够消除的属性,故要增加两个整型数分别记录增加的行,方便在调用消行函数时消去的行不在惩罚增加行之中。

4.1.3 线程结束

当游戏一方到达顶部时,游戏结束后重新开始需要将原有两个线程结束掉,该问题属于程序设计逻辑问题。解决思想如下:

当一方到达顶部时,设置该对应线程结束完成标志ok1(如线程0)和设置结束另一线程命令标志flag2,之后return结束该线程;当另一线程接收结束命令flag2后,设置该对应线程结束完成标志ok2,之后return结束该线程;

当满足两个线程结束标志ok1和ok2时将退出当前游戏模式,跳转到模式选择模式。

4.2 本课题的评价

从最初的一个子线程配合一个主线程,到现在的两个相似的子线程交叉调度;

从最初的单人模式,到现在正经双人和地狱双人模式;从只能游戏一次,到现在任意返回、任意退出、无限循环开始。可以说本课题完成费了不少时间精力,完成相对满意。但程序仍有一些不够完善的地方,例如长条形方块下落时再不足旋转空间处旋转造成旋转出工作区外、两个线程对键盘读取键值的处理不够理想,容易引起漏键的现象。希望随着编程能力的提高将来能够更好地将这些问题优化好,做成一个成熟应用程序。

4.3 心得体会

通过此次程序设计实践,一方面,对win32控制台应用程序有了新的认识,不在仅局限使用标准输入输出流cin/cout进行界面交互,通过使用API 函数可以使编程编得更加方便,增加对句柄的熟悉度;另一方面,学习了多线程编程的一些相关概念及函数调用,在debug时明白了线程之间切换的大概过程,让我debug能力得到了很好地提高。对于此类程序编写时,要注意其可扩展性,方便后期修改,模块要区分的清除很重要的一点就是,程序设计时,一定要整理后各个模块以及各个模块间衔接的逻辑关系,尽可能地避免逻辑错误。

5. 参考文献

[1] 张宏,黄小诚. VC++语言多线程编程及其实现[J]. 科技信息(科学教研). 2008(07)

[2] 韩玉坤,介龙梅. 浅谈多线程编程技术及方法[J]. 电脑学习. 2010(02)

[3] 胡吉全,李明星. 基于VC多线程技术的优化设计方法[J]. 交通与计算机. 2005(02)

[4] 王日宏. 基于VC的Win32多线程同步问题[J]. 计算机系统应用. 2004(07)

相关文章:

基于C++实现的(控制台)双人俄罗斯方块小游戏

基于win32控制台应用程序的双人俄罗斯方块小游戏 1. 课题概述 1.1 课题目标和主要内容 使用visual studio 2015在win32控制台应用程序下用多线程实现双人同时进行俄罗斯方块的桌面游戏。最终将要完成的效果如图1.1所示,左右共两片工作区,也是游戏的主…...

Linux-虚拟环境

文章目录 一. 虚拟机二. 虚拟化软件三. VMware WorkStation四. 安装CentOS操作系统五. 在VMware中导入CentOS虚拟机六. 远程连接Linux系统1. Finalshell安装2. 虚拟机网络配置3. 连接到Linux系统 七. 虚拟机快照 一. 虚拟机 借助虚拟化技术,我们可以在系统中&#…...

uniapp开发微信小程序笔记10-触底加载

前言: 触底加载需求描述: 经常在做一些商品列表页的时候,如果一次性加载大量数据会影响性能,一般都是先加载10-20条,等用户向下滑到底部时再加载新的数据并渲染上去。 1、官方提供了一个API:onReachBott…...

Pytest --capture 参数详解:如何控制测试执行过程中的输出行为

--capture 选项用于控制测试用例执行过程中标准输出(stdout)和标准错误输出(stderr)的捕获行为。 --capture 的选项值: fd(默认) 捕获文件描述符级别的输出(stdout 和 stderr&#x…...

JMeter实时性能压测可视化系统整合

一、相关工具简介: JMeter、Grafana 和 InfluxDB 结合实时地收集、分析和展示性能测试数据,进行更好地理解系统的性能表现,及时发现潜在问题并进行优化。 1,JMeter 实时生成性能数据,并将其发送到 InfluxDB 进行存储。2,InfluxDB 存储的数据。3,通过Grafana的仪表板,用…...

USB 声卡全解析:提升音频体验的得力助手

在当今数字化的时代,音频领域的追求愈发多元。无论是热衷聆听高品质音乐的爱好者,还是在专业音频工作中精雕细琢的人士,亦或是在游戏世界里渴望极致音效沉浸的玩家,都始终在寻觅能让音频体验更上一层楼的妙法。而 USB 声卡&#x…...

GoReplay开源工具使用教程

目录 一、GoReplay环境搭建 1、Mac、Linux安装GoReplay环境 二、GoReplay录制与重播 1、搭建练习接口 2、录制命令 3、重播命令 三、GoReplay单个命令 1、常用命令 2、其他命令 3、命令示例 4、性能测试 5、正则表达式 四、gorepaly组合命令 1、组合命令实例 2、…...

Qt开源控件:图像刻度轴绘制器 (附源码)工程项目私信博主

项目简介 图像刻度轴绘制器是一款基于 Qt/C 开发的小型绘图工具,旨在实现带有刻度轴的图像显示功能。该项目主要用于需要精确测量或标注图像坐标的场景。通过左侧和底部的坐标轴以及对应的刻度线,可以直观地了解图像内容在二维空间中的位置。 项目功能 …...

下载 M3U8 格式的视频

要下载 M3U8 格式的视频(通常是 HLS 视频流),可以尝试以下几种方法: 方法 1:使用下载工具(推荐) 1. IDM(Internet Download Manager): 安装 IDM 并启用浏…...

Mock.js的学习使用

Mock.js 介绍:是一个功能强大的JavaScript库,用于模拟接口请求和生成随机数据。 作用: 帮助开发者独立开发、前后端分离快速原型验证测试异常情况增加单元测试的真实性 原理: 通过拦截XMLHttpRequest或fetch等网络请求&#x…...

在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主从复制

在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主从复制。以下是详细的步骤: 1. 使用 root 用户登录 确保你以 root 用户登录到 MySQL 服务器。 mysql -u root -p输入你的 root 密码后进入 MySQL 命令行界面。 2. 配置主服务器 (master) 2.1 编辑 my.…...

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎,以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程,逐步剖析 InnoDB 的关键概念,帮助您更好地理解和应用。 1. 逻辑存储结构 InnoDB 的数据…...

论文阅读——量子退火Experimental signature of programmable quantum annealing

摘要:量子退火是一种借助量子绝热演化解决复杂优化问题的通用策略。分析和数值证据均表明,在理想化的封闭系统条件下,量子退火可以胜过基于经典热化的算法(例如模拟退火)。当前设计的量子退火装置的退相干时间比绝热演…...

vue3项目最新eslint9+prettier+husky+stylelint+vscode配置

一、eslint9和prettier通用配置 安装必装插件 ESlint9.x pnpm add eslintlatest -DESlint配置 vue 规则 , typescript解析器 pnpm add eslint-plugin-vue typescript-eslint -DESlint配置 JavaScript 规则 pnpm add eslint/js -D配置所有全局变量 globals pnpm add globa…...

IOS ARKit进行图像识别

先讲一下基础控涧,资源的话可以留言,抽空我把它传到GitHub上,这里没写收积分,竟然充值才能下载,我下载也要充值,牛! ARSCNView 可以理解画布或者场景 1 配置 ARWorldTrackingConfiguration AR追…...

【el-table】表格后端排序

在需要排序的列添加属性 sortable,后端排序,需将sortable设置为custom 如果需要自定义轮转添加 sort-orders 属性,数组中的元素需为以下三者之一:ascending 表示升序,descending 表示降序,null 表示还原为原…...

【iOS】多线程基础

【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解,导致了项目中网络请求哪…...

c#控制台项目的发布+相对路径的用法(绝对路径下素材丢失问题)

发布 生成 ->发布选定任务 生成了以后,素材需要手动拖过去 文件相对路径...

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…...

网络安全框架及模型-PPDR模型

网络安全框架及模型-PPDR模型 概述: 为了有效应对不断变化的网络安全环境,人们意识到需要一种综合性的方法来管理和保护网络安全。因此,PPDR模型应运而生。它将策略、防护、检测和响应四个要素结合起来,提供了一个全面的框架来处理网络安全问题。 工作原理: PPDR模型的…...

Observability:如何在 Kubernetes pod 中轻松添加应用程序监控

作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook&#xff0…...

solana粗略的学习总结

最近在研究solana 的东西,简单做一下总结,很久没有写文章了。写的不对的地方欢迎评论区或者私信。及时改正。 Solana 架构概述 1.0 核心模块 Solana 的架构包括以下核心模块: Proof of History (PoH):通过时间排序机制优化交易…...

【Pip】完整的 `pip` 配置文件详解:优化你的包管理与环境设置

目录 引言一、pip 配置文件概述1.1 配置文件的位置1.2 配置文件的格式 二、常见配置选项详细说明2.1 设置镜像源2.2 配置超时时间2.3 配置下载缓存2.4 配置安装选项2.5 配置信任主机2.6 配置代理2.7 配置包安装路径 三、pip 配置文件的进阶设置3.1 包源(Channels&am…...

pytorch加载预训练权重失败

问题 给当前模型换了个开源的主干网络,并且删除了某些层后,但是发现预训练权重一直加载不上。strict为True时加载报错,strict为False时又什么都加载不上,然后不知道哪里出问题了。 解决 当strict为False时,load_sta…...

mysql线上问题集合

1、too many connections 连接数量太多,可以先通过以下命令先调整最大连接数,得以连接上mysql进行问题排查。 临时修改: gdb -p mysql进程id -ex "set max_connections500" -batchgdb:这是 GNU 调试器,用于…...

Kafka从指定时间开始消费数据

需求-故障定位:flink消费kafka数据,某个时间点漏数据 背景:kafka数据保留3天,如果第二天,发现程序异常导致数据丢失,需要定位是topic源头无数据,还是程序处理出现异常。 # 1, 设置一个新的gro…...

Android 俩个主题的不同之处 “Theme.AppCompat vs android:Theme.Material.Light.NoActionBar”

这两种主题继承关系有明显的不同,具体区别如下: Theme.AppCompat vs android:Theme.Material.Light.NoActionBar Theme.AppCompat 是 AppCompat 支持库提供的主题,目的是提供向后兼容的支持,适用于较早版本的 Android&#xff08…...

FreeSWITCH mod_conference 的按键会控

又是一篇命题作文 mod_conference 官方文档: https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_conference_3965534/ 英文不好的可以看中文: http://www.freeswitch.org.cn/books/references/1.7-mod_conference.html…...

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式:私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型(Matlab&#…...

LeetCode 64. 最小路径和(HOT100)

第一次错误代码&#xff1a; class Solution { public:int minPathSum(vector<vector<int>>& grid) {int dp[205][205] {0};int m grid.size(),n grid[0].size();for(int i 1 ;i<m;i){for(int j 1;j<n;j){dp[i][j] min(dp[i][j-1],dp[i-1][j])gr…...

SQL基础语法全解析(上篇)

一、基本概念 1. 数据库术语 数据库&#xff08;database&#xff09; - 保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。数据表&#xff08;table&#xff09; - 某种特定类型数据的结构化清单。模式&#xff08;schema&#xff09; - 关于数据库…...

蓝牙定位的MATLAB程序,四个锚点、三维空间

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念&#xff0c;并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...

vue3-Import declaration conflicts with local declaration of dayjs

同步发布于我的网站 &#x1f680; 概述错误描述 原代码报错信息 原因分析解决方案 修改导入语句使用泛型 代码解释总结 概述 在使用 Vue3 和 dayjs 时&#xff0c;可能会遇到一个常见的错误&#xff1a;“Import declaration conflicts with local declaration of ‘dayjs’…...

node.js基础学习-express框架-静态资源中间件express.static(十一)

前言 在 Node.js 应用中&#xff0c;静态资源是指那些不需要服务器动态处理&#xff0c;直接发送给客户端的文件。常见的静态资源包括 HTML 文件、CSS 样式表、JavaScript 脚本、图片&#xff08;如 JPEG、PNG 等&#xff09;、字体文件和音频、视频文件等。这些文件在服务器端…...

通过waitress启动flask应用

假设你有一个名为 app.py 的文件&#xff0c;app 是指你的 Flask 应用实例。并且在这个文件中创建了一个 Flask 应用实例&#xff0c;那么你可以这样导入和使用它。 示例结构 假设你的项目结构如下&#xff1a; my_flask_app/ │ ├── app.py ├── waitress_server.py └─…...

linux 获取公网流量 tcpdump + python + C++

前言 需求为&#xff0c;统计linux上得上下行公网流量&#xff0c;常规得命令如iftop 、sar、ifstat、nload等只能获取流量得大小&#xff0c;不能区分公私网&#xff0c;所以需要通过抓取网络包并排除私网段才能拿到公网流量。下面提供了一些有效得解决思路&#xff0c;提供了…...

【阅读记录-章节5】Build a Large Language Model (From Scratch)

目录 5. Pretraining on unlabeled data5.1 Evaluating generative text models5.1.1 Evaluating generative text models5.1.2 Calculating the text generation loss评估模型生成文本的质量 5.1.3 Calculating the training and validation set losses 5.2 Training an LLM5.…...

神经网络中的优化方法(一)

目录 1. 与纯优化的区别1.1 经验风险最小化1.2 代理损失函数1.3 批量算法和小批量算法 2. 神经网络中优化的挑战2.1 病态2.2 局部极小值2.3 高原、鞍点和其他平坦区域2.4 悬崖和梯度爆炸2.5 长期依赖2.6 非精确梯度2.7 局部和全局结构间的弱对应 3. 基本算法3.1 随机梯度下降(小…...

输出1~n中能被3整除,且至少有一位数字是5的所有整数.:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 输出1~n中能被3整除&#xff0c;且至少有一位数字是5的所有整数. 输入描述: 输入一行&#xff0c;包含一个整数n。(1 < n < 100000) 输出描述: 输出所有满足条件的数&#xff0c;以换…...

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术&#xff0c;它允许数据从一个数据库服务器&#xff08;主服务器&#xff09;自动同步到一个或多个数据库服务器&#xff08;从服务器&#xff09;。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…...

html+css网页设计 旅游 马林旅行社3个页面

htmlcss网页设计 旅游 马林旅行社3个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…...

【短视频矩阵系统==saas技术开发】

在数字媒体领域&#xff0c;短视频的崛起已不可忽视。对于商业实体而言&#xff0c;掌握如何通过短视频平台有效吸引潜在客户并提高转化率&#xff0c;已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制&#xff0c;以期为企业提供一套系统化的策略&#xf…...

MongoDB-BSON 协议与类型

前言&#xff1a; MongoDB 是一个高性能、无模式的 NoSQL 数据库&#xff0c;广泛应用于大数据处理和实时数据存储。作为一个数据库系统&#xff0c;MongoDB 的核心之一就是其使用的 BSON&#xff08;Binary JSON&#xff09;格式&#xff0c;它用于存储数据以及在客户端和数据…...

论文:IoU Loss for 2D/3D Object Detection

摘要&#xff1a;在2D/3D目标检测任务中&#xff0c;IoU (Intersection-over- Union)作为一种评价指标&#xff0c;被广泛用于评价不同探测器在测试阶段的性能。然而&#xff0c;在训练阶段&#xff0c;通常采用常见的距离损失(如L1或L2)作为损失函数&#xff0c;以最小化预测值…...

Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录

前言 我这边一直用的electron-vue框架是基于electron 21版本的&#xff0c;electron 29版本追加了很多新功能&#xff0c;但是这些新功能对开发者不友好&#xff0c;对electron构建出来的软件&#xff0c;使用者更安全&#xff0c;所以&#xff0c;我暂时不想研究electron 29版…...

信创改造 - Redis -》TongRDS 安装方式之单节点模式安装

安装前准备 安装 JDK 参考链接&#xff1a;安装 JDK 8【Linux】 语雀 创建用户 # 用户名可以自己起 useradd rds 上传安装包到服务器 单节点模式是由两个部署单元组成&#xff1a;1 个RDS 服务节点&#xff0c;1 个 RDS 中心节点。 上传到 /home/rds 用户文件夹&#xff0…...

经典C语言代码——part 19(链表)

【程序72】 题目&#xff1a;创建一个链表。 1.程序分析&#xff1a;            2.程序源代码&#xff1a; /*creat a list*/ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef str…...

【Leetcode 每日一题】52. N 皇后 II

问题背景 n n n 皇后问题 研究的是如何将 n n n 个皇后放置在 n n n \times n nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n n n&#xff0c;返回 n n n 皇后问题 不同的解决方案的数量。 数据约束 1 ≤ n ≤ 9 1 \le n \le 9 1≤n≤9 解题…...

Scala的模式匹配(1)

package hfdobject Test34_1 {def main(args: Array[String]): Unit {//从数据库中获得数据 1&#xff0c;2&#xff0c;3&#xff0c;4//要显示给用户的是 一等&#xff0c;二等&#xff0c;三等&#xff0c;四等val level1val levelTxtlevel match {case 1>"一等&q…...

Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)

Oracle 11G DataGuard GAP 修复 &#xff08;通过主库scn增备恢复&#xff09; 介绍 DG GAP 顾名思义就是&#xff1a;DG不同步&#xff0c;当备库不能接受到一个或多个主库的归档日志文件时候&#xff0c;就发生了 GAP。 那么&#xff0c;如果遇到GAP如何修复呢&#xff1f…...