项目实战-贪吃蛇大作战【补档】
这其实算是一个补档,因为这个项目是我在大一完成的,但是当时没有存档的习惯,今天翻以前代码的时候翻到了,于是乎补个档,以此怀念和志同道合的网友一起做项目的日子 ₍ᐢ ›̥̥̥ ༝ ‹̥̥̥ ᐢ₎♡
这里面我主要负责service层,网友负责view层
目录
1.需求文档
2.流程图
设计一
设计二
3.产品原型图
4.可行性分析
5.源代码
6.实战效果
编辑编辑7.心得
1.需求文档
2.流程图
processon是一个很好的流程图、思维导图等等的制作网站
设计一
设计二
权衡之后我们使用了第二种方案
3.产品原型图
这里我记得我们用的是墨刀
4.可行性分析
我找不到了ฅ(꒪˙꒳˙꒪ )ฅ ,不过肯定是可行性更大的doge
5.源代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#pragma warning(disable: 4996)
#define YH_W 20
#define YH_H 20
// 传入坐标, 将光标移动到指定坐标
int zhuozi;//自动生成食物参数
int score;//得分
char dir;//蛇的当前方向
int len;//蛇长(不计蛇头)
void gotoXY(int x, int y)
{COORD c;c.X = x - 1;c.Y = y - 1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void clear(int x, int y, int w, int h)
{for (int i = 0; i < h; i++) {gotoXY(x, y + i);for (int j = 0; j < w; j++) putchar(' ');}
}
void setPrintColor(int color) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
/*贪吃蛇:菜单界面:展示选项: 进入游戏 排行榜 设置 退出用户ws移动光标回车确认选项进入游戏: 进入游戏界面排行榜: 敬请期待设置: 敬请期待退出: 结束游戏游戏界面:展示地图: 展示蛇 地图用户wasd移动蛇定时移动移动后:撞墙/撞自己: 死亡 结束游戏吃到食物: 长度+1 食物消失 生成新的食物 移动一格空地: 移动一格
*/
//-----------------数据设计------------------
/*-1表示横墙-2表示竖墙-3 -4 -5 -6分别代表四个角落0表示空地1表示蛇2表示食物map[3][5] = 2// 坐标(3,5)是食物
*/
int map[YH_H][YH_W];
/*s[i][j]i表示第i节身体j表示坐标 0表示x坐标 1表示y坐标s[2][0] = 5; 第[2]节身体x坐标 = 5s[2][1] = 3; 第[2]节身体y坐标 = 3蛇的第[2]节身体 坐标是(5,3)
*/
int s[YH_H * YH_W][2];//s[0][0] s[0][1]
//-----------------数据设计------------------
//---------------view-------------------
/*功能:while(1)}{1. 展示界面2. 接收玩家输入如果是ws 移动光标如果是回车 执行对应选项进入游戏: 进入游戏界面排行榜: 敬请期待设置: 敬请期待退出: 结束游戏}参数: void返回值: void
*/
void menuView();
/*功能:打印暂停界面参数:void返回值:void
*/
void zt();
/*功能:1. 初始化游戏数据: 蛇(蛇身, 长度, 方向), 地图(墙,食物) service提供初始化函数while(1){2. 调用map_view函数 打印/绘制界面: 蛇, 地图 view3. 判断用户有没有输入{ viewkbhit()如果有:判断用户输入的类型 view方向: 修改方向: service提供修改方向函数判断这个方向 能不能修改如果能修改 蛇的方向=输入方向//空格: 暂停游戏: 展示暂停界面}4. 移动{判断:判断蛇头 前面的位置 是什么东西 service提供判断函数 判断移动后的情况可能是墙/蛇身, 食物, 空地,打印失败界面,退到主菜单或者退出程序执行:如果是墙/蛇身: 游戏结束如果是空地/食物: 游戏继续 service提供修改函数 修改移动后的数据情况空地: 正常移动一格食物: 蛇长度+1, 正常移动一格, 去掉食物,生成一个新的食物}}参数: void返回值: void
*/
void gameView();
/*
功能:打印/绘制界面: 蛇, 地图
参数:void
返回值:void
*/
void map_view();
//---------------view-------------------
//---------------service-------------------
//service提供初始化函数
/*地图 蛇长度 蛇位置地图:地图周围一圈墙(1)地图中间初始化为空地(0)蛇位置:地图下方左边朝右走蛇方向: d食物:在地图中随机生成一个食物注意 食物不能和蛇身重叠参数: void返回值: void*/
void init(void);
//service提供修改方向函数
/*注意: service不接收输入 不打印界面功能:1. 判断用户输入的方向 和蛇的方向 是否冲突如果冲突: 返回02. 蛇的方向 = 用户输入方向返回1参数:userInput: 用户输入的方向返回值:0表示方向修改失败1表示方向修改成功
*/
int updateDir(char userInput);
//service提供判断函数 判断蛇头前面是什么
/*功能:1. 根据蛇头坐标 和蛇的方向 获取蛇头前一格的坐标2. 判断 地图中 这个坐标是什么内容如果是墙: 返回0如果是食物: 返回13. (如果是空地)遍历蛇身 判断这个坐标 是否和蛇身重复如果是: 返回0如果不是 返回2参数: void返回值:0表示前面是蛇身/墙1表示前面是食物2表示前面是空地
*/
int before();
//service提供修改函数 蛇移动后的数据情况
/*功能:1. 判断是吃到食物的情况 还是空地的情况2. 如果是食物:1. 蛇长度+12. 去掉地图上的食物3. 随机生成新的食物4. 蛇移动一格3. 如果是空地:1. 蛇移动一格参数:result:1 表示吃到食物的数据修改2: 表示空地的数据修改返回值: void*/
void move(int result);
void food();
/*功能:打印设置 排行榜界面(拓展功能 暂未实现)参数:void返回值:void*/
void more();
/*功能:打印结束界面及得分 跳回主界面参数:void返回值:void
*/
void end();
//---------------service-------------------
int main() {menuView();
}
void more() {system("cls");gotoXY(60, 5);printf("敬请期待!");gotoXY(58, 8);system("pause");system("cls");menuView();
}
void menuView() {int userChoose = 0;while (1) {// ----------------- 打印界面 -----------------gotoXY(64, 3);printf("贪吃蛇");if (userChoose == 0) setPrintColor(0x6f);gotoXY(64, 6);printf("开始游戏");if (userChoose == 0) setPrintColor(0x0f);if (userChoose == 1) setPrintColor(0x6f);gotoXY(65, 9);printf("排行榜");if (userChoose == 1) setPrintColor(0x0f);if (userChoose == 2) setPrintColor(0x6f);gotoXY(64, 12);printf("游戏设置");if (userChoose == 2) setPrintColor(0x0f);if (userChoose == 3) setPrintColor(0x6f);gotoXY(64, 15);printf("退出游戏");if (userChoose == 3) setPrintColor(0x0f);gotoXY(56, 19);printf("制作团队:发际线与我作队");gotoXY(54, 23);printf("提示:1.WASD进行上下左右移动\n 2.长按WASD或者Esc可加速\n 3.游戏中按空格可以暂停\n ?.请自行眨眼补帧(狗头)");gotoXY(58, 21);printf("特别鸣谢:启动小学长");// ---------------- 接收用户输入 --------------char input = _getch();// -------------判断是方向上下还是回车------------switch (input) {case 'w':userChoose -= 1;if (userChoose == -1) userChoose = 3;break;case 's':userChoose = (userChoose + 1) % 4;break;case '\r':clear(3, 2, 80, 20);switch (userChoose) {case 0:gameView();break;case 1:more();break;case 2:more();break;case 3:exit(0);break;}clear(3, 2, 36, 20);break;}}
}
void gameView()
{score = 0;int k = 0;init();//初始化地图system("cls");gotoXY(0, 0);while (1){map_view();//打印地图k = 10000;while (k--){if (kbhit()){break;}}if (k > 0){char input = getch();if (input == 's' || input == 'w' || input == 'a' || input == 'd'){if (updateDir(input)) dir = input;//若输入有效,则更新方向}else if (input == ' ') zt();}//判断前面if (before() == 1 || before() == -1 || before() == -2) end();//前面是墙或蛇身,结束游戏else if (before() == 0) move(0);//前面是空地,蛇尾往前,蛇头往前else if (before() == 2)//前面是食物,吃掉食物{move(2);//蛇尾不变,蛇头往前}}
}
int updateDir(char userInput)
{int cha[2];if (len != 1){cha[0] = s[0][0] - s[1][0];cha[1] = s[0][1] - s[1][1];//蛇头反方向if (userInput == 'w' && cha[0] == 1 || userInput == 's' && cha[0] == -1 || userInput == 'a' && cha[1] == 1 || userInput == 'd' && cha[1] == -1){return 0;//枚举失败的情况}}return 1;
}
void map_view()
{system("cls");gotoXY(0, 0);for (int i = 0; i <= 19; i++){for (int j = 0; j <= 19; j++){if (i == s[0][0] && j == s[0][1]) {setPrintColor(6);//黄色printf(" ● ");}else {switch (map[i][j]) {case -1:setPrintColor(9);//浅蓝色printf("═══");break;case -2:setPrintColor(9);//浅蓝色printf(" ║ ");break;case -3:setPrintColor(9);//浅蓝色printf(" ╔═");break;case -4:setPrintColor(9);//浅蓝色printf("═╗ ");break;case -5:setPrintColor(9);//浅蓝色printf("═╝ ");break;case -6:setPrintColor(9);//浅蓝色printf(" ╚═");break;case 0:setPrintColor(7);//白色printf(" □ ");break;case 2:setPrintColor(2);//绿色printf(" ● ");break;case 1:setPrintColor(7);//白色printf(" ● ");break;}}}printf("\n");}gotoXY(0, 0);setPrintColor(7);printf("分数:%2d", score);
}
int before()
{switch (dir){case'w':return map[s[0][0] - 1][s[0][1]];case's':return map[s[0][0] + 1][s[0][1]];case'a':return map[s[0][0]][s[0][1] - 1];case'd':return map[s[0][0]][s[0][1] + 1];}
}
void food() {int food_x, food_y;while (1) {food_x = rand() % 18 + 1;food_y = rand() % 18 + 1;if (map[food_x][food_y] == 0) {map[food_x][food_y] = 2;break;}}
}
void end()
{system("cls");gotoXY(10, 10);printf("游戏结束,你的得分为%d分。 ", score);system("pause");system("cls");menuView();
}
void init() {len = 2;//蛇头不计入长度dir = 'd';//初始方向为右for (int i = 0; i <= 19; ++i){map[i][0] = -2;map[0][i] = -1;map[19][i] = -1;map[i][19] = -2;}map[0][0] = -3;map[0][19] = -4;map[19][19] = -5;map[19][0] = -6;for (int i = 1; i <= 18; ++i){for (int t = 1; t <= 18; ++t)map[i][t] = 0;}s[0][0] = 10;s[0][1] = 11;s[1][0] = 10;s[1][1] = 10;map[10][10] = 1;map[10][11] = 1;food();
}
void move(int result) {zhuozi %= 10;zhuozi++;if (zhuozi == 1) food();//每过一会刷出食物int xx = s[0][0], yy = s[0][1];switch (dir) {case 'w':xx = s[0][0] - 1;yy = s[0][1];break;case 'a':xx = s[0][0];yy = s[0][1] - 1;break;case 's':xx = s[0][0] + 1;yy = s[0][1];break;case 'd':xx = s[0][0];yy = s[0][1] + 1;break;}if (result == 2){++len;for (int i = len - 1; i >= 1; i--){s[i][0] = s[i - 1][0];s[i][1] = s[i - 1][1];}food();score += 20;}else{map[s[len - 1][0]][s[len - 1][1]] = 0;for (int i = len - 1; i >= 1; i--){s[i][0] = s[i - 1][0];s[i][1] = s[i - 1][1];}}s[0][0] = xx;s[0][1] = yy;map[xx][yy] = 1;
}
void zt()
{system("cls");gotoXY(10, 10);printf("游戏已暂停,按下空格解除暂停");while (1){char input_z = getch();if (input_z == ' ') break;}map_view();
}
6.实战效果

7.心得
虽然过去有段时间了,但是我还是想得起和有同样目标方向的网友做项目的开心,大一刚进入大学不久一切还不是很适应,但是和网友一起做项目让我不再那么紧张,也慢慢开始适应大学生活,虽然现在不经常联系了,但是人生每个阶段都有各个阶段你会遇到的人,重要的是一起变得更好,一起向远方
相关文章:
项目实战-贪吃蛇大作战【补档】
这其实算是一个补档,因为这个项目是我在大一完成的,但是当时没有存档的习惯,今天翻以前代码的时候翻到了,于是乎补个档,以此怀念和志同道合的网友一起做项目的日子 ₍ᐢ ›̥̥̥ ༝ ‹̥̥̥ ᐢ₎♡ 这里面我主要负责…...
power bi获取局域网内共享文件
power bi获取局域网内共享文件 需求: 数据源并不一定都是在本地,有可能在云端,也有可能在其他服务器,今天分享如果数据源在另外一台服务器,如何获取数据源的方法。 明确需求:需要通过PowerBI获取局域网中的…...
100%提升信号完整性:阻抗匹配在高速SerDes中的实践与影响
一个高速信号SerDes通道(例如PCIe、112G/224G-PAM4)包含了这些片段: 传输线连通孔(PTH or B/B via)连接器高速Cable锡球(Ball and Bump) 我们会希望所有的片段都可以有一致的阻抗,…...
第六章:Tool and LLM Integration
Chapter 6: Tool and LLM Integration 从执行流到工具集成:如何让AI“调用真实世界的技能”? 在上一章的执行流框架中,我们已经能让多个代理协作完成复杂任务。但你是否想过:如果用户要求“查询实时天气”或“打开网页搜索”&…...
prompt提示词编写技巧
为什么学习prompt编写 目的:通过prompt的编写,提升LLM输出相关性、准确性和多样性,并对模型输出的格式进行限制,满足我们的业务需求。 学过提示词工程的人:像“专业导演”,通过精准指令控制 AI 输出&#…...
Nginx配置SSL详解
文章目录 Nginx配置SSL详解1. SSL/TLS 基础知识2. 准备工作3. 获取SSL证书4. Nginx SSL配置步骤4.1 基础配置4.2 配置说明 5. 常见配置示例5.1 双向认证配置5.2 多域名SSL配置 6. 安全优化建议7. 故障排查总结参考资源下载验证的完整实例 Nginx配置SSL详解 1. SSL/TLS 基础知识…...
网络安全之红队LLM的大模型自动化越狱
前言 大型语言模型(LLMs)已成为现代机器学习的重要支柱,广泛应用于各个领域。通过对大规模数据的训练,这些模型掌握了多样化的技能,展现出强大的生成与理解能力。然而,由于训练数据中难以完全剔除有毒内容&…...
【技术笔记】通过Cadence Allegro创建一个PCB封装(以SOT23为例)
【技术笔记】通过Cadence Allegro创建一个PCB封装(以SOT23为例) 一、焊盘创建二、PCB封装设计三、丝印位号及标识添加 更多内容见专栏:【硬件设计遇到了不少问题】、【Cadence从原理图到PCB设计】 一、焊盘创建 首先要找到元器件的相关手册&…...
新环境注册为Jupyter 内核
1. 确认环境是否已注册为内核 在终端运行以下命令,查看所有已注册的内核: jupyter kernelspec list2. 为自定义环境注册内核 步骤 1:激活目标虚拟环境 conda activate your_env_name # 替换为你的环境名步骤 2:安装…...
[Spring] Seata详解
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
使用JDK的数据校验和Spring的自定义注解校验前端传递参数的两种方法
第一种:JDK的数据校验注解 PostMapping("/test")public String test(QueryParam param, RequestHeader(value "App_key") String App_key,RequestHeader(value "App_secret") String App_secret) throws IOException {param.setApp…...
JS错误处理的新方案 (不使用try-catch)
错误处理一直是JavaScript开发者需要认真对待的问题,传统的try-catch语法虽然简单直观,但在异步代码中使用时存在诸多限制。 try-catch的局限性 传统try-catch模式在现代JavaScript开发中面临的问题: 1. 异步错误捕获的缺陷 try-catch无法…...
前端实现商品放大镜效果(Vue3完整实现)
前端实现商品放大镜效果(Vue3完整实现) 前言 在电商类项目中,商品图片的细节展示至关重要。放大镜效果能显著提升用户体验,允许用户在不跳转页面的情况下查看高清细节。本文将基于Vue3实现一个高性能的放大镜组件,完整…...
redis未授权访问漏洞学习
一、Redis常见用途 1. Redis介绍 全称与起源: Redis全称Remote Dictionary Service(远程字典服务),最初由antirez在2009年开发,用于解决网站访问记录统计的性能问题。发展历程: 从最初仅支持列表功能的内存数据库,经过十余年发展已支持多种…...
阿里qiankun微服务搭建
主服务 chat vue3 ts vite 子服务 ppt react 18 vite 子服务 agent 主服务 npm i vite-plugin-qiankun mian.ts import ./style/base.scss import virtual:svg-icons-register import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue im…...
【CodeSprint】第二章-2.1 简单模拟
第二章 2.1 简单模拟 ✏️ 关于专栏:专栏用于记录 prepare for the coding test。 1. 简单模拟 简单模拟题目不需要复杂算法,直接按照题意一步步模拟即可。 1.1 促销计算 题目描述 某百货公司为了促销,采用购物打折的优惠方法:…...
Golang实现函数默认参数
golang原生不支持默认参数 在日常开发中,我们有时候需要使用默认设置,但有时候需要提供自定义设置 结构体/类,在Java我们可以使用无参、有参构造函数来实现,在PHP中我们也可以实现(如 public function xxx($isCName false, $sec…...
【Python Web开发】03-HTTP协议
文章目录 1. HTTP协议基础1.1 请求-响应模型1.2 请求方法1.3 请求和响应结构1.4 状态码 2. Python 发送 HTTP 请求2.1 urllib库2.2 requests 库 3. Python 构建 HTTP 服务器3.1 http.server模块3.2 Flask 框架 4. HTTP 协议的安全问题5. 缓存和性能优化 HTTP(Hypert…...
提高营销活动ROI:大数据驱动的精准决策
提高营销活动ROI:大数据驱动的精准决策 大家好,我是Echo_Wish。今天我们来聊聊如何通过大数据来提高营销活动的ROI(投资回报率)。我们都知道,随着市场的日益竞争,营销的成本不断增加,如何在这片红海中脱颖而出,不仅需要精准的营销策略,还需要依靠先进的技术,尤其是大…...
前端excel导出
在数据可视化和管理日益重要的今天,前端实现 Excel 导出功能已经成为众多项目中的刚需。 一、Excel 导出的常见场景 数据报表导出:在企业管理系统、数据分析平台中,用户经常需要将系统中的数据以 Excel 表格的形式导出,便于离…...
pymsql(SQL注入与防SQL注入)
SQL注入: import pymysql# 创建数据库连接 返回一个对象 conn pymysql.connect(host"localhost", # MySQL服务器地址 本地地址 127.0.0.1user"root", # 用户名 (账号)password"155480", # 密码database&qu…...
基于Springboot + vue + 爬虫实现的高考志愿智能推荐系统
项目描述 本系统包含管理员和学生两个角色。 管理员角色: 个人中心管理:管理员可以管理自己的个人信息。 高校信息管理:管理员可以查询、添加或删除高校信息,并查看高校详细信息。 学生管理:管理员可以查询、添加或…...
delphi使用sqlite3
看了一下delphi调用sqlite3最新版本的调用,网上说的都很片面,也没有完整的资料了。 我自己研究了一下,分享出来。 在调用demo中,官方也给了一个demo但是功能很少,没有参考价值。 1.定义: 首先把sqlite3…...
高压开关柜局部放电信号分析系统
高压开关柜局部放电信号分析系统 - 开发笔记 1. 项目概述 这个项目是我在2025年实现的高压开关柜局部放电信号分析系统,目的是通过采集分析局部放电信号,判断设备的工作状态和潜在故障。系统包含从信号模拟生成、特征提取、到深度学习模型训练的全流程…...
ai环境conda带torch整体迁移。
conda打包好的GPU版torch环境,其实很简单,就是conda装好的torch环境env整体打包,然后到新机器上再解压到env路径。 打开搭建好的环境,找自己路径,我默认的是这个。 cd/root/anaconda3/envs/ 然后整个文件夹打包。tar -…...
电价单位解析与用电设备耗电成本计算
一、电价单位 元/kWh 的解析 定义: 元/kWh 表示每千瓦时电能的费用,即1度电的价格。例如,若电价为0.5元/kWh,则使用1千瓦的电器1小时需支付0.5元。 电价构成: 中国销售电价由四部分组成: 上网电价…...
辛格迪客户案例 | 华道生物细胞治疗生产及追溯项目(CGTS)
01 华道(上海)生物医药有限公司:细胞治疗领域的创新先锋 华道(上海)生物医药有限公司(以下简称“华道生物”)是一家专注于细胞治疗技术研发与应用的创新型企业,尤其在CAR-T细胞免疫…...
C++(初阶)(十三)——继承
继承 继承概念示例 定义格式 继承和访问方式继承方式访问方式实例 继承类模板基类和派生类之间的转换继承中的作用域隐藏规则选择题 派生类的默认成员函数默认成员函数派生类中的实现 实现一个不能被继承的类继承与友元继承与静态成员多继承及其菱形继承问题虚继承多继承指针偏…...
S09-电机运行时间
感谢粉丝网友的支持,也欢迎你们的讨论和分享。昨天我们简单讨论了一下标准功能块的重要性,仅仅是拿电机块举了一个例子,有粉丝问能否把电机运行时间做到块里面,完善一下功能呢?那是绝对当然的100%可以的啊!…...
大语言模型(LLMs)微调技术总结
文章目录 全面总结当前大语言模型(LLM)微调技术1. 引言2. 为什么需要微调?3. 微调技术分类概览4. 各种微调技术详细介绍4.1 基础微调方法4.1.1 有监督微调(Supervised Fine-Tuning, SFT)4.1.2 全参数微调(F…...
python练习:求数字的阶乘
求数字的阶乘 eg:5的阶乘 54321 """ 求数字的阶乘 eg:5的阶乘 5*4*3*2*1 """count 1 for i in range(1,6):count count * iprint(count)运行结果:...
综合练习一
背景 某银行监管系统,需要设计并实现用户登入记录功能,每个用户登入系统时,系统自动记录登入用户的账户、登入时间、登入失败成功与否信息等,普通用户只能登入登出,管理员可以登入后查看日志及分析统计信息等。 用户…...
List--链表
一、链表 1.1 什么是List? 在C语言中,我们需要使用结构体struct来进行List(链表)的实现: struct ListNode {DataType Data;//DataType是任意类型的变量定义struct ListNode* next;//指向下一个结点的指针变量 }; 与之前的vect…...
SpeedyAutoLoot
SpeedyAutoLoot自动拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…...
编程日志4.23
栈的C顺序表实现 #include<iostream> #include<stdexcept> using namespace std; //模板声明,表明Stack类是一个通用的模板,可以用于存储任何类型的元素T template<typename T> //栈的声明 //Stack类的声明,表示一个栈的…...
打印所有字段
package com.volvo.midend.vehicle;import com.volvo.midend.vehicle.dto.out.vista.VistaDemoVO;import java.lang.reflect.Field;public class TestAllFiled {// 递归打印类的所有字段public static void printAllFields(Class<?> clazz, int indentLevel) {// 根据缩…...
4G FS800DTU上传图像至巴法云
目录 1 前言 2 准备工作 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 实现方案 4 巴法云平台账号创建与设备联网配置 4.1 创建账号 4.2 进入巴法云 4.3 获取联网参数 4.4 连接巴法云 5 拍照上传至巴法云 6 ESP32-CAM程序 7 总结 1 前言 巴法云(Bemfa Cloud)是一个…...
一键叠图工具
写了个拼图小工具 供大家测试 APP安卓的 测试下载 点击下载 百度网盘: https://pan.baidu.com/s/17B5KVIMMZlOAsF7a16KNug?pwd1234 提取码: 1234 拼图步骤:选图--选择变亮或变暗--滤镜发色 在正式开始之前,我们来定义几条原则先(熟悉…...
【OSG学习笔记】Day 12: 回调机制——动态更新场景
UpdateCallback 在OpenSceneGraph(OSG)里,UpdateCallback是用来动态更新场景的关键机制。 借助UpdateCallback,你能够实现节点的动画效果,像旋转、位移等。 NodeCallback osg::NodeCallback 是一个更通用的回调类&…...
快速上手Prism WPF 工程
1、Prism 介绍 定位: Prism 是 微软推出的框架,专为构建 模块化、可维护的复合式应用程序 设计,主要支持 WPF、Xamarin.Forms、UWP 等平台。核心功能: 模块化开发:将应用拆分为独立模块,…...
Dockerfile讲解与示例汇总
容器化技术已经成为应用开发和部署的标准方式,而Docker作为其中的佼佼者,以其轻量、高效、可移植的特性,深受开发者和运维人员的喜爱。本文将从实用角度出发,分享各类常用服务的Docker部署脚本与最佳实践,希望能帮助各位在容器化之路上少走弯路。 无论你是刚接触Docker的…...
MATLAB Coder代码生成(工业部署)——MATLAB技巧
MATLAB Coder是MATLAB生态中用于将算法代码转换为C/C++代码的核心工具,其生成的代码可直接部署到嵌入式硬件、工业控制器或企业级应用中,尤其在智能制造、物联网和实时控制领域具有广泛应用。 通过 MATLAB Coder,可以轻松地将 MATLAB 代码转换为高效的 C/C++ 代码,适用于嵌…...
3、CMake语法:制作和使用动态库和静态库
动态库和静态库 1 动态库和静态库简介1.1 静态库静态库文件类型.lib 文件.pdb 文件 1.2 动态库动态库文件类型 1.3 总结 2. 制作和使用静态库2.1 CMake指定输出的路径 2.2 VS利用第三方库编译静态库 2.3 使用静态库CMake链接静态库VS链接静态库 3. 制作和使用动态库3.1 CMake指…...
使用双端队列deque模拟栈stack
使用双端队列deque模拟栈stack 今天的内容有点简单~ 众所周知🤓👆,栈作为一个先进后出的结构,在计算机的世界确实能够发挥很多的作用。 而我们C祖师爷本贾尼是第一批把这个结构作为实实在在的容器做进std的人~ 那为了更好的了解…...
Spring系列四:AOP切面编程第三部分
🐋AOP-JoinPoint 1.通过JoinPoint可以获取到调用方法的签名 2.其他常用方法 ●代码实现 1.com.zzw.spring.aop.aspectj.SmartAnimalAspect Aspect //表示是一个切面类 Component //会将SmartAnimalAspect注入到容器 public class SmartAnimalAspect {//给Car配置…...
为什么使用ThreadLocal后要调用remove()方法呢?
ThreadLocalMap中包含一个数组,每个节点对应的类名叫Entry,这个类继承WeakReference<ThreadLocal<?>>,entry中有两个属性:key和value。特别需要指出的是key来自于父类中的threadLocal对象。 为了避免内存泄露&#…...
如何在idea 中写spark程序
在 IntelliJ IDEA 中编写 Spark 程序可以通过以下步骤进行: 1. **安装 Scala 插件**:首先确保已经安装了 Scala 插件。在 IntelliJ IDEA 中选择 File -> Settings -> Plugins -> 搜索 Scala -> 安装插件。 2. **创建新项目**:在…...
国产全兼容ADS131E08芯片---LHA7878
LHA787X是一系列多通道同步采样、24位A-∑模数转换器(ADC),内置可编程增益放大器(PGA)、内部基准和振荡器。凭借ADC的宽动态范围、可扩展数据传输速率以及内部故障检测监测计,LHA787X受到工业电源监测和保护以及测试和测量应用的青睐。真正的高阻抗输入支…...
免费LUT网站
FREE LUTs | Color Lookup Tables - Presetpro.com...
ICH CTD中ISS的关键内容与作用
1. ISS在ICH CTD中的定位 1.1 模块2与模块5的分工 1.1.1 模块2:整体总结的全局视角 模块2的2.7.4 ISS对所有临床研究安全性数据整合分析,涵盖I-III期试验,提供药物安全性全局视角,确保其在目标人群中的可接受性。 ISS需与风险控制措施关联,如说明书警示、风险管理计划,…...