第一部:魔兽科普:模拟器组成原理(一)
如果你没有读过第一部,你可以随自己的兴趣随便看看,阅读顺序对于理解没什么影响的,因为本身这些内容就没有太大的前后联系。
如果你觉得看不懂……那真的很抱歉,我已经写得非常通俗了,甚至已经给每一句贴进来的SimC源代码配上了注释,我觉得拿来当作C++入门教材都快够用了!
如果你觉得不切实际……你一定没有踏踏实实做过WoW的DPS研究。SimC在其中起了非常重要的承载作用,而我在谈的,是模拟器的构成及实现细节。如果这都不切实际,那很抱歉真的没有更切合实际的内容可谈了。
如果你有意向为NGA的职业研究做出贡献,我这里有两个项目,如果你有兴趣,只需回帖告诉我们。如果项目开始,我会联系你们。
我希望制作一个属于我们自己的模拟器,供职业研究使用。先从个别职业开始,从基础功能开始,从CLI开始,逐渐完善,逐渐优化。
我们可以脱离SimC,从最底层起,构建我们自己的职业研究理论体系。
现在能够理解SimC的重要性的人都不占多数,对SimC的误解批评言论随处可见。所以我不期望大家现在都能意识到制作自主知识产权的模拟器有多么必要,但是我会努力解释清楚。
llxibo希望能够将SimC写入FPGA,实现大尺度的模拟运算。
这个项目难度极高,可以这么说,这可能是你能接触到的实际问题里难度最高的了,真正的学科前沿,非常有挑战,也非常有意义。
无论做什么,都不是随口说说那么简单,需要的时间也不是开荒一个H加尔鲁什的工夫就能拿得下的。制作完成后,后面的发展和维护工作也是一个长远的任务。
有人说,你上次的前言里讲到,“不懂SimC组成原理的人就不能算作会用SimC”,就好比“不懂榨汁机内部结构的人就不能算作会用榨汁机”。
很显然这两句话是有区别的。
我们一眼看到榨汁机,就知道了很多信息,哦,它用旋转的刀片把水果打碎。哦,它的刀片在桶底,我不能把手伸进去
否则就不能买大Lumia了 。
石头比铁硬,所以我放石头进去榨汁机会坏掉,榨不出汁来。
但是看到SimC,除非特别有经验的人,看到跑属性权值时要读两个进度条,可以想到“哦,SimC用两点差商作为权值”。一般用户真的能够对着那个进度条看出什么所以然来?
我在战士区经常纠正大家使用SimC时的错误,我大体了解人们常见的误区有哪些。
很显然很多人号称自己会用SimC,却对其内部构造一无所知。那么你就很容易犯下类似“把手伸进榨汁机里”的错误,因为你看不出来里头有个旋转的刀片。
死程必读经典有一本叫做“龙书”,是讲编译原理的。但是有多少人会真正参与一个编译器的制作?极少数。
图:我又不去设计编译器,为什么要读《编译原理》?
不了解编译原理,就很难写出最优秀的代码。
代码最终以机器码的形式输入CPU,如果你对自己所写的程序如何编译为机器码毫不知情,你甚至理解不了为什么“[]”符号可以对“void**”型使用却不能对“void*”型使用,为什么一个空类要占用1字节的内存。
对于SimC也是一样的,不了解SimC原理,就很难用好SimC:“我还差1%才满暴,为什么暴击收益比力量还低啊?”
那些什么“求属性权值,要求在两差商点之间,DPS在闭区间上连续,在开区间上对待求权属性可偏导”之类的屁话,放在第三部中去讲。当然你可以提前琢磨一下这句话是什么意思。
这一次我将手把手教大家使用C++程序设计语言,制作自己的迷你模拟器。