权重随机算法,解决游戏中一切可控随机(刷怪、掉宝、转盘、抽卡等等)

本文介绍了一种基于权重的随机算法,用于游戏中的怪物刷新,通过调整怪物的权重来控制其刷新概率。源码展示了如何初始化、添加和获取随机怪物的过程,该算法广泛应用于游戏开发中的各种随机事件控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如:游戏里有狮子、老虎、毒蛇、大象、鳄鱼5种怪物,每次刷怪都是按照概率随机。
权重算法可以随心所欲得控制每种怪物的刷新概率,做法如下:
1、设置每种怪物的权重,例如:
狮子5,老虎8,毒蛇12,大象3,鳄鱼17
2、计算权重之和
5+8+12+3+17 = 45
3、想象一把全长45的尺子,上面有5个刻度

image

5,13,25,28,45(每两个刻度之间的距离,刚好是权重)
4、随机一个0~45的数字,落在哪个刻度区间,就随出哪个怪物。
每种怪的刷新概率,完全与权重大小成正比。
5、改变怪物权重,可以随时改变他的刷新概率

image

例如:第二关想增加难度,就把老虎的权重从8增加到18
那么尺子就变长了,老虎的刻度也变长了,老虎刷新概率提高了。
以下是源码:

export class Weight {
    private items: any[] = [];
    private weights: number[] = [];
    private totalWeight: number = 0;
    add(item: any, weight: number) {
        let id = this.items.indexOf(item);
        if (id === -1) {
            weight = Math.max(weight, 0);
            this.items.push(item);
            this.weights.push(weight);
        } else {
            weight = Math.max(-this.weights[id], weight);
            this.weights[id] += weight;
        }
        this.totalWeight += weight;
    }

    get(): any {
        let rd = Math.random() * this.totalWeight;
        for (let i = 0, len = this.items.length; i < len; ++i) {
            if (rd < this.weights[i]) {
                return this.items[i];
            }
            rd -= this.weights[i];
        }
        return null;
    }
}

使用方法:
1、初始化权重
let wt = new Weight();
wt.add(‘狮子’,5);
wt.add(‘老虎’,8);
wt.add(‘毒蛇’,12);
wt.add(‘大象’,3);
wt.add(‘鳄鱼’,17);
2、根据权重,获取随机ID
let enemy = wt.get();
这个enemy就是随机刷出的怪物名称
3、要增加毒蛇的刷新概率
wt.add(‘毒蛇’,10); //这样毒蛇的权重 = 12+10 = 22
4、要减少鳄鱼的刷新概率
wt.add(‘鳄鱼’,-15); //这样鳄鱼的权重 = 17-15 = 2
权重算法适用于任何精准操控概率的随机场景,例如刷怪、掉宝、怪物AI等等。

### VSCode Java 开发配置和使用教程 #### 安装必要的扩展包 为了使 Visual Studio Code (VSCode) 成为强大的 Java 开发工具,在 VSCode 中需安装一系列针对 Java 的扩展来增强其功能[^1]。这些扩展可以从官方市场获取,包括但不限于用于支持基本语法高亮、调试等功能的核心 Java 扩展。 #### 设置 Java 环境变量 确保本地计算机上已正确设置了 JAVA_HOME 变量指向 JDK 安装路径,并且在系统的 PATH 环境变量中加入了 `%JAVA_HOME%\bin` 这样可以在任何地方通过命令行调用 `java` 命令验证是否成功设置好环境变量[^3]。 #### 配置 Maven 构建工具 对于基于 Maven 的项目来说,除了要单独下载并安装 Apache Maven 外,还需要按照特定的方式将其集成到 VSCode 当中以便能够顺利执行构建操作。这通常涉及到更新 settings.json 文件中的 maven.executable.path 字段指定 mvn.exe 的位置以及调整其他可能影响编译过程的参数[^2]。 #### 加载额外的功能插件 考虑到实际应用场景的需求,可以考虑加载更多实用性的第三方插件来辅助日常编码工作。比如 MyBatis 相关的数据访问层框架的支持可以通过安装像 "vsc-mybatis" 或者 "mybatisX" 类似的插件实现;而 Spring Boot 应用程序则依赖于专门定制过的模板和其他资源文件来进行快速原型设计与迭代开发。 #### 掌握常用快捷方式 熟悉一些常用的编辑器内部定义好的键盘组合可以帮助提高工作效率。例如 F5 是用来触发内置调试器运行当前活动文档作为启动项的选择之一;另外还可以利用 Ctrl+Shift+B 来发起一次完整的构建流程等等。 ```json { "maven.executable.path": "C:\\Program Files\\Apache\\Maven\\bin\\mvn.cmd" } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值