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

嵌入式学习第十七天

C语言小项目:

制作俄罗斯方块小游戏(全部)

主函数部分

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include "boarder.h"
#include "block.h"int cury = 1;
int curx = 16;
int curboxno = 0;
int nextboxno = 0;
int score = 0;int SetScore(void)
{char tmpbuff[1024] = {0};sprintf(tmpbuff, "%06d", score);strncpy(&gBoarder[BOARDER_HEIGHT/4*3][BOARDER_WIDTH/6*5-3], tmpbuff, 6);return 0;
}void handler(int signo)
{int i = 0;ClearBox(gBox, cury, curx);if (CanMoveBox(gBox, cury+1, curx)){MoveBox(gBox, cury+1, curx);cury = cury+1;ShowMenu();}else {MoveBox(gBox, cury, curx);ShowMenu();//判断当前这4行是否都能被消除 for (i = 0; i < 4 && cury + i < BOARDER_HEIGHT-1; i++){if (CanClearLine(cury+i)){ClearLine(cury+i);score++;SetScore();ShowMenu();}}curboxno = nextboxno;CreateBox(gBox, nextboxno);ClearBox(gNextBox, BOARDER_HEIGHT/4-2, BOARDER_WIDTH/6*5-4);nextboxno = rand() % 19;CreateBox(gNextBox, nextboxno);MoveBox(gNextBox, BOARDER_HEIGHT/4-2, BOARDER_WIDTH/6*5-4);cury = 1;curx = 16;if (CanMoveBox(gBox, cury, curx)){MoveBox(gBox, cury, curx);ShowMenu();}else {exit(0);}}alarm(1);return;
}int main(void)
{char ch = 0;signal(SIGALRM, handler);system("stty -echo");system("stty -icanon min 1");srand(time(NULL));InitBoarder();SetBoarder();SetScore();curboxno = rand() % 19;CreateBox(gBox, curboxno);MoveBox(gBox, cury, curx);nextboxno = rand() % 19;CreateBox(gNextBox, nextboxno);MoveBox(gNextBox, BOARDER_HEIGHT/4-2, BOARDER_WIDTH/6*5-4);ShowMenu();alarm(1);while (1){ch = getchar();if ('a' == ch || 'A' == ch){ClearBox(gBox, cury, curx);if (CanMoveBox(gBox, cury, curx-2)){MoveBox(gBox, cury, curx-2);ShowMenu();curx -= 2;}else {MoveBox(gBox, cury, curx);ShowMenu();}}else if ('w' == ch || 'W' == ch){ClearBox(gBox, cury, curx);CreateBox(gChangeBox, GetChangeBoxNo(curboxno));if (CanMoveBox(gChangeBox, cury, curx)){MoveBox(gChangeBox, cury, curx);memcpy(gBox, gChangeBox, sizeof(gChangeBox));curboxno = GetChangeBoxNo(curboxno);ShowMenu();}else {MoveBox(gBox, cury, curx);ShowMenu();}}else if ('d' == ch || 'D' == ch){ClearBox(gBox, cury, curx);if (CanMoveBox(gBox, cury, curx+2)){MoveBox(gBox, cury, curx+2);ShowMenu();curx += 2;}else {MoveBox(gBox, cury, curx);ShowMenu();}}else if ('s' == ch || 'S' == ch){ClearBox(gBox, cury, curx);if (CanMoveBox(gBox, cury+1, curx)){MoveBox(gBox, cury+1, curx);ShowMenu();cury += 1;}else {MoveBox(gBox, cury, curx);ShowMenu();}}else if ('p' == ch || 'P' == ch){alarm(0);}else if ('c' == ch || 'C' == ch){alarm(1);}else if ('q' == ch){exit(0);}}return 0;
}

游戏界面部分

/* 游戏界面的宽度 */
#define BOARDER_WIDTH	60/* 游戏界面的高度 */
#define BOARDER_HEIGHT	30extern unsigned char gBoarder[BOARDER_HEIGHT][BOARDER_WIDTH];
extern int InitBoarder(void);
extern int SetBoarder(void);
extern int ShowMenu(void);
extern int CanClearLine(int LineNo);
extern int ClearLine(int LineNo);
/************************************************************ * 文件名:boarder.c * 功能: 游戏界面相关功能* ************************************************************/#include <stdio.h>
#include "boarder.h"/* 游戏界面的数据内容 */
unsigned char gBoarder[BOARDER_HEIGHT][BOARDER_WIDTH];/* 初始化游戏界面数组内容 */
int InitBoarder(void)
{int i = 0;int j = 0;//1.对所有的元素都赋值为' 'for (j = 0; j < BOARDER_HEIGHT; j++){for (i = 0; i < BOARDER_WIDTH; i++){gBoarder[j][i] = ' ';}}return 0;
}/* 游戏界面加入边框 */
int SetBoarder(void)
{int i = 0;int j = 0;//1.第一行赋值为'#'for (i = 0; i < BOARDER_WIDTH; i++){gBoarder[0][i] = '#';}//2.最后一行赋值为'#'for (i = 0; i < BOARDER_WIDTH; i++){gBoarder[BOARDER_HEIGHT-1][i] = '#';}//3.第一列赋值为'#'for (j = 0; j < BOARDER_HEIGHT; j++){gBoarder[j][0] = '#';gBoarder[j][1] = '#';}//4.最后一列赋值为'#'for (j = 0; j < BOARDER_HEIGHT; j++){gBoarder[j][BOARDER_WIDTH-1] = '#';gBoarder[j][BOARDER_WIDTH-2] = '#';}//5.界面中间选择一列赋值为'#',作为游戏区域和其他功能区域的划分for (j = 0; j < BOARDER_HEIGHT; j++){gBoarder[j][BOARDER_WIDTH/3*2-2] = '#';gBoarder[j][BOARDER_WIDTH/3*2-1] = '#';}//6.游戏界面有方一行的一部分赋值为'#'for (i = BOARDER_WIDTH/3*2; i < BOARDER_WIDTH; i++){gBoarder[BOARDER_HEIGHT/2][i] = '#';}return 0;
}/* 游戏界面的显示 */
int ShowMenu(void)
{int i = 0;int j = 0;printf("\033[2J");for (j = 0; j < BOARDER_HEIGHT; j++){for (i = 0; i < BOARDER_WIDTH; i++){if ('#' == gBoarder[j][i]){printf("\033[41;31m%c\033[0m", gBoarder[j][i]);}else if ('[' == gBoarder[j][i] || ']' == gBoarder[j][i]){printf("\033[40;30m%c\033[0m", gBoarder[j][i]);}else{printf("%c", gBoarder[j][i]);}}printf("\n");}return 0;
}int CanClearLine(int LineNo)
{int i = 0;for (i = 2; i < BOARDER_WIDTH/3*2-2; i++){if (' ' == gBoarder[LineNo][i]){return 0;}}return 1;
}int ClearLine(int LineNo)
{int i = 0;int j = 0;for (j = LineNo; j > 1; j--){for (i = 2; i < BOARDER_WIDTH/3*2-2; i++){gBoarder[j][i] = gBoarder[j-1][i];}}return 0;
}

功能部分

extern unsigned char gBox[4][8];
extern unsigned char gChangeBox[4][8];
extern unsigned char gNextBox[4][8];extern int InitBox(unsigned char (*pBox)[8]);
extern int CreateBox(unsigned char (*pBox)[8], int BoxNo);
extern int CanMoveBox(unsigned char (*pBox)[8], int y, int x);
extern int MoveBox(unsigned char (*pBox)[8], int y, int x);
extern int ClearBox(unsigned char (*pBox)[8], int y, int x);
extern int GetChangeBoxNo(int No);
/************************************************************ * 文件名:block.c * 功能: 俄罗斯方块功能* ************************************************************/#include <stdio.h>
#include "block.h"
#include "boarder.h"/* 俄罗斯方块数据 */
unsigned char gBox[4][8];/* 俄罗斯方块变形后数据 */
unsigned char gChangeBox[4][8];/* 俄罗斯方块下一个方块数据 */
unsigned char gNextBox[4][8];/* 初始化俄罗斯方块内容 */
int InitBox(unsigned char (*pBox)[8])
{int i = 0;int j = 0;for (j = 0; j < 4; j++){for (i = 0; i < 8; i++){pBox[j][i] = ' ';}}return 0;
}/* 俄罗斯方块变形规则 */
int GetChangeBoxNo(int No)
{int DstNo = -1;switch (No){case 0:DstNo = 1;break;case 1:DstNo = 0;break;case 2:DstNo = 2;break;case 3:DstNo = 4;break;case 4:DstNo = 5;break;case 5:DstNo = 6;break;case 6:DstNo = 3;break;case 7:DstNo = 8;break;case 8:DstNo = 9;break;case 9:DstNo = 10;break;case 10:DstNo = 7;break;case 11:DstNo = 12;break;case 12:DstNo = 13;break;case 13:DstNo = 14;break;case 14:DstNo = 11;break;case 15:DstNo = 16;break;case 16:DstNo = 15;break;case 17:DstNo = 18;break;case 18:DstNo = 17;break;}return DstNo;
}/* 创建俄罗斯方块图形 */
int CreateBox(unsigned char (*pBox)[8], int BoxNo)
{int i = 0;int j = 0;InitBox(pBox);if (0 == BoxNo){//[][][][]//////for (i = 0; i < 8; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}}else if (1 == BoxNo){//[]//[]//[]//[]for (j = 0; j < 4; j++){pBox[j][0] = '[';pBox[j][1] = ']';}}else if (2 == BoxNo){//[][]//[][]////for (j = 0; j < 2; j++){for (i = 0; i < 4; i++){pBox[j][i] = (i % 2 == 0 ? '[' : ']');}}}else if (3 == BoxNo){//[][]//[]//[]//for (j = 0; j < 3; j++){pBox[j][0] = '[';pBox[j][1] = ']';}pBox[0][2] = '[';pBox[0][3] = ']';}else if (4 == BoxNo){//[][][]  //    []////for (i = 0; i < 6; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}pBox[1][4] = '[';pBox[1][5] = ']';}else if (5 == BoxNo){//  []//  []//[][]//for (j = 0; j < 3; j++){pBox[j][2] = '[';pBox[j][3] = ']';}pBox[2][0] = '[';pBox[2][1] = ']';}else if (6 == BoxNo){//[]//[][][]////for (i = 0; i < 6; i++){pBox[1][i] = (0 == i % 2 ? '[' : ']');}pBox[0][0] = '[';pBox[0][1] = ']';}else if (7 == BoxNo){//[][]//  []//  []//for (j = 0; j < 3; j++){pBox[j][2] = '[';pBox[j][3] = ']';}pBox[0][0] = '[';pBox[0][1] = ']';}else if (8 == BoxNo){//    []//[][][] ////for (i = 0; i < 6; i++){pBox[1][i] = (0 == i % 2 ? '[' : ']');}pBox[0][4] = '[';pBox[0][5] = ']';}else if (9 == BoxNo){//[]//[]//[][]//for (j = 0; j < 3; j++){pBox[j][0] = '[';pBox[j][1] = ']';}pBox[2][2] = '[';pBox[2][3] = ']';}else if (10 == BoxNo){//[][][]//[]////for (i = 0; i < 6; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}pBox[1][0] = '[';pBox[1][1] = ']';}else if (11 == BoxNo){//  []//[][][]////for (i = 0; i < 6; i++){pBox[1][i] = (0 == i % 2 ? '[' : ']');}pBox[0][2] = '[';pBox[0][3] = ']';}else if (12 == BoxNo){//[]//[][]//[]//for (j = 0; j < 3; j++){pBox[j][0] = '[';pBox[j][1] = ']';}pBox[1][2] = '[';pBox[1][3] = ']';}else if (13 == BoxNo){//[][][]//  []////for (i = 0; i < 6; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}pBox[1][2] = '[';pBox[1][3] = ']';}else if (14 == BoxNo){//  []//[][]//  []//for (j = 0; j < 3; j++){pBox[j][2] = '[';pBox[j][3] = ']';}pBox[1][0] = '[';pBox[1][1] = ']';}else if (15 == BoxNo){//[]//[][]//  []//for (j = 0; j < 2; j++){pBox[j][0] = '[';pBox[j][1] = ']';}for (j = 1; j < 3; j++){pBox[j][2] = '[';pBox[j][3] = ']';}}else if (16 == BoxNo){//  [][]//[][]////for (i = 2; i < 6; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}for (i = 0; i < 4; i++){pBox[1][i] = (0 == i % 2 ? '[' : ']');}}else if (17 == BoxNo){//  []//[][]//[]//for (j = 1; j < 3; j++){pBox[j][0] = '[';pBox[j][1] = ']';}for (j = 0; j < 2; j++){pBox[j][2] = '[';pBox[j][3] = ']';}}else if (18 == BoxNo){//[][]//  [][]////for (i = 0; i < 4; i++){pBox[0][i] = (0 == i % 2 ? '[' : ']');}for (i = 2; i < 6; i++){pBox[1][i] = (0 == i % 2 ? '[' : ']');}}return 0;
}/* 判断俄罗斯方块是否能够移动到指定游戏界面位置 */
int CanMoveBox(unsigned char (*pBox)[8], int y, int x)
{int i = 0;int j = 0;for (j = 0; j < 4; j++){for (i = 0; i < 8; i++){if ((pBox[j][i] == '[' || pBox[j][i] == ']') && (gBoarder[j+y][i+x] != ' ')){return 0;}}}return 1;
}/* 将俄罗斯方块移动到游戏界面中 */
int MoveBox(unsigned char (*pBox)[8], int y, int x)
{int i = 0;int j = 0;for (j = 0; j < 4; j++){for (i = 0; i < 8; i++){if (pBox[j][i] == '[' || pBox[j][i] == ']'){gBoarder[j+y][i+x] = pBox[j][i];}}}return 0;
}/* 将俄罗斯方块从游戏界面中清除 */
int ClearBox(unsigned char (*pBox)[8], int y, int x)
{int i = 0;int j = 0;for (j = 0; j < 4; j++){for (i = 0; i < 8; i++){if (pBox[j][i] == '[' || pBox[j][i] == ']'){gBoarder[j+y][i+x] = ' ';}}}return 0;
}

完成后成果图:

相关文章:

嵌入式学习第十七天

C语言小项目&#xff1a; 制作俄罗斯方块小游戏&#xff08;全部&#xff09; 主函数部分 #include <stdio.h> #include <unistd.h> #include <string.h> #include <signal.h> #include <stdlib.h> #include <time.h> #include "b…...

使用Python的Turtle模块简单绘制烟花效果

import turtle import random# 初始化屏幕 screen turtle.Screen() screen.bgcolor("black") screen.title("烟花模拟")# 创建一个Turtle来绘制烟花 firework turtle.Turtle() firework.hideturtle() firework.speed(0) # 设置绘图速度为最快# 绘制烟花…...

数学建模-退火算法和遗传算法

退火算法和遗传算法 一&#xff0e;退火算法 退火算法Matlab程序如下&#xff1a; [W]xlsread(D:100个目标经度纬度);>> x[W(:,1)];>> y[W(:,2)];>> w[x y];;d1[70, 40];>> w[d1;w;d1]ww*pi/180;%角度化成弧度dzeros(102);%距离矩阵初始化for i1:101…...

Qt开源版 vs 商业版 详细比较!!!!

简单整理Qt开源版与商业版有哪些差别&#xff0c;仅供参考。 简单对比 开源版商业版许可证大部分采用对商业使用不友好的LGPLv3具备商业许可证保护代码专有许可证相关大部分模块使用LGPLv3和部分模块使用GPL组成仅第三方开源组件使用Qt的其他许可证Qt模块功能支持支持技术支持…...

华为云CodeArts Snap荣获信通院优秀大模型案例及两项荣誉证书

2024年1月25日&#xff0c;中国人工智能产业发展联盟智能化软件工程工作组&#xff08;AI for Software Engineering&#xff0c;下文简称AI4SE&#xff09;在京召开首届“AI4SE创新巡航”活动。在活动上&#xff0c;华为云大模型辅助系统测试代码生成荣获“2023AI4SE银弹优秀案…...

小程序的应用、页面、组件生命周期(超全版)

小程序生命周期 应用的生命周期 onLaunch: 初始化小程序完成时触发&#xff0c;且全局只触发一次&#xff1b; onShow: 小程序初始化完成&#xff08;启动&#xff09;或从后台切换到前台显示时触发&#xff1b; onHide: 小程序从前台切换到后台隐藏时触发&#xff08;如切换…...

TCP四次握手

TCP 协议在关闭连接时&#xff0c;需要进行四次挥手的过程&#xff0c;主要是为了确保客户端和服务器都能正确地关闭连接。 # 执行流程 四次挥手的具体流程如下&#xff1a; 客户端发送 FIN 包&#xff1a;客户端发送一个 FIN 包&#xff0c;其中 FIN 标识位为 1&#xff0c…...

EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?

利率主导的市场&#xff0c;将在2024年延续。目前&#xff0c;固收市场对于降息的定价&#xff0c;正通过利率传导至不同资产中。尽管市场迫切利用通胀去佐证降息&#xff0c;但各国央行仍囿于通胀目标的政策桎梏。政策和市场预期的博弈将继续牵动市场脉搏&#xff0c;引发价格…...

C++ Web 编程

什么是 CGI&#xff1f; 公共网关接口&#xff08;CGI&#xff09;&#xff0c;是一套标准&#xff0c;定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的&#xff0c;NCSA 定义 CGI 如下&#xff1a;公共网关接口&#xff08;CGI&…...

docker笔记整理

Docker 安装 添加yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin 启动docker systemctl start docker 查看docker状态 s…...

什么是git,怎样下载安装?

简介&#xff1a; 应用场景&#xff1a; 应用场景&#xff1a;团队企业开发 作用&#xff1a; 安装&#xff1a; 1.网址&#xff1a;Git - Downloads 很卡很慢 2.可以选择镜像网站下载&#xff08;推荐&#xff09; CNPM Binaries Mirror...

Camille-学习笔记-测试流程和测试设计

## 测试用例学习路线 startmindmap * 测试用例 ** 黑盒测试方法论 *** 等价类 *** 边界值 *** 因果图 *** 判定表 *** 场景法 *** 基于模型的测试 ** 白盒测试方法论 ** 测试用例基础概念 ** 测试用例设计 ** 面试测试用例设计 ** 常用测试策略与测试手段 endmindmap **测试用…...

【Python笔记-设计模式】建造者模式

一、说明 又称生成器&#xff0c;是一种创建型设计模式&#xff0c;使其能够分步骤创建复杂对象。允许使用相同的创建代码生成不同类型和形式的对象。 (一) 解决问题 对象的创建问题&#xff1a;当一个对象的构建过程复杂&#xff0c;且部分构建过程相互独立时&#xff0c;可…...

【LVGL源码移植】

LVGL源码移植 ■ LVGL源码移植一&#xff1a;下载LVGL源码二&#xff1a;修改LVGL文件夹1: 将这5个文件&#xff0c;复制到一个新的文件夹2: 简化文件&#xff0c;减少内存消耗&#xff08;去除不必要的文件&#xff09;3: 为了规范化&#xff0c;我们将下列文件进行重命名 三&…...

双非本科准备秋招(14.2)—— 进程与线程

进程 进程是运行着的程序&#xff0c;是程序在操作系统的一次执行过程&#xff0c;进程是操作系统分配资源的基本单位。 启动一个java程序&#xff0c;操作系统就会创建一个java进程 进程也可以看作一个程序的实例&#xff0c;大部分程序可以运行多个实例进程&#xff0c;比如记…...

数据结构和算法笔记5:堆和优先队列

今天来讲一下堆&#xff0c;在网上看到一个很好的文章&#xff0c;不过它实现堆是用Golang写的&#xff0c;我这里打算用C实现一下&#xff1a; Golang: Heap data structure 1. 基本概念 满二叉树&#xff08;二叉树每层节点都是满的&#xff09;&#xff1a; 完全二叉树&a…...

第8章 SpringBoot任务管理

学习目标 熟悉SpringBoot整合异步任务的实现 熟悉SpringBoot整合定时任务的实现 熟悉SpringBoot整合邮件任务的实现 开发web应用时,多数应用都具备任务调度功能。常见的任务包括异步任务,定时任务和发邮件任务。我们以数据库报表为例看看任务调度如何帮助改善系统设计。报表可…...

Qt5 基于OpenGL实现六轴机械臂三维仿真

需求 在Qt中通过OPenGL方式加载三维模型STL文件&#xff0c;然后将多个结构的STL文件类型的模型进行组装&#xff0c;形成6轴机械臂三维模型的显示&#xff0c;并且可以对每个关节进行关节角度的控制。 新建一个C类STLFileLoader&#xff0c;用于加载STL文件&#xff0c;并进…...

路由进阶

文章目录 1.路由的封装抽离2.声明式导航 - 导航链接3.声明式导航-两个类名自定义匹配的类名 4.声明式导航 - 跳转传参查询参数传参动态路传参两种传参方式的区别动态路由参数可选符 5.Vue路由 - 重定向6.Vue路由 - 4047.Vue路由 - 模式设置8.编程式导航 - 两种路由跳转9.编程式…...

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...