编程游戏开发中,概率机制可参考 PRD公式

2023-12-21 04:32

本文主要是介绍编程游戏开发中,概率机制可参考 PRD公式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说到概率,有一个特别经典的问题:存在三个盒子,其中一个盒子中存放着大奖。现在你随机挑选了其中一个,中奖的概率是1/3。接着主持人打开了剩下2个盒子中的一个,没有中奖。问给你一次重选择的机会,你会怎么做?维持原来的选择 or 放弃原来的选择。

 

1. 随机

 

随机是我们进行概率推导的基石之一。我们的统计学中经常说一枚硬币抛正面的概率是50%,就是基于每次抛硬币都是随机事件。

插播一条笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。”

听着没毛病,但是却说出了“真随机” 和 “伪随机”的区别了。

 

   

真随机

在真随机中,每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变。拿上面的笑话举例,每次手术的成功率都应该是1%,这种相互独立的,不受其他事件的发生而影响,才是真随机。

 

   

伪随机

我们程序员都知道,程序给定条件,得到的是确定的结果。所以我们编写的Math.random()肯定不是真随机,而是伪随机。代码底下无秘密,我们看下自带random函数的随机数产生的逻辑。

图1 random函数计算源码

可以看出,如果给定相同的seed,random方法将返回相同的随机数。所以程序只是在生成近似随机结果

洗牌算法

各大音乐播放器中的“随机播放”之中。在随机播放时,如果采用真随机,会导致一首歌无论如何都播放不出,或是同一首歌连续播放数次。为了解决这个问题,播放器采用的解决方案即是洗牌算法:将一个包含所有歌曲的数组像洗牌一样打乱,然后依次播放这个乱序数组。

 

在游戏中,会有概率暴击的设计。比如某个角色的大招有35%的概率使出暴击,按照真随机,那么连续暴击的概率 0.35X0.35=12.25%。
过高的暴击概率对严谨的竞技赛事来说,无疑是极其不公平的。因为一次人品爆发秒掉对方核心,可能直接决定赛事的成败,而缺少了竞技的成分。
因此游戏公司大都遵循 PRD机制PRD公式如下:

图2 PRD公式

其中,C是一个小于1的常数(算法复杂,可以查表),N表示尝试次数,P为概率。公式表明的意义是:从事件发生起,每次不成功的尝试都会增加1个固定值。 当触发暴击后,概率N重新计算。

图3 预先算好的C值表

从表中,可以查到35%概率,使用的C约为16%,因此可以算的p(7)=16x7%=112%, 即7次必出现1次暴击。同时上来即两次暴击的概率为 0.16x0.16 = 2.56%,大大降低了人品的干预。

 

 

 

 

这篇关于编程游戏开发中,概率机制可参考 PRD公式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518648

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自