gpt4 book ai didi

c# - 模拟一场大战

转载 作者:太空狗 更新时间:2023-10-30 01:21:03 24 4
gpt4 key购买 nike

我必须模拟两个玩家之间的战斗。它可以持续一到六轮。攻击者可以拥有13种不同类型的太空船,防御者-另外9种防御结构。问题是我要把模拟限制在每边1千单位,所以它会相当大。
每个单元都将是以下类的实例

class Unit()
{
UInt16 id; // unit type
Int32 structuralIntegrity;
Int16 shieldPower;

public Unit(UInt16 unitType, Int16 playerId)
{
id = unitType;
switch (playerId)
{
case 0: {structuralIntegrity = player0BaseStructuralIntegrity[id]; shieldPower = player0BaseshieldPower[id];}
case 1: {structuralIntegrity = player1BaseStructuralIntegrity[id]; shieldPower = player1BaseshieldPower[id];}
}
}
};

用于不变值的数组。
玩家1技术
装甲技术
屏蔽技术
武器技术
Player2技术
装甲技术
屏蔽技术
武器技术
Player1基础结构完整性
等同于默认*装甲技术
等等…
然后我会用每个玩家单位传播两个列表。
一轮就是这样:
选择随机单位//事实上,我认为随机与否并不重要
随机选取目标
如果武器威力低于目标盾牌的1%,则不会造成伤害
目标的护盾吸收伤害,其余部分进入目标的结构完整性
如果目标的结构完整性低于其初始值的30%,则有1-结构完整性/基础结构完整性爆炸的可能性
检查快速开火的可能性,如果击中,转到步骤2
进入步骤1直到所有单位攻击注意!被摧毁的船只-结构完整性低于1仍然可以被攻击。编辑:他们也可以攻击这一轮
对对手重复步骤1-7。
移走被毁的船只
恢复护盾
战斗持续六轮或直到一方被击败。
让我们考虑一个由100架轰炸机和200架火箭发射器组成的攻击舰队。轰炸机在攻击火箭发射器后有95%的机会再次开火。所以每架轰炸机平均攻击96次,攻击9600次。假设防御者很幸运,一个火箭发射器幸存了下来。他还摧毁了10架轰炸机。现在我们有90架轰炸机攻击一个火箭发射器,再给我们8640发子弹。想想10万轰炸机和20万火箭发射器。
你对如何改进这个模拟(性能)有什么建议吗?我应该运行多少次才能得到可信的平均结果?
更新
我想我可能会坚持我的模拟,因为即使你找到了这个问题的数学解,我也不会理解,因为我目前的教育水平。
有人要求更多细节。
每一级对应的技术都会增加10%的初始值,但对于模拟来说并不重要,所以假设两个玩家都有0项技术。让我们考虑一支由1艘巡洋舰和2艘导弹发射器和1架重型激光炮组成的攻击舰队。巡洋舰有2700个结构完整,50个盾牌和400个武器。我会把它写成2700:50:400
巡洋舰2700:50:400 x1
VS
导弹发射器200:20:80 x2
重激光800:100:250 x1
导弹发射器和重激光没有快速射击。巡洋舰对重激光有0次快速射击,对导弹发射器有10次快速射击,使其在攻击导弹发射器后有(10-1)/10=0.90的概率再次开火。
一个可能的结果是:
第一轮
攻击者向防御者开火
2700:50:400的巡洋舰以200:20:80向导弹发射台开火;结果是导弹发射台以-180:0:80开火
快速射击:
巡洋舰对导弹发射器进行了快速射击。
骰子是0.62,而不是0.90:巡洋舰得到了另一个机会。
2700:50:400的巡洋舰以200:20:80向导弹发射台开火;结果是导弹发射台以-180:0:80开火
快速射击:
巡洋舰对导弹发射器进行了快速射击。
骰子是0.09,而不是0.90:巡洋舰得到了另一个机会。
2700:50:400的巡洋舰以-180:0:80向导弹发射器开火;结果是导弹发射器以-580:0:80开火
快速射击:
巡洋舰对导弹发射器进行了快速射击。
骰子是0.83,而不是0.90:巡洋舰得到了另一个机会。
2700:50:400的巡洋舰用800:100:250的强激光开火;结果是500:0:250的强激光
快速射击:
巡洋舰对强激光没有快速火力。
防御者向攻击者开火
以-580:0:80的比例发射导弹,以2700:50:400的比例向巡洋舰开火;结果是以2670:0:400的比例向巡洋舰开火
以-180:0:80的比例发射导弹,以2670:0:400的比例向巡洋舰开火;结果是以2590:0:400的比例向巡洋舰开火
500:0:250的强激光以2590:0:400向巡洋舰开火;结果是2340:0:400的巡洋舰
移除船只并恢复护盾
巡洋舰还有完整性,恢复它的护盾。
劳彻导弹失去了它所有的完整性,使它退出战斗。
劳彻导弹失去了它所有的完整性,使它退出战斗。
重激光还有完整性,恢复其防护罩。
第2轮
攻击者向防御者开火
2340:50:400的巡洋舰用500:100:250的强激光开火;结果是200:0:250的强激光
爆炸概率为75.00%(1-200/800):骰子值为0.30,而单位爆炸概率为0.75。
结果是9:0:250的强激光
快速射击:
巡洋舰对强激光没有快速火力。
防御者向攻击者开火
9:0:250的强激光以2340:50:400向巡洋舰开火;结果是2140:0:400的巡洋舰
移除船只并恢复护盾。
巡洋舰还有完整性,恢复它的护盾。
重激光失去了它的完整性,把它从战场上移除。
战斗在两回合后结束,攻击者获胜。

最佳答案

对于这样数量的单位,我认为采取一种(某种)统计的、广义的方法是有效的。
只需将给定类型单位的所有属性汇总,保留计数,然后计算总伤害,总防御,移除被伤害摧毁的对方单位数量,作为总防御的百分比。
我相信这是特拉维安或其他在线战略游戏所采用的方法。对于如此庞大的数字,没有有效的方法。
特殊情况
如果目标的结构完整性低于初始值的30%
价值,它有可能
1-要爆炸的结构完整性/基础结构完整性
我相信你可以用高斯分布来确定额外爆炸单位的数量。σ值越大,破坏的可能性就越大。
另一种方法是摧毁剩余船只的百分之一。百分之多少?你的选择。
快速射击
因为你没有定义快速射击,我不能真的建议。但我建议增加一个特殊的战斗阶段,考虑到这一点。你也可以通过快速射击概率来增加伤害。

关于c# - 模拟一场大战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com