当前位置:首页>>攻略文章>>正文
魔兽科普:模拟器组成原理(一)
2013-12-27 23:50:41 作者:fhsvengetta 来源: 浏览次数:0
摘要:我会把我所知道的重点尽可能地写出来。由于这个系统非常庞杂,不可能事无巨细全都写出来,但在你读懂这篇内容之后,加上少许编程功底,应该就能够达到自制DPS模拟器的水平。
导航:

 蒙特卡洛法重识SimC反向工程时间驱动和事件驱动表达式解析面向对象的模拟器设计机器不掷骰子|

重识SimC
你认识中的SimC是什么样子?
是有很多标签页可以设置选项,从战网导入人物的那种吗?
那么跟我一起重新认识一下SimC。SimC的界面是这样的。

\
                                                                    图:SimulationCraft CLI
Command Line Interface(命令行界面)是SimC最基础的样子。SimC发布的程序压缩包中包含大量的文件,而唯独simc.exe(64位版本为simc64.exe)可以脱离其他文件,独立运行。
而各位常用的Graphic User Interface(图形用户界面),必须附带整个压缩包中的所有组件才能工作。
CLI是SimC的基础,运用CLI是SimC进阶应用一定逃不掉的,因为它更方便灵活。

认识CLI程序
很多人管这种程序叫做DOS程序?不,你大错特错了,很多DOS程序是CLI程序,而simc.exe并非DOS程序,它是Win32程序。
CLI程序通过标准输入和标准输出与外界进行交流。这个黑色的对话框并非程序本身的一部分,出现这个黑色对话框,是因为我们开启它时并没有为它选择标准输入和标准输出,所以Windows系统自动弹出了这个黑色对话框,将你键盘输入的字符作为标准输入,将标准输出用白色的字串打印在对话框里。
换言之,你可以将CLI程序的标准输入输出连接在任意能够进行输入输出的东西上,比如键盘和打印机,比如磁盘上指定的文件,再比如另一个程序;而这另一个程序,可以是CLI程序,也可以是GUI程序。
\

图:灰谷的饰品评分工具,将SimC CLI连接在了自己身上。
比如上图中的程序,是灰谷自己编写的饰品评分批处理工具。这个工具连接了SimC的输出,于是我们的工具就有获得SimC运算结果的能力了,可以对运算结果进行管理和二次加工,看起来就好像这个小程序本身也会模拟DPS一样。
5.3版本战士可用的各种饰品足有270多种,要分别评分如何使用GUI来完成?人工操作开始运算几百次并记录结果,简直是不可能的任务。
而使用CLI可以轻松进行批处理,只要一次性备好运算所需参数,剩下的调度任务交给我们的工具就好了。

各位常用的SimC GUI,其实与灰谷的饰品评分工具原理是一样的,它将参数送给CLI,由CLI完成运算,将CLI输出的结果接回到自己身上进行处理。
如果说带有GUI的SimC是核桃,那么SimC的CLI就是核桃仁。

使用SimC
我们看看如何使用SimC CLI。
要使用它,首先要让程序运行起来。这很简单,双击打开它。你可以试试双击打开simc.exe会发生什么。
呃,似乎什么都没有发生……有一个黑窗口闪了一下又消失了,然后什么都没发生。
这是因为,在程序结束后,Windows系统会自动把临时调用的黑色窗口关闭。程序运行了一瞬间就结束了,所以黑窗口也就闪了一下就关闭了。
要保留从CLI输出的内容,那么我们需要把标准输出接在其他地方。比如将它的标准输出接在cmd.exe上。cmd.exe也使用一个黑窗口进行输入输出,但只要cmd.exe不停止运行,黑窗口就不会自动关闭,从simc.exe输出的内容就可以保留下来。

打开cmd.exe,然后进入simc所在的目录。
你有两种方式,第一种是按组合键“win+r”调出运行,输入cmd并回车,这样就可以打开cmd.exe。然后通过cd命令可以进入你想去的目录。
另一种方式,如果你是Windows Vista或更高版本的系统,你可以在你simc所在的文件夹上,按住shift点击鼠标右键,弹出的菜单中将出现一个隐藏项“在此处打开命令窗口”。这种方式更方便操作。
完成后,输入命令simc。
Code (c):
cd X:\Your\SimC\Dir\
simc

结果如下。
\

                                                   图:通过cmd.exe运行simc.exe。
SimC CLI输出了一个错误:Nothing to sim!(没有可供模拟的内容)

我们确实没有给它提供任何模拟任务,只是启动了它一下。所以得到这个错误是情理之中……
那么如何给SimC提供模拟任务呢?
现在输入命令:
Code (c):
simc warrior=Aean main_hand=aeans_axe,weapon=axe2h_1000min_2000max_3.6speed

SimC命令行接受两种参数,一种是按照“[关键字]=[值]”的格式输入,另一种是提供一个文件名,然后将很多很多的“[关键字]=[值]”的参数一行一行写在那个文件里一起输入,可以大幅缩短命令行的长度。
我们添加了两个参数。
warrior=Aean
这一个参数的关键字是warrior,用这个关键字可以定义一名战士玩家。给warrior赋的值是这名战士的名字。
我们这里这个参数的意思就是“有一名名叫Aean的战士”。
main_hand=aeans_axe,weapon=axe2h_1000min_2000max_3.6speed
这个参数的关键字是蓝色部分的main_hand,用这个关键字可以给刚刚定义的玩家提供一把主手武器。
请注意,整个绿色部分都是值。它描绘了一把名叫Aean's Axe的双手斧,具有1000~2000的伤害和3.6的速度。
这样SimC就真的会开始模拟计算了,你应该能够得到一长串的报告,描绘了Aean的输出情况。
\

                                                 图:simc.exe的首次工作完成!Aean得到了152.8的DPS。

如果你想得到报告给其他人看(或者留给自己以后看),那么添加一个关键字html=aeans_simc_report.html试一下。在模拟结束后,你可以在simc所在目录中发现一个叫做aeans_simc_report的网页。
\

                                                             图:为Aean保存网页形式的报告。
这就是你在GUI中非常熟悉的结果页了。

虽然这里我们的简单例子只描绘了Aean这个人物的职业,和其所持主手武器的武器伤害。人物的任何属性都是通过这种方式进行描述的。
你也可以通过诸如enemy=Fluffy_Ass_of_Garrosh来定义你的敌人,如raid_events+=/damage,cooldown=30,amount=20000,type=shadow来描绘一场奥卓克西昂式的带有持续环境伤害的战斗。
总之,在SimC的世界里,一切都是[关键字]=[值]。
(或[关键字]+=[值],某些关键字支持使用“+=”追加符,可以让你把很长的值字串分成数行来输入。)

CLI的批处理
假设我们现在要为Aean挑选一把合适的武器!
我们有几种办法来完成这个工作。
第一种,是使用copy关键字。
simc warrior=Aean_with_Axe main_hand=aeans_axe,weapon=axe2h_1000min_2000max_3.6speed copy=Aean_with_Sword main_hand=aeans_sword,weapon=sword2h_1100min_2200max_3.9speed copy=Aean_with_Mace main_hand=aeans_mace,weapon=mace2h_900min_1800max_3.3speed
这样可以让SimC把Aean复制三份,分别拿着不同的武器在一起输出。
但是当我们要挑选的武器非常多的时候,就会有非常多的战士在一起打木桩,它们之间的互相影响变得复杂。
而且在一次计算中完成所有的模拟任务,中途是不能中断的,如果中断了,那么下一次重新开始时就必须从头计算。

CLI相对GUI非常明显的一项优势就是,它可以非常方便地进行批处理。
例如我可以写一个.bat文件:
Code (c):
@echo off
echo This is a weapon selection sim for Aean!
simc warrior=Aean_with_Axe main_hand=aeans_axe,weapon=axe2h_1000min_2000max_3.6speed
simc warrior=Aean_with_Sword main_hand=aeans_sword,weapon=sword2h_1100min_2200max_3.9speed
simc warrior=Aean_with_Mace main_hand=aeans_mace,weapon=mace2h_900min_1800max_3.3speed
pause

假设我在模拟完斧和剑之后因为某些原因必须停止计算了,我仍然可以得到斧和剑的结果。那么下一次我重新开始计算时,只需再单独计算一下锤的情况就可以了,无需从头开始。
CLI的灵活性就在此体现。



相关报道:

[关闭] [返回顶部]


  返回首页 | 最新资讯 | 资源下载 | 魔兽图片 | 单机文档 | 技术攻略 | 玩家视频
备案号:蜀ICP备2024062380号-1
免责声明:本网站为热爱怀旧WOW的玩家们建立的魔兽世界资料网站,仅供交流和学习使用,非盈利和商用.如有侵权之处,请联系我们,我们会在24小时内确认删除侵权内容,谢谢合作。
Copyright © 2024 - 2024 WOWAII.COM Corporation, All Rights Reserved

机器人国度