设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
楼主: Khyron

[原创] 文明游戏机制拾遗

[复制链接]
 楼主| 发表于 2010-1-3 22:13:41 | 显示全部楼层

占领城市能获得多少金钱(BTS3.19)

玩家占领城市获得的 数量的计算公式为:
Gold = floor((B + P * C + R1 + R2) * T / M)

B = BASE_CAPTURE_GOLD = 20
P = 破城前城市人口数量
C = CAPTURE_GOLD_PER_POPULATION = 10
R1 = [0, CAPTURE_GOLD_RAND1)中一随机整数 = [0, 50)中一随机整数
R2 = [0, CAPTURE_GOLD_RAND2)中一随机整数 = [0, 50)中一随机整数
M = CAPTURE_GOLD_MAX_TURNS = 50
T = max(0, min(游戏当前回合数 - 城市上一次易手时的回合数, M))

注1:城市建立时会将当前回合数设为上一次易手时的回合数,易手时更新此数值。
注 2:BASE_CAPTURE_GOLD,CAPTURE_GOLD_PER_POPULATION,CAPTURE_GOLD_RAND1,CAPTURE_GOLD_RAND2,CAPTURE_GOLD_MAX_TURNS 由GlobalDefines.xml中相应词条决定。

考虑到正常游戏中游戏当前回合数不小于城市上一次易手时的回合数,占领城市获得金钱数量的计算公式有以下形式:
Gold = floor( (20 + 破城前城市人口数量 * 10 + [0, 50)中一随机整数 + [0, 50)中另一随机整数) * min(游戏当前回合数 - 城市上一次易手时的回合数, 50) / 50 )

注3:占领城市玩家获得的金钱来源于无所不能的Sid大神,请赞美他吧!

===================================

参考文献
[1]. doCityCaptureGold, CvGameUtils.py, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009


旧文章, 最早出现在这里http://www.civclub.net/bbs/viewt ... 82&page=1#pid593160, 觉得还有意义, 重新挖出来.

[ 本帖最后由 Khyron 于 2010-1-3 22:17 编辑 ]
 楼主| 发表于 2010-1-3 22:31:18 | 显示全部楼层

Top 5 Cities 评选标准(BTS3.19)

根据城市的文化, 各种产出及城市人口, 按以下公式计算此城市的得分
TotalCityValue = (城市  / 5 + 城市 产出 + 城市 产出 + 城市 产出) * 城市人口

分数最高的5个非野蛮人城市将成为Top 5 Cities.


===================================

参考文献
[1]. CvInfoScreen.calculateTopCities, CvInfoScreen.py, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009
发表于 2010-1-24 12:06:38 | 显示全部楼层
强烈支持楼主孜孜不倦黑代码的精神
发表于 2010-2-13 11:12:53 | 显示全部楼层
K大威武
发表于 2010-2-28 17:17:21 | 显示全部楼层

回复 #82 Khyron 的帖子

占领城市玩家获得的金钱来源于无所不能的Sid大神,请赞美他吧!

让我们再次赞美K大吧!
 楼主| 发表于 2010-3-6 22:28:10 | 显示全部楼层

最坏的敌人(Worst Enemy)全解析(BTS3.19)

1. 概念
文明4中, "最坏的敌人"这一概念属于组队(Team)级别, 即每一个组队的"最坏的敌人"也是一个组队.
假设有组队T1, T2, T1下有玩家X1,...,Xm, T2下有玩家Y1,...,Yn, 如果T2是T1的"最坏的敌人", 则我们可以认为:
对于任意i, j满足1<= i <= m, 1<= j <=n, 玩家Yj是玩家Xi的"最坏的敌人".

例如: 附图1显示由黄线相连我和Gandhi属于同一组队, Montzuma和Shaka是同一组队, Gandhi是Montzuma/Shaka的最坏的敌人. 这说明Gandhi的组队是Montzuma/Shaka的"最坏的敌人", 因此我也是Montzuma/Shaka的最坏的敌人.

2. 确定方法
一个组队的"最坏的敌人"初始为无, 每回合结束后更新.
注: 当2个组队合并时, 也会更新"最坏的敌人"

假设有组队T, 那么T的"最坏的敌人"按以下方法更新:
遍历当前存活的所有组队, 除了T和T的附庸组队, 在这些组队中组队S成为T的的"最坏的敌人", 如果:
T对S的态度最差, 而且T对S的态度比谨慎(ATTITUDE_CAUTIOUS)差.
若T对多个组队同样的最厌恶, 编号在前的组队将不幸成为其"最坏的敌人".

这里的"态度"有2点需要注意:
a. 使用的是态度级别, 而不是态度值, 比如态度值为-100和-20在确定"最坏的敌人"时, 都是狂怒(ATTITUDE_FURIOUS);
b. 由于是组队间的, 所以使用的不是玩家级别, 而是组队级别的态度级别.

3. 影响
刨除随机事件中AI的选择和文本显示这2个次要影响, "最坏的敌人"的影响主要体现在外交上.
为了便于讨论, 设有玩家X, Y, Z, 分别属于组队T, S, R. 假设玩家Y是玩家X的"最坏的敌人", 即组队S是组队T的"最坏的敌人".

(1) 相关方影响
出于对自己最坏的敌人的厌恶, 在X/T和Y/S的外交交易中, X将不会同意向Y提供自己的以下外交交易对象:
资源
科技
地图
和平附庸
开放边境
共同防御条约
永久同盟

当你是X时, 就像附图2显示的那样, 你会因此见到:
"We will never trade with you, our worst enemy!!!"

另外, X向Y投降的门槛将更高.

(2) 第三方影响
简单地讲, Z/R和Y/S开展交易, X会很生气, 如果Z是人类玩家, X会要求Z停止交易;.

详细的解释如下:
如果Z是人类玩家, 且其玩家标号是组队中最小, 除了10回合和平条约以外, 若Z/R和Y/S之间有可以取消的外交条约, X每回合有2%的可能性要求Z和Y/S停止交易(STOP_TRADING).
注: 游戏中, 可以取消的外交条约包括每回合的金钱交易, 资源交易, 开放边境和共同防御条约, 当然得是签约10回合后.
注: AI向人类玩家提出停止交易后, 此AI20回合之内都不会再提出停止交易请求.

我们知道和AI的"最坏的敌人"进行交易, 会引起AI的不快, 就像附图3中左下角显示的那样, AI会抱怨:
"You have traded with our worst enemies!"

假设X所属组队T对Z所属组队R的以下2种统计:
对"最坏的敌人"和平时期总赠予价值为Vg(T, R);
和"最坏的敌人"和平时期总交易价值为Vt(T, R);
并假设T和R相遇了M(T, R)回合.
省略代表组队的T, R, 则态度修正计算公式为:
-min( max( 0, (Vg + Vt/3) / ((M + 1) * 10) ), 4)
所以这项态度修正最高是-4, 最低为0. 另外, AI之间也会有这项修正.

Vg(T, R), 当且仅当R下的任一玩家向T的"最坏的敌人"下任一玩家进行馈赠时发生变化.
如果馈赠是在同一组队内则不算, 双方处于战争状态也不算.
具体来说在,有2种馈赠:
a. 外交交易中的赠予(一次性的或持续性的), Vg(T, R)的增量等于R的玩家的馈赠的物品(即T的"最坏的敌人"免费得到的物品)的交易价值;
b. 单位的赠予, Vg(T, R)的增量等于单位的造价/5.

Vt(T, R), 当且仅当R下的任一玩家和T的"最坏的敌人"下任一玩家进行非赠予交易时发生变化.
如果交易是在同一组队内则不算, 双方处于战争状态也不算.
非赠予交易只有1种:
外交交易中的交换交易, Vt(T, R)的增量等于R的玩家的出售的物品(即T的"最坏的敌人"得到的物品)的交易价值.

请注意: Vg和Vt不会减少, 特别是"最坏的敌人"改变后, 和旧的"最坏的敌人"交易产生的影响不会消除. 和"最坏的敌人"交易带来的外交惩罚只能靠时间的推移来降低.

注: 由于公式中分母由相遇回合数决定, 所以分大陆中, 刚接触到异大陆的AI时, 一个小交易很容易产生+4, -4的效果. +4是由于"公平交易"带来的外交态度修正计算公式中分母是(M + 1) * 5).

例子:
假设你是Z, 属于组队R, 现有玩家X, 属于组队T, T目前的"最坏的敌人"是组队S, 玩家Y属于S. R和T相遇有19回合.
以前什么交易都没有. 那么
Vg(T, R) = 0, Vt(T, R) = 0
你向Y赠送了100gold, 由于1gold有2点交易价值.
Vg(T, R) += 200
你向Y赠送了5个机械化步兵,
Vg(T, R) += 5 * (200 / 5)
你花了300gold从Y处购得捕鱼这一科技,
Vt(T, R) += 600
现在
Vg(T, R) = 300, Vt(T, R) = 600, M(T, R) = 19
因此X对你的态度会修正:
-min( max( 0, (300 + 600/3) / ((19 + 1) * 10) ), 4) = -2

过了30回合, 此时T的"最坏的敌人"已经不是S了, 此时T和S是亲密无间的朋友了. 这段时间里什么交易也没发生.
现在
Vg(T, R) = 300, Vt(T, R) = 600, M(T, R) = 49
因此X对你的态度会修正:
-min( max( 0, (300 + 600/3) / ((49 + 1) * 10) ), 4) = -1
 楼主| 发表于 2010-3-6 22:30:10 | 显示全部楼层

最坏的敌人(Worst Enemy)补充说明(BTS3.19)

(1) 没有证据表明AI在选择战争对象会特别考虑自己的"最坏的敌人", 在AI的战争计划的制定中, "最坏的敌人"没有任何影响.

(2) 如何正确理解BtS3.19对"最坏的敌人"的修正:
Diplomacy summary no longer claims that a civ is the worst enemy of a human team
游戏中, AI对其它玩家的态度由Civ4程序确定, AI的行为也符合这个态度, 比如Pleased下, 很多AI领袖不会宣战. Friendly下, 科技交换不受WFYABTA限制.
程序内部, 也记录着按照游戏机制, 人类玩家对其它玩家的态度, 但文明4中并未使用这一态度, 换句话说, 在这一方面文明4并未限制人类玩家的行为.
比方说, Gandhi和你同宗, 和你并肩作战了数千年, 按照程序, 你对Gandhi应该是亲密了, 但仍不阻止你在Gandhi背后捅刀.
再比如, Catherine, 连续向你扔了100+的核弹, 屠了你无数城, 有可能你对她仍然怜香惜玉.
所以显示一个人类组队(即包含人类玩家的组队)的最坏的敌人, 毫无意义.

附图1

附图2

附图3


===================================

参考文献
[1]. CvPlayer.cpp, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009
[2]. CvPlayerAI.cpp, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009
[3]. CvTeam.cpp, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009
[4]. CvTeamAI.cpp, Firaxis Games, Sid Meier's Civilization 4 Beyond the Sword v3.19, 2009
发表于 2010-4-1 05:07:49 | 显示全部楼层
原帖由 Khyron 于 2008-10-22 14:40 发表
(2)组队T1是组队T2的陆地目标,当且仅当:
a. 存在2个玩家P1,P2,它们分别属于组队T1和组队T2,且P1的某个城市与P2的首都或3座城市位于同一大陆
b. 组队T1有8个陆地格子与和组队T2的陆地格子相邻


还有一个问题是相邻格子的含义是什么。譬如:

1  2  3
4  5  6
7  8  9

中间1和5是否相邻?如果是的话,8格实在太容易达到了
 楼主| 发表于 2010-4-18 03:43:18 | 显示全部楼层

回复 #89 dingding 的帖子

诚如所言, 5和其它8个都算相邻.
发表于 2010-10-9 18:24:25 | 显示全部楼层
作为一个菜鸟,看到这个心情激动啊激动啊激动啊
请允许我感谢一下k大吧
回复 支持 反对

使用道具 举报

发表于 2010-12-1 00:52:22 | 显示全部楼层
再次膜拜K大
我最近还在C4中努力奋斗
回复 支持 反对

使用道具 举报

发表于 2010-12-15 11:22:37 | 显示全部楼层
再看一遍,又回忆起不少
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|塞爱维(CIV)文明联盟    

GMT+8, 2024-4-25 23:50

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表