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

相关文章

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller