ActiveProtect/Program.cs

141 lines
5.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Threading;
using ActiveProtect.SimulationEnvironment;
using ActiveProtect.Models;
namespace ActiveProtect
{
class Program
{
static void Main(string[] args)
{
// 创建仿真配置
var config = new SimulationConfig
{
TankConfigs =
[
new() {
InitialPosition = new Vector3D(100, 0, 100),
InitialOrientation = new Orientation(0, 0, 0),
InitialSpeed = 0,
MaxSpeed = 20,
MaxArmor = 100,
HasLaserWarner = false,
HasLaserJammer = true
}
],
LaserWarnerConfig = new LaserWarnerConfig
{
AlarmDuration = 5.0
},
LaserJammerConfig = new LaserJammerConfig
{
MaxJammingCooldown = 5.0,
MaxJammingPower = 10000.0,
InitialJammingPower = 4000.0,
PowerIncreaseRate = 2000.0
},
MissileConfigs =
[
// 标准导弹配置
new() {
InitialPosition = new Vector3D(1500, 200, 100),
InitialOrientation = new Orientation(Math.PI, -0.1, 0),
InitialSpeed = 0,
MaxSpeed = 300,
TargetIndex = 0,
MaxFlightTime = 0.5,
MaxFlightDistance = 3000,
ThrustAcceleration = 50,
MaxEngineBurnTime = 10,
MaxAcceleration = 100,
ProportionalNavigationCoefficient = 3,
StageConfig = FlightStageConfig.StandardMissile,
DistanceParams = new MissileDistanceParams(500, 100, 20),
Mass = 50,
Type = MissileType.StandardMissile,
},
// 红外指令制导导弹配置
new() {
InitialPosition = new Vector3D(2000, 150, 100),
InitialOrientation = new Orientation(Math.PI, -0.15, 0),
InitialSpeed = 0,
MaxSpeed = 300,
TargetIndex = 0,
MaxFlightTime = 1,
MaxFlightDistance = 5000,
ThrustAcceleration = 50,
MaxEngineBurnTime = 10,
MaxAcceleration = 100,
ProportionalNavigationCoefficient = 3,
StageConfig = FlightStageConfig.InfraredCommandGuidance,
DistanceParams = new MissileDistanceParams(500, 100, 20),
Mass = 50,
Type = MissileType.InfraredCommandGuidance
},
// 毫米波终端制导导弹配置
new() {
InitialPosition = new Vector3D(2000, 50, 100),
InitialOrientation = new Orientation(Math.PI, -0.05, 0),
InitialSpeed = 0,
MaxSpeed = 300,
TargetIndex = 0,
MaxFlightTime = 0.5,
MaxFlightDistance = 3000,
ThrustAcceleration = 50,
MaxEngineBurnTime = 10,
MaxAcceleration = 100,
ProportionalNavigationCoefficient = 3,
StageConfig = FlightStageConfig.MillimeterWaveTerminalGuidance,
DistanceParams = new MissileDistanceParams(500, 100, 20),
Mass = 50,
Type = MissileType.MillimeterWaveTerminalGuidance
},
// 激光半主动制导导弹配置
new() {
InitialPosition = new Vector3D(2000, 150, 100),
InitialOrientation = new Orientation(Math.PI, -0.12, 0),
InitialSpeed = 700,
MaxSpeed = 700,
TargetIndex = 0,
MaxFlightTime = 10,
MaxFlightDistance = 5000,
ThrustAcceleration = 0,
MaxEngineBurnTime = 0,
MaxAcceleration = 100,
ProportionalNavigationCoefficient = 3,
StageConfig = FlightStageConfig.LaserSemiActiveGuidedMissile,
DistanceParams = new MissileDistanceParams(500, 200, 20),
Mass = 50,
Type = MissileType.LaserSemiActiveGuidance
}
],
LaserDesignatorConfigs =
[
new LaserDesignatorConfig
{
InitialPosition = new Vector3D(500, 150, 100),
MaxIlluminationRange = 1000
}
],
SimulationTimeStep = 0.25
};
// 创建仿真管理器
var simulationManager = new SimulationManager(config);
// 运行仿真
int maxIterations = 1000;
int iteration = 0;
while (!simulationManager.IsSimulationEnded && iteration < maxIterations)
{
simulationManager.Update();
simulationManager.PrintStatus();
Thread.Sleep(100); // 暂停100毫秒使输出更易读
iteration++;
}
Console.WriteLine("仿真结束");
}
}
}