RuneScape如何实现最大现金堆栈2.147亿美元

我从2005年至2009年在中学读过RuneScape,离开了一段时间,然后在今年年初返回。 玩游戏会带来怀旧之情,而事实上,RuneScape才使我进入了计算机科学领域。 过去,RuneScape是作为Java小程序运行的,它需要Java虚拟机(JVM)才能运行。 (Java是编译后的字节码,因此它需要JVM才能转换为要在机器上运行的机器代码。)

RuneScape是在256 kbps调制解调器普遍使用时建立的,而计算机的功能与当今的移动设备一样强大。 因此,对数据类型的大小限制被强制执行,以实现存储和游戏内计算的最佳效率。 尤其是32位计算机已获得了广泛的消费者市场份额。 因此,大多数机器都支持32位Java小程序。 这意味着对玩家存货或银行中的最大硬币数施加了硬性限制:2 3 -1-1或2,147,483,647(21.4亿)硬币。

这适用于任何可堆叠的物品,包括音符,符文,箭头和记号。

记住你的钱……

如何实现这一目标的数学非常有趣。 当您初次学习求和时,请回想一下小学。 两个数字相加非常简单。

对于连续的数字,同样的规则成立。 只需将数字按其位置值排列并计算总和即可。

但是,像36和49这样的数字呢? 我们计算出六和九(15)的总和,但是没有空间,因此我们必须结转一个并将其添加到数字的左列

概括地说,对于介于零到九之间的整数(包括零和九),请计算总和并结转最不适合当前数字列的最左边的数字 。 该数字系统被称为以10为基数。 要了解原因,请考虑第一个示例,即三个和一个的和。 任何整数都可以写成它本身与一个整数的乘积。 这就是所谓的身份法 。 所以,

现在,考虑36和49的总和。我们知道36加3大约是3的十倍。 49的总和遵循类似的模式。

一和十之间是什么关系? 十是十乘一。 实际上,每当我们在最右边的数字上加上零时,我们实际上就乘以十。

根据定义,

十个数字的右上角是指数。 他们告诉我们将执行此操作多少次才能达到一定效果 。 10²表示十乘以自身两次,得出乘积100。

所以可以写一个5792这样的数字

基数2

计算机以2为基数进行通话,即以0到1(含0和1)之间的整数表示。 它们遵循我们在10级系统中建立的相同模式。 考虑一和一的总和。 并非以您期望的方式编写。 我们可以填充最左边的位置值,同时保留各个数字的值。

一加一等于二,但是由于我们不能在基数2中代表多于一个,所以我们必须将一加二。

以2为底的0010可以表示为两个1之和。

就像在base-10中一样,base-2系统中的指数遵循以下定义:将执行此操作多少次才能获得一定结果。

因此,可以写一个像666这样的数字

在RuneScape中表示一个32位整数

在Java中,数字是一种数据类型。 特别是,整数(我们使用的数字)被分为某些原始数据类型,即短(16位),整数(32位)和长(64位)。 整数可以带符号或无符号,带符号的可以包含正数或负数,而无符号的可以包含正数和负数。 带符号的数字使用额外的一位来表示符号变化。 例如,(正)有符号整数1表示为

由于JVM中运行的Java applet是32位的,因此RuneScape中某些现金堆栈的最大32位值(整数)为

由于大多数玩家在游戏中还没有达到这个数量,因此Jagex目前没有整数集合来包含64位长。