为什么游戏中的角色属性上限都是 99、999、9999?

图片:编纂瞎的本家儿页 Thinkraft,Obsessive-Compulsive-Personality-Disorde

纯真的设计选择罢了。属性上限常见的设心猿意马大致分为「2^n - 1」和「999」两个门户,前者方向以数据布局限制作为取值规模,后者方向以UI显示宽度作为取值规模,但并不停对,也稀有据和UI都撑持,只是程序逻辑做限制的例子。这两个从程序实现难度和机能上讲区别也不大,拍脑门随便选即可。现实作品中,9、15、31、63、99、127、255、999、9999、65535……之类的设计我都见过。

你们都拿FC超等马里奥说事,这游戏的数值系统其实很鬼畜的。

起首说命数,现实数据类型为尺度ubyte,也就是很诚恳地用一个字节(地址0x075A)来暗示0~255的数值规模。这是正常程序员最合适直觉的实现体例。

其出格之处在于,后台的现实数值是「不算当前这一命的备用命数」,而每次过关或死命后呈现黑屏显示给你看的数则是「包罗当前这一命的总命数」(80年月这两种暗示法都很风行,街机比力喜好用前一种体例表达残机数)。成果就要拿这个数值+1之后现场换算当作两位数显示。例如现实数值是0x02,显示出来的就是3。若是这里跨越0x63(99)之后就会溢出造当作显示犯错。

金币的数据布局则是令人匪夷所思的所见即所得设计。屏幕上显示的金币数目(00~99),十位数和个位数别离用0x07ED和0x07EE两个字节节制,这两个字节不仅决议了显示内容(CHR地址),并且还直接介入游戏逻辑计较(大要意思就是吃金币时先查抄个位数,<9就+1,>=9就归零且继续对十位数进行该计较)。若是你强行点窜这两个地址的值,例如改当作0x04、0x09,屏幕上就会显示你有49个金币。然后你再吃一个金币,就会酿成50。若是你把个位数锁当作超出规模的值,例如0x0A,则个位数会按照游戏CHR码表显示对应的字母、符号之类的内容,而且每次吃金币十位数城市响应进位。

每100金币奖命的逻辑跟这个显示无关,而是零丁还有一个字节节制,地址0x075E。每当吃到金币的时辰,这个地址的值也会跟着+1,随后立即查抄它是否==0x64(十进制100),若是知足前提就执行奖命同时清零。这个地址和上面说的显示用的两个地址是分隔自力运作的,注重,游戏程序并不是一切今后台这个埋没数值为准、显示时换算当作十进制;而是两者自力运作,别离累加。

近似地,该作中的残剩时候数字也并没有像正常做法那样利用尺度byte/ubyte记实,而是花了三个字节别离暗示百位、十位、个位,地址0x07F8、0x07F9、0x07FA,而且直接介入计较。若是你把前两个数值锁当作0x00、0x00就会造当作开局刹时秒杀。

分数同理,采用了0x07DD到0x07E2的六个字节别离来暗示六位数字(别的0x07D7到0x07DC则是高分记实),而且直接介入计较。稍有分歧的是这六位数字并不是从十万位到个位,而是从百万位到十位,此中百万位为0时埋没不画。至于个位数,呵呵,它底子就不是分数系统的一部门。个位那个0是直接画上去的图罢了。

一个1985年的游戏,为了暗示一个百万级的数字,可以顺手华侈6个字节(固然8位CPU这样处置或许反而更便利),所以问题底子不在省内存上。机械内存容量是心猿意马死的,不消白不消。至于后来呈现有存档的游戏,可操纵空间也到了KB级别,也无所谓255仍是999了。

至于为什么「良多游戏」选择利用「999」类而不是「2^n - 1」类数字作为数值上限设计,这就没法回覆了,具体到每个游戏上设计师都可能有本身的设法。在我看来这两个没有孰优孰劣,选哪个都可以有良多原因也可以没有原因

  • 发表于 2019-03-03 21:53
  • 阅读 ( 963 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具