unity3d - 基于积分的游戏升级公式
问题描述
我知道对此有一个简单的答案——我只是想不出。我正在开发一个策略游戏,其中风景根据积分升级其水平。所以我正在寻找的结果是......
从点水平...
1 <= 1
2 <= 2,3
3 <= 4,5,6
4 <= 7,8,9,10
5 <= 11,12,13,14,15
你可以看到这是怎么回事。那么谁能提醒我这样做的简单公式,这样我就可以离开并羞愧地低下头?
解决方案
您描述的序列是一个非常知名的序列,称为三角数序列,由以下公式定义:
maxpt = (lv * (lv + 1)) / 2
在您的特定情况下,此公式给出了maxpt
您可以拥有并且仍处于 level的最大点数lv
。
但是你想要它的反面。您想知道lv
给定点数您将达到的水平pt
。这被称为数字的三角根(类似于平方根)。
您可以通过 Bhaskara 方程直接反转公式,但您需要做一些技巧来更正基本索引。这给出了:
lv = (int)((Math.sqrt(8 * (pt - 1) + 1) - 1) / 2) + 1
这适用于pt >= 1
. 只需返回 0 即可避免浮点错误(负数的pt = 0
平方根)。
不过,您肯定可以通过 Internet 找到更优雅的解决方案。
推荐阅读
- javascript - 如何在反应中从父组件调用子组件方法?
- python - 熊猫多索引样式突出显示一行
- excel - 使用 VBA 单击在线 excel 下载按钮
- php - "é" , "è" 和所有带有重音符号的字母在使用 PREG_REPLACE 的 PHP 函数中不显示
- three.js - 加载模型-threejs
- c++ - 在没有定义返回类型的函数中返回布尔值并将结果保存在 char 编译中而没有错误 - 为什么?
- hadoop - 从单个 csv 文件在 Hadoop Hive 中创建星型模式(维度和事实表)
- javascript - 这种方法对于发送请求 JS 是否正确?
- firebase - 使用云函数时的 getSignedUrl
- python - 如何确保 Redis 服务器上的这个 Python RQ 任务正在执行?