游戏是怎么从算法角度实现无限的啊

KERMITisNERK-avatar

KERMITisNERK

2020-04-13T00:10:08+00:00

最近玩了steam的点击英雄有感,许多类似这样刷刷刷的无上限游戏,里面的各种数据比如“伤害、金币”等等,从游戏的算法设计根源来说怎么实现无上限的呀,还是说不管数字再怎么大,一定会有最后的上限终点?
只有大学一点点的C基础,可能提了个蠢问题,见笑了。泥潭的程序员们可以通俗讲讲吗[s:ac:惊][s:ac:惊]
HolyFresh-avatar

HolyFresh

我不是程序员,但我觉得可以类似高八位,低八位,不够就再加几个八位,总能够的吧。
2bar-avatar

2bar

根据单位分开存储…然后显示的时候拼接?
rhyythm-avatar

rhyythm

总是有上限的吧,毕竟某个时刻总是占了一个特定位数那就有对应的上限
至于无限。。先不说常用浮点数的上限,真的不够了增加字节不就完了,8个字节不够16个字节鸭[s:ac:哭笑]现在内存那么大,多占点有啥关系,更别说一个数值能占多大内存[s:ac:哭笑]
zuko 2-avatar

zuko 2

只要这个数字需要处理,就一定有个上限,但是这个上限足够大,让玩家达不到,就可以理解为无上限了
Tr1m0rph3r-avatar

Tr1m0rph3r

没做过游戏开发,但玩过类似的,谈谈如果是我做该如何实现
1大部分此类游戏以1000为一个数量级往上进位,数字符号后期都是abcde这样规律生成的,所以如果用拼接存储,确实可以做到极大的数量级,这点没有问题
2数字不是真的无限,因为关卡是有限的。哪怕关卡也是无限,只要难度无限递增,最终也会有你练度全满,策略最优解也过不去的关
3数值计算上,舍去影响度较小的数值,减少运算消耗,只保留大的(比如如果现在数量级以10e12为单位,那么忽略一切数量级在10e6以下的影响)
丁丁-avatar

丁丁

应该是有两个变量来计算的吧,例如A和B,A达到最大值时B+1,A清零,然后你看见的是B+A的上限单位。(没做过,纯猜的)
KERMITisNERK-avatar

KERMITisNERK

[quote][pid=415136722,21387759,1]Reply[/pid] Post by [uid=35004659]sonnetsun[/uid] (2020-04-21 08:41):

没做过游戏开发,但玩过类似的,谈谈如果是我做该如何实现
1大部分此类游戏以1000为一个数量级往上进位,数字符号后期都是abcde这样规律生成的,所以如果用拼接存储,确实可以做到极大的数量级,这点没有问题
2数字不是真的无限,因为关卡是有限的。哪怕关卡也是无限,只要难度无限递增,最终也会有你练度全满,策略最优解也过不去的关
3数值计算上,舍去影响度较小的数值,减少运算消耗,只保留大的(比如如果现在数量级以10e12为单位,那么忽略一切数量级在10e6以下的影响)[/quote]严谨!
Hopp-avatar

Hopp

学过C语言的话,应该知道数字上限取决于使用的字节数,比如int是4个字节,正数上限是2的32次方

还有double这种8字节的,更有16字节的长整型,甚至可以用64位系统里直接用64字节的数字类型

所以上限是一定有的,问题在于能不能真的达到
lofi jae-avatar

lofi jae

金币可以要花钱的场合不花,伤害可以结算的时候直接即死
Inception-avatar

Inception

[quote][pid=415136722,21387759,1]Reply[/pid] Post by [uid=35004659]sonnetsun[/uid] (2020-04-21 08:41):

没做过游戏开发,但玩过类似的,谈谈如果是我做该如何实现
1大部分此类游戏以1000为一个数量级往上进位,数字符号后期都是abcde这样规律生成的,所以如果用拼接存储,确实可以做到极大的数量级,这点没有问题
2数字不是真的无限,因为关卡是有限的。哪怕关卡也是无限,只要难度无限递增,最终也会有你练度全满,策略最优解也过不去的关
3数值计算上,舍去影响度较小的数值,减少运算消耗,只保留大的(比如如果现在数量级以10e12为单位,那么忽略一切数量级在10e6以下的影响)[/quote]差不多就是这样。不过点击英雄这种放置游戏,数据确实是无限的。
TTV_CJStreams-avatar

TTV_CJStreams

我记得前几天看过一个数学科普叫生命游戏 应该就是靠这个原理生成的无限
Drews Wrld-avatar

Drews Wrld

高精度算法呗

比如一个数字的储存可以按每8位放在一个数组里。

不知道这是不是你要问的。
Narra-avatar

Narra

int64就可以 2的64次方 你刷到宇宙灭亡都刷不到
𝘽𝙡𝙞𝙩𝙯 𝙑𝙞𝙥𝙚𝙧-avatar

𝘽𝙡𝙞𝙩𝙯 𝙑𝙞𝙥𝙚𝙧

贴图呗,伤害数字随便贴几个夸张的实际可能一滴血[s:ac:茶]
JHobbsPlays-avatar

JHobbsPlays

不知道有什么数据有超过一个long long的容量需求..
Piggums-avatar

Piggums

[quote][pid=415136722,21387759,1]Reply[/pid] Post by [uid=35004659]sonnetsun[/uid] (2020-04-21 08:41):

没做过游戏开发,但玩过类似的,谈谈如果是我做该如何实现
1大部分此类游戏以1000为一个数量级往上进位,数字符号后期都是abcde这样规律生成的,所以如果用拼接存储,确实可以做到极大的数量级,这点没有问题
2数字不是真的无限,因为关卡是有限的。哪怕关卡也是无限,只要难度无限递增,最终也会有你练度全满,策略最优解也过不去的关
3数值计算上,舍去影响度较小的数值,减少运算消耗,只保留大的(比如如果现在数量级以10e12为单位,那么忽略一切数量级在10e6以下的影响)[/quote]伪程序员。
abcde这种算法你连大学作业都交不了。
十进制数据效率太低,都是转成二进制储存计算的,需要时候再转回十进制。
大学一道题就是几千位的数乘几千位的数,就是转成多级二进制数做的。如果用十进制计算,时空复杂度直接不及格。
rikka-avatar

rikka

用数组保存数字就行了,这样位数取决于你的内存上限。你搜一下c++大数模版就懂了
༺Pixel༻-avatar

༺Pixel༻

数字是有限的 字符串是无限的 但是这种低成本的游戏不可能无上限 程序员都懒得写新算法[s:ac:擦汗]
Hadez-avatar

Hadez

自己实现一个bigint,是经典算法基础题了
最简单的办法是使用字符串存储超大数字
然后实现一个字符串的各种数学计算
把思维限制在int究竟有多长,你就输了

另外,python的int就是自带大数字的,理论无上限