各种点击/放置类游戏的大数字处理有甚特别技巧吗?

0 条评论


  • 1

    大伟艰苦的游戏行业从业者

    大伟 赞同

    貌似很多都是靠改变单位来处理的

    发布于 2017-10-27 18:24:40 0 条评论


  • 1

    淡观天下神经刀

    猫头鹰 赞同

    来自@和谐小小‍ ,我就说自己实现感觉太粗糙。

    ……大数运算早有标准解法和各种库的,像是java和.net库里都带了大数的数据类型,C++也有大量第三方库,用不着自己粗糙实现。标准的实现方法是一个int数组,每一个int存放大数的32bit,这样就是无限bit的数了。

    后来我又想了想,用的话就是直接用,大概实现就是我那么个实现,不过确实像原答案那样实在是浪费内存空间,按照和谐小小的说法确实是合理的多的。

    刚才又看了下java下的biginteger包,发现还应该把变量合并,合并成想小小说的数组,这样的话在调用的时候函数就只用输入两个形参,要方便很多。

    我吸收知识的地址:http://blog.csdn.net/qq_23191031/article/details/50606577

    以下是原答案:

    --------------------------------------------------------------------------------------------------------------------------------

    参考假面龙骑士龙骑士无面者(卧槽我是怎么看错的···)的答案,我想了想,想了一个比较粗糙的解决方法。

    以C语言为例:

            把数字分段,每四位数字用一个变量存储,如123456789000这个12位的数字(我就不举太长的了,反正就是这个思路),1234,5678,9000三个数字,运算时采取正常运算+满进一的方法(加减法好处理,不过乘除法也不难,以整个数字*3为例,由于每个变量实际存储的大小远小于能存储的最大值,直接*3,然后用结果数对整除10000,再将得数与高位变量数值相加),在输出时用‘itoa()’函数,得到“1234”,“5678”,“9000”三个字符串,再用strcat()函数输出即可。

            简单的写下:

     void Print_Big_Long(int a,int b,int c)                    //用来转化为字符串+输出

     {                                                                           //可以根据需要调整为返回指针

             printf(%s,strcat(strcat(itoa(a),itoa(b)),itoa(c)));

     }

    int *add(int a,int b,int c,int add)                             //做加法的函数(粗糙版)

    {

            c+=add%pow(10,4);

            b+=add%pow(10,8)/pow(10,4);

            a+=add/pow(10,8);

            if(c>9999)b+=c/pow(10,4),c=c%pow(10,4);   //超范围时向高位增加

            if(b>9999)a+=b/pow(10,4),b=b%pow(10,4);

            //我没写a超范围怎么办,理论上来说需要添加一个增加变量的函数,但是我懒得写了

    }

    同理减法。乘法如果有之前有提到,不过一般放置挂机类不会出乘法吧?(原谅我没玩过这种游戏),除法的话要更麻烦一些,需要把除数分段,然后优先除高位,若商取余大于0即是可以除,不过考虑到游戏类型,应该也是不使用的,就不详细说了,要是这种游戏是有这个需要的就私信我。

    更新于 2017-06-29 16:54:01 2 条评论


  • 0

    Greed普通玩家,菜鸡程序员

    科学计数法是王道

    发布于 2018-03-26 10:23:23 0 条评论


  • 0

    龙骑士无面者现在是菜鸟工程师,渴望成为专业模型玩家

    不知题主有没有玩过Clicker Heros,我挂机上百小时,伤害值已经达到了十进制e200(10的200次方)以上,这个数字已经远远超过了128位二进制数所能表示的最大数字,这就意味着计算机不能把它当作“数字”处理了。

    那么,用什么办法表示他们呢?

    很简单,“写”出来。

    须知,“写”一个十进制e200数量级的数字出来,只要两百个ASCII码,两百个ASCII码的大小对于现代计算机而言小的可以忽略。可以说随你数字有多大,我能“写”出来的最大的数超乎你的想象。

    但具体实现中不一定用ASCII码来实现,因为ASCII码比较古老,提供的含义比较有限,现在的放置类有可能使用了更先进的编码(比如unicode),用可接受的额外开销换取更轻松的开发和更丰富的操作方法。

    不过,用“写出来”的方法处理数字会很蛋疼,有可能要自己编写一整套运算函数。

    发布于 2017-06-28 23:13:18 1 条评论


  • 0

    AikeKoGalgame、Dota2、Steam

    从小到大分别为:K M B T q Q s S O


    1 O=10^3 S=10^6 s=10^9 Q=10^12 q=10^15 T+10^18 B=10^21 M=10^24 K=10^27


    这么大暂时已经可以试用大多数放置类游戏了。


    参考自我在****网站上偶尔点进去的挂机小黄油Fap Titans(溜了)


    0dc46bb58ba841ef2dea51da9414f439.png

    发布于 2017-06-28 21:24:51 0 条评论

  • 登录奶牛关账号即可参与讨论

{{question['follower_count']}} 个玩家关注

...

相关元素

相关游戏

相关问题

为什么相对于手游而言,主机和PC游戏大多数采用『文字化』的菜单选项?

10人关注 5个回答

心流理论如何应用到游戏设计上?

10人关注 3个回答

问题被以下收藏夹收录