抽卡概率实现
1. 题目:C++使用srand(seed)实现一个抽卡概率1. 题目描述实现一个抽卡逻辑。传入的是一个数组,数组的每一位的索引代表这个卡的类型,数字代表这个卡的概率,举例,如果[1,1,1] 数组,就代表0,1,2 三种卡的,抽中的概率分别是30% ,30% ,30%。 2. 基础知识1. srand()和 rand()srand() 函数用于设置随机数种子,rand() 函数用于生成随机数。srand() 函数需要传入一个种子,种子不同,生成的随机数也不同。如果这个种子是固定的话,则生成的随机数也会是固定的。所以我们需要使用时间作为种子,这样每次运行程序的时间都不同,生成的随机数也不同。srand(time(0)) 2. 概率计算:累积概率法实现概率计算:假设我们有 3 个卡片,概率分别为 30%、40%、30%,对应输入(3,4,3)。累积概率:卡片 0:30% ,权重3卡片 1:40% ,权重4卡片 2:30% ,权重3 如何实现卡片对应的概率:如果随机数在 1 到 3,抽中卡片 0。如果随机数在 4 到 7,抽中卡片 1。如果随机数在 8 到 10,抽中卡片 2. 随...
C++ 常用函数类型
1. 实现 C++ string 类1.1 C++ 中动态内存管理1.2 深拷贝和浅拷贝1.3 运算符重载1.4 移动语义与右值引用1.5 智能指针 参考链接 12345678910111213141516171819202122232425262728293031323334353637383940414243namespace W{class String {public: size_t capacity; char* _str; size_t _size; //构造函数 String(const char* str = "") { _size = strlen(str); capacity = _size; _str = new char[_size + 1]; // 多开一个空间,用来存放 '\\0' strcpy(_str, str); } //默认构造函数,浅拷贝,两个对象指向同一块内存 ...
Aura UE5 Learning
1. Create Project项目设置: 2. 类2.1 代码结构 AuraCharacter.cpp TObjectPtr:UE5 新增指针类型,相比 UObject* 更好地支持 GC 与序列化。 AuraCharacterBase:Character 基类,创建了 Weapon 的骨骼网格组件,同时声明了 Weapon 挂接点。 AuraCharacter:主角类。 AuraEnemy:敌人类的父类,继承自 AuraCharacter。 2.2 蓝图 BP_Aura_Character ABP_Aura_Character ABP_Enemy:敌人动画蓝图模板基类,不需要指定骨骼,不同敌人复用其中的动画播放速度逻辑。 ABP_Goblin_Slingshot:设置指定敌人持有 Slingshot 的动画。 ABP_Goblin_Spear:设置指定敌人持有 Spear 的动画。 3. 增强输入参考文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/configure-character-...
C++ 内存池
内存池 避免内存的分配开销和内存碎片。 示例: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110#include "iostream"#include <cstddef>#include <string>template<typename T,size_t PoolSize>class ObjectPool { //Slot结构体表示对象池中的一个槽 struct Slot { alignas(alignof(T)) char data[sizeof(T)]; // 存储对象的内存 ...
C++游戏中智能指针应用
智能指针是什么?智能指针对已有 C++ 指针的封装,方便内存管理。一般有三种智能指针,但使用中主要分为两类场景: unique_ptr:独占所有权,无法复制,只能 move()。 shared_ptr 和 weak_ptr:共享与弱引用配合使用。 shared_ptr:引用计数,多指针共享同一资源。 weak_ptr:弱引用,不增加引用计数,通过 lock() 安全访问对象。 基础使用12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513...
C++ 面试题
1. 基础语法与语言特性 C++ 中指针、引用、数组的区别与使用场景? 指针:可为空,可随时指向其他对象,使用 * 解引用,需手动管理生命周期。 引用:必须绑定对象,不能更换绑定对象,使用方式与普通变量一致,更安全。 数组:本质为连续内存,数组名可衍生为指向首元素的指针。 解释 virtual、override、final、const 的作用与用法。 什么是 RAII?它如何帮助资源管理? 简述 std::move 和 std::forward 的区别及使用场景。 2. 性能与内存优化2.1 游戏中出现卡顿的定位与优化 主线程阻塞(I/O、资源加载)。 GC/内存碎片化。 大量对象更新。 不合理的 Tick 顺序。 2.2 如何实现一个内存池?适合用在哪些场景?目的:减少频繁 new/delete 的开销与碎片。 维护一个连续的大内存数组。 使用空闲链表连接空闲块。 分配时从链表取块,释放时归还链表。 2.3 其他问题 请实现一个简单的对象池(Object Pool)模板类。 请说说 cache-friendly 编码风格的一些例子。
UE4渲染流程
非常好的系统了解UE渲染管线的视频讲解虚幻引擎中文技术直播 第1期 虚幻引擎4的实时渲染流程_哔哩哔哩_bilibili
UE5 Gameplay Camera
为什么使用 Gameplay Camera 模块化的设计。 能更简便地创建复杂的摄像机行为。 能创建自定义的过渡行为。
K-Avoiding 数组的最小总和
给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1: 输入:n = 5, k = 4输出:18解释:设若 k-avoiding 数组为 [1,2,4,5,6] ,其元素总和为 18 。可以证明不存在总和小于 18 的 k-avoiding 数组。示例 2: 输入:n = 2, k = 6输出:3解释:可以构造数组 [1,2] ,其元素总和为 3 。可以证明不存在总和小于 3 的 k-avoiding 数组。 提示: 1 <= n, k <= 50 解法一:暴力遍历从1开始构造正整数数组,判断新增元素是否满足条件。 1234567891011121314151617class Solution: def minimumSum(self, n: int, k: int) -> int: result = [] ...
LeetCode 624 - 数组列表中的最大距离
数组列表中的最大距离中等相关标签相关企业给定 m 个数组,每个数组都已经按照升序排好序了。 现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。 返回最大距离。 示例 1: 输入:[[1,2,3],[4,5],[1,2,3]]输出:4解释:一种得到答案 4 的方法是从第一个数组或者第三个数组中选择 1,同时从第二个数组中选择 5 。示例 2: 输入:arrays = [[1],[1]]输出:0 提示: m == arrays.length2 <= m <= 1051 <= arrays[i].length <= 500-104 <= arrays[i][j] <= 104arrays[i] 以 升序 排序。所有数组中最多有 105 个整数。 思路0:遍历每个数组,获取最大和最小值。遍历完后相减。 错原因:题目中要求不同数组。思路1: 遍历每个数组 ...