上周落枕,过来将近10天也不好,肩膀脖子超痛,基本无法也无心工作。所以来随便吹吹牛,扯扯蛋。
有人说人生是命运决定的,开始我觉得纯粹是胡说八道,不过后来的一件事让我改变了这个看法。
这要说到好多年前,工作上的一个项目。
因该有很多朋友喜欢电玩,有心的朋友可能会注意到,很多游戏都有replay这个功能。比如足球游戏winning eleven,进球之后会有重放进球片段的replay。或者,一些3D格斗游戏自己/对方被击倒之后,也会重拨最后几招的过程。
还没有流落到游戏这行之前,我也曾经想过“replay是怎么做的啊,是不是要像录像机那样,保存那么久的动画?游戏机的内存够吗?”
后来,进入了游戏届,某个项目让我接触到了一个术语---random seed,也就是乱数种子。
具体的东西,有兴趣的朋友可以去wikipedia查查,大概意思就是,事先设定一个算法(公式),然后给这个算法一个初期的数,然后去生成一系列的随机数。
比如最简单的例子就是
x = x * a + b;
比如,如果我们规定a是2,b是1,然后我们给这个公式一个初期值(也就是所谓的种子),之后我们连续套用五次公式,我们会得到下边这些数字
x(seed) = 5
x1 = 5 * 2 + 1 = 11
x2 = 11 * 2 + 1 = 23
x3 = 23 * 2 + 1 = 47
x4 = 47 * 2 + 1 = 95
x5 = 95 * 2 + 1 = 192
11, 23, 47, 95, 192
要说的事情就是,如果这个公式是固定的,而且,给这个公式一个固定的初期值,那么无论重复多少次,我们都会得到相同的一些列数字。
当然,这个例子仅仅是一个例子,实际上需要一点数学知识才能得到相对精确的随机数字,这里就不赘述了。
言归正传,在需要保存replay的游戏里边,随机数的产生方法也都是利用这种“乱数种子”的方式,而不是去用API提供的库函数。
这样,我们想重放一个片断的时候,只要给程序当初的“种子”,然后保存下user的操作情报(也就是上下左右方向和按钮),然后让程序用这个“种子”和操作情报,重新运行一下的话,就可以完全的再现当时的情况。而不需要保存画面。
罗嗦了这么多,相信大家也知道我要说什么了。
人生,不也就是一个巨大的公式?而我们出生的时间地点,我们的父母,身边的人,就是那个种子。
只不过,人生的种子,和人生的公式都相当复杂,相当的动态。但是其实我相信,只要能把一个人恢复到他出生的那个环境,那么不管让他恢复到婴儿状态多少次,他长大之后都完全还是同一个人,他每分每秒做什么,也会一成不变。
只不过,这一切都是不可逆的。
可能有人会说,我可以拼搏改变命运,但是我要说,你拼搏或者你不拼搏,都是你迄今为止的经历让你作出的判断。选择拼搏与否,也是命运。
似乎有点宿命论,也不知道大家明白我要说什么不。
胡言乱语了哈。