编程游戏开发中,概率机制可参考 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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

详解Spring中REQUIRED事务的回滚机制详解

《详解Spring中REQUIRED事务的回滚机制详解》在Spring的事务管理中,REQUIRED是最常用也是默认的事务传播属性,本文就来详细的介绍一下Spring中REQUIRED事务的回滚机制,... 目录1. REQUIRED 的定义2. REQUIRED 下的回滚机制2.1 异常触发回滚2.2 回

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版