[MOD设计资料] 城市工作范围的原理与修改

本文教你理解城市工作范围的原理与设计修改。
 

一,定义条件

进入CvGameCoreDLL目录打开“CvDefines.h”,可以找到下边四行。

NUM_CITY_PLOTS 是城市工作的地块数量
CITY_HOME_PLOT 是城市是位于那一个地块
CITY_PLOTS_RADIUS 是工作范围半径
CITY_PLOTS_DIAMETER 是工作范围这个正方形的长宽

他们的关系会在后面讲。

二,城市范围的结构

打开“CvGlobals.cpp”,找函数“void CvGlobals::init()”,再往下看。

现在先看aaiXYCityPlot这个二维数组
根据之前的定义,aaiXYCityPlot[5][5],就是一个长宽都是5的25格的二维数组。再看四个角的-1,-1就是不工作的格,NUM_CITY_PLOTS的定义为21,现在明了吧。
现在用你的斗鸡眼看一下这个aaiXYCityPlot数组像什么?就是游戏中的城市工作范围。

aaiXYCityPlot、aiCityPlotX、aiCityPlotY三者的关系用一张图来表示

城市工作范围的原理

如果理解?从aaiXYCityPlot中间的0开始,右1,下2。。。顺时针至20为止
aiCityPlotX、aiCityPlotY就是坐标,将X和Y分开为两个数组,数组分为三行是让你好理解,就是有三层,看一下aaiXYCityPlot这个正方形。

aaiXYCityPlot的0,就是aiCityPlotX和aiCityPlotY的第一行第一个,0和0,合起来就是0,0
aaiXYCityPlot的1,就是aiCityPlotX和aiCityPlotY的第二行第一个,0和1,合起来就是0,1
aaiXYCityPlot的2,就是aiCityPlotX和aiCityPlotY的第二行第二个,1和1,合起来就是1,1
aaiXYCityPlot的3,就是aiCityPlotX和aiCityPlotY的第二行第三个,1和0,合起来就是1,0
aaiXYCityPlot的9,就是aiCityPlotX和aiCityPlotY的第三行第一个,0和2,合起来就是0,2
aaiXYCityPlot的16,就是aiCityPlotX和aiCityPlotY的第三行第八个,-1和-2,合起来就是-1,-2
aaiXYCityPlot的20,就是aiCityPlotX和aiCityPlotY的第三行第十二个,-1和2,合起来就是-1,2

好了,还不明的话我没办法了。

aiCityPlotPriority看字面是优先级,但因计算不在DLL内,不能解释作用如何。配合aaiXYCityPlot看一下,就明白为斜角的格设高一点。

原理解释到此,应该不会有理解上的困难。

注意,城市工作范围和城市扩展的文化范围是没有任何关系的。

三,修改

现在实现三格城市工作范围吧。

1,打开“CvDefines.h”,修改

3格半径的话,CITY_PLOTS_DIAMETER = ((CITY_PLOTS_RADIUS*2) + 1),CITY_PLOTS_DIAMETER相乘就等于49

2,先设计好aaiXYCityPlot这个二维数组

打开“CvGlobals.cpp”,修改

形状是你自己喜欢,没-1也没关系,我当前只是按文化扩展来定工作范围的形状。

3,定义NUM_CITY_PLOTS

打开“CvDefines.h”,修改

49-12,12就是12格-1,实际工作的只有37格

4,定义XY数组

打开“CvGlobals.cpp”,修改

自己数格吧,或者先画张图来填也行,我也建议你这样做,免得搞错坐标

5,最后再写优先级

斜角最高,平角次之。

《[MOD设计资料] 城市工作范围的原理与修改》有4个评分

★★★★★
★★★★
★★★
★★
4
0
0
0
0

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注