【Unity】简易而又实用的抽卡算法

news2024/11/16 7:40:49

1.两个数中任选一个(抛硬币)

基础版本:

public int RandomBetweenTwoNumber(int a,int b)
{
    float random = Random.Range(0,1f);
    return radom<=0.5f ? a : b ;
}

升级版本(支持概率调整):

/*
    pa表示“返回a的概率”

    pa 的值必须介于[0,1]闭区间
*/
public int RandomBetweenTwoNumber(int a,int b,float pa)
{
    //取一个介于0~1的随机值
    float random = Random.Range(0,1f);
    //如果random大于pa,则返回b,否则返回a
    return random > pa ? b : a ;
}

 

2.根据概率返回布尔值

/*
    p表示“出现true的概率”,
    因此必须介于0~1之间
*/
public bool RandomBool(float p)
{
    float random = Random.Range(0,1f);
    return random<=p;
}

 

3.抽卡算法

思路:建立一个概率列表(如图下所示),其概率值之和为 1 , 然后取一个0~1之间的随机值,看看它落入到概率列表中哪个区间。

b74eb2a3a5a9439aa257374bcd50821c.png

下面的代码就是一个示例,它会根据概率列表中的每个元素的概率情况返回其索引值。

public List<float> pList = new();

void Start()
{
    pList.Add(0.2f);
    pList.Add(0.3f);
    pList.Add(0.1f);
    pList.Add(0.1f);
    pList.Add(0.3f);

    Debug.Log(RandomIndex());
}

public int RandomIndex()
{
    float random = Random.Range(0,1f);
    float j = 0;
    for(int i = 0 ; i < pList.Count ; i++)
    {
        j += pList[i] ;
        if(random > j-pList[i] && random <= j)
            return i;
    }
}

这只是一个最简单的算法原型,你可以基于这个原型来做各种调整,或者是升级,以满足你的游戏项目的实际需求。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB精美绘图详解

目录 一、常见二维图形绘制 二、常见三维图形绘制 三、图形修饰与处理 四、动画制作 五、常见绘图种类与特点总结 总结 MATLAB提供了非常丰富的绘图功能&#xff0c;不仅可以用于二维、三维的基本图形绘制&#xff0c;还包括特殊图形、动画制作等多种功能。在本文中&#…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文&#xff08;网名wendux&#xff09;创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》&#xff0c;网址&#xff1a;第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

使用MATLAB进行动力学分析与可视化

目录 一、动力学与MATLAB概述 二、动力学系统的建模 1. 简谐振子 2. 单摆 三、动力学系统的仿真 1. 使用ode45求解简谐振子 2. 使用ode45求解单摆 四、动力学结果的可视化 1. 二维曲线图 2. 相空间图 3. 三维曲面图 4. 动画制作 五、复杂动力学系统的建模与仿真 1…

3、Hadoop部署

1、 Hadoop部署 1&#xff09;集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安装在同一台服务器 注意&#xff1a;ResourceManager也很消耗内存&#xff0c;不要和NameNode、SecondaryNameNode配置在同一台机器上。 hadoop102 hadoop103 hadoop104 HDFS…

SSM框架学习(二:SpringFramework实战指南)

目录 一、SpringFramework介绍 1.总体技术体系 &#xff08;1&#xff09;单一架构 &#xff08;2&#xff09; 分布式架构 2.Spring 和 SpringFramework概念 &#xff08;1&#xff09;广义的 Spring&#xff1a;Spring 技术栈&#xff08;全家桶&#xff09; &#xff…

【ARM】如何通过 KeilMDK 查看芯片的硬件信息

【更多软件使用问题请点击亿道电子官方网站】 文档目标&#xff1a;解决在开发过程中对于开发项目所使用的的芯片的参数查看的问题 问题场景&#xff1a;在项目开发过程中&#xff0c;经常需要对于芯片的时钟、寄存器或者一些硬件参数需要进行确认。大多数情况下是需要外部查找…

AI边缘控制器:重塑工业自动化与控制的新篇章

在智能制造和工业4.0的浪潮下&#xff0c;AI边缘控制器作为新一代智能控制设备&#xff0c;正逐步成为推动工业自动化与数字化转型的关键力量。这类基于x86架构的高性能IPC&#xff08;工业个人计算机&#xff09;形态产品&#xff0c;不仅继承了传统PC的可扩展性、开放性和可视…

Android SystemUI组件(06)导航栏创建分析虚拟按键

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧SystemBars分析中导航栏部分即可。 1 导航栏创建之makeStatusBarView 通过上一篇文章的…

闯关leetcode——9. Palindrome Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/palindrome-number/description/ 内容 Given an integer x, return true if x is a palindrome, and false otherwise. Example 1: Input: x 121 Output: true Explanation: 121 reads as 121 f…

Windows 10/11 Raspberry Pi PICO (RP2040) VScode开发环境搭建

Windows 10/11 Raspberry Pi PICO VScode开发环境搭建 概述下载树莓派官方开发环境配置工具安装开发环境 概述 下载树莓派官方开发环境配置工具 pico-setup-windows 点击"Download the lastest release" 下载文件为&#xff1a;《pico-setup-windows-x64-standalo…

Gz会员卡检索不到充值记录的处理方法

会员卡预收款查询报表&#xff08;9508&#xff09;中输入会员卡号后检索不到该卡的充值记录&#xff0c;在MemberCard表中检索到该会员卡&#xff0c;将PriorityID值改为0即可检索。 下图为检索后的结果。

ElasticSearch7.8下载、安装教程

文章目录 前言一、Windows安装ElasticSearch7.8二、Elasticsearch-head安装三、Kibana安装 前言 本文章演示elasticSearch7.8、elasticSearch-head(插件模式)、kibana的Windows下载、安装教程。安装前&#xff0c;请检查电脑是否已经安装好node环境和JDK环境。 一、Windows安装…

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理&#xff08;二&#xff09;&#xff1a;基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制&#xff08;ABAC 鉴权&#xff09;2.基于节点的访问控制&#xff08;node 鉴权&#xff09;2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…

tekton pipeline workspaces

tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…

AI基础 : Adversarial Search II 对抗性搜索

Non-deterministic Transitions AND-OR Search Trees • In deterministic environments在确定性环境中&#xff0c;分支仅由智能体的选择引起。, branching only occurs due to agent’s choice (OR Nodes) • In non-deterministic environments在非确定性环境中&#xff0c…

Linux多线程编程实战:深入探索互斥锁的艺术

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;Linux线程互斥&#x1f40f;进程线程间的互斥相关背景概念&#x1f98c;互斥锁mutex*下面是一个&#xff1a;操作共享变…

九、外观模式

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;有叫门面模式&#xff0c;它为一个复杂子系统提供一个简单的接口&#xff0c;隐藏系统的复杂性。通过使用外观模式&#xff0c;客户端可以更方便地和复杂的系统进行交互&#xff0c;而无需直接…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.4】RK3588网络摄像头推理后推流到RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 前言…

机器学习TFIDF的情感分类文章

一.中文分词 当读者使用Python爬取了中文数据集之后&#xff0c;首先需要对数据集进行中文分词处理。由于英文中的词与词之间是采用空格关联的&#xff0c;按照空格可以直接划分词组&#xff0c;所以不需要进行分词处理&#xff0c;而中文汉字之间是紧密相连的&#xff0c;并且…

HTML零基础教程(超详细)

一、什么是HTML HTML&#xff0c;全称超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件&#xff0c;这些元素包括标题、段…