This commit is contained in:
2020-04-22 04:04:28 -06:00
parent a7c1f79acb
commit 97a8f80ca9
45 changed files with 12094 additions and 51 deletions

BIN
BattleFieldSimulator.zip Normal file

Binary file not shown.

View File

@@ -52,8 +52,13 @@
<Compile Include="BattlefieldEnvironment\IEnvironmentSetup.cs" />
<Compile Include="BattlefieldEnvironment\Map\IMap.cs" />
<Compile Include="BattlefieldEnvironment\Map\IMapLoader.cs" />
<Compile Include="BattlefieldEnvironment\Map\IMapPrinter.cs" />
<Compile Include="BattlefieldEnvironment\Map\IPathGenerator.cs" />
<Compile Include="BattlefieldEnvironment\Map\Map.cs" />
<Compile Include="BattlefieldEnvironment\Map\MapLoader.cs" />
<Compile Include="BattlefieldEnvironment\Map\MapPath.cs" />
<Compile Include="BattlefieldEnvironment\Map\MapPrinter.cs" />
<Compile Include="BattlefieldEnvironment\Map\PathGenerator.cs" />
<Compile Include="BattlefieldEnvironment\Map\Point.cs" />
<Compile Include="BattlefieldEnvironment\Troops\EffectivenessRatios.cs" />
<Compile Include="BattlefieldEnvironment\Troops\ITroop.cs" />

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
using System.IO;
using BattleFieldSimulator.FileSystem;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
@@ -7,12 +9,15 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
public IMap Map { get; }
public List<Troop> Allies { get; }
public List<Troop> Adversaries { get; }
public Environment(IMap map, List<Troop> allies, List<Troop> adversaries)
public StreamWriter OutFile { get; }
public Environment(IMap map, List<Troop> allies, List<Troop> adversaries, string outFile)
{
Map = map;
Allies = allies;
Adversaries = adversaries;
OutFile = new StreamWriter(Path.Combine(FileSystemConstants.ExecutionDirectory, outFile));
}
}
}

View File

@@ -6,9 +6,9 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
{
public Environment CreateEnvironment(IMap map, List<Troop> allies, List<Troop> adversaries)
public Environment CreateEnvironment(IMap map, List<Troop> allies, List<Troop> adversaries, string outFile)
{
return new Environment(map, allies, adversaries);
return new Environment(map, allies, adversaries, outFile);
}
}
}

View File

@@ -13,12 +13,12 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
_troopLoader = troopLoader;
}
public Environment Setup(string mapName, string troopFile)
public Environment Setup(string mapName, string troopFile, string outFile)
{
var map = _mapLoader.LoadMap(mapName);
var allies = _troopLoader.LoadAllies(troopFile);
var adversaries = _troopLoader.LoadAdversaries(troopFile);
var env = _environmentFactory.CreateEnvironment(map, allies, adversaries);
var env = _environmentFactory.CreateEnvironment(map, allies, adversaries, outFile);
return env;
}
}

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.IO;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
@@ -8,5 +9,7 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
IMap Map { get; }
List<Troop> Allies { get; }
List<Troop> Adversaries { get; }
StreamWriter OutFile { get; }
}
}

View File

@@ -4,6 +4,6 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
{
public interface IEnvironmentFactory
{
Environment CreateEnvironment(IMap map, List<Troop> allies, List<Troop> adversaries);
Environment CreateEnvironment(IMap map, List<Troop> allies, List<Troop> adversaries, string outFile);
}
}

View File

@@ -2,6 +2,6 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
{
public interface IEnvironmentSetup
{
Environment Setup(string mapName, string troopFile);
Environment Setup(string mapName, string troopFile, string outFile);
}
}

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
using System.IO;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public interface IMapPrinter
{
void PrintMap(IMap map, List<Troop> allies, List<Troop> adversaries, StreamWriter environmentOutFile);
}
}

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public interface IPathGenerator
{
List<MapPath> GeneratePaths(Point position, Point destination, IMap map);
}
}

View File

@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BattleFieldSimulator.Exceptions;
using BattleFieldSimulator.JsonSerialization;
namespace BattleFieldSimulator.BattlefieldEnvironment
{

View File

@@ -1,5 +1,4 @@
using System.IO;
using BattleFieldSimulator.FileSystem;
using BattleFieldSimulator.JsonSerialization;
using static BattleFieldSimulator.FileSystem.FileSystemConstants;

View File

@@ -0,0 +1,19 @@
using System.Collections.Generic;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public class MapPath
{
public List<Point> Path { get; }
public int Distance { get; }
public MapPath(List<Point> points, int distance)
{
Path = new List<Point>();
Distance = distance;
foreach (var point in points)
{
Path.Add(point);
}
}
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public class MapPrinter : IMapPrinter
{
public void PrintMap(IMap map, List<Troop> allies, List<Troop> adversaries, StreamWriter environmentOutFile)
{
for (var i = 0; i < map.X; i++)
{
for (var j = 0; j < map.Y; j++)
{
var p1 = new Point(i, j);
if (adversaries.Any(x => x.Location == p1 && allies.Any(y=>y.Location == p1)))
{
Console.Write("A/E");
environmentOutFile.Write("A/E");
}
else if (allies.Any(x => x.Location == p1))
{
Console.Write("A ");
environmentOutFile.Write("A ");
}
else if (adversaries.Any(x => x.Location == p1))
{
Console.Write("E ");
environmentOutFile.Write("E ");
}
else
{
Console.Write(". ");
environmentOutFile.Write(". ");
}
}
Console.WriteLine();
environmentOutFile.WriteLine();
}
Console.WriteLine();
environmentOutFile.WriteLine();
for(int i =0; i < map.X*2; i++)
{
Console.Write("-");
environmentOutFile.Write("-");
}
Console.WriteLine();
environmentOutFile.WriteLine();
environmentOutFile.Flush();
}
}
}

View File

@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public class Node
{
public int X { get; }
public int Y { get; }
public Node Parent { get; }
public Point ParentPoint { get; }
public Node(int x, int y, Node parent, Point parentPoint)
{
X = x;
Y = y;
Parent = parent;
ParentPoint = parentPoint;
}
public Point ToPoint() => new Point(X, Y);
public string toString() => $"{X},{Y}";
}
public class PathGenerator : IPathGenerator
{
private IMap _map { get; set; }
public PathGenerator()
{
}
public List<MapPath> GeneratePaths(Point position, Point destination, IMap map)
{
_map = map;
return FindPath(position, destination);
}
private List<MapPath> FindPath(Point position, Point destination)
{
var returnPaths = new List<MapPath>();
var foundCount = 0;
var row = new List<int>{-1, 0, 0, 1, -1, 1, 1, -1};
var column = new List<int>{0, -1, 1, 0, 1, 1, -1, -1};
var queue = new Queue<Node>();
var destNode = new Node(position.X, position.Y, null, position);
queue.Enqueue(destNode);
var visited = new HashSet<string> {destNode.toString()};
while (queue.Count!=0)
{
var curr = queue.Dequeue();
var i = curr.X;
var j = curr.Y;
if (i == destination.X && j == destination.Y)
{
var x = curr;
var returnList = new List<Point>();
while (x.Parent!=null)
{
returnList.Add(x.ParentPoint);
x = x.Parent;
}
returnPaths.Add(new MapPath(returnList, foundCount));
foundCount++;
}
for (var k = 0; k < 6; k++)
{
var x = i + row[k];
var y = j + column[k];
if (IsValidMove(curr.ToPoint(), curr.ParentPoint, _map.X, _map.Y))
{
var next = new Node(x, y, curr, new Point(x,y));
var nextKey = next.toString();
if (!visited.Contains(nextKey))
{
queue.Enqueue(next);
visited.Add(nextKey);
}
}
}
}
return returnPaths;
}
private bool IsValidMove(Point point, Point toPoint, int mapX, int mapY)
{
if (point.X < 0 || point.Y < 0 || toPoint.X < 0 || toPoint.Y < 0 ||
point.X >= mapX || point.Y >= mapY || toPoint.X >= mapX || toPoint.Y >= mapY)
return false;
return Math.Abs(_map.Grid[toPoint.X][toPoint.Y] - _map.Grid[point.X][point.Y]) <= 2;
}
}
}

View File

@@ -1,5 +1,3 @@
using System.Reflection;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public struct Point
@@ -12,6 +10,12 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
X = x;
Y = y;
}
public static bool operator ==(Point p1, Point p2) => p1.X == p2.X && p1.Y == p2.Y;
public static bool operator !=(Point p1, Point p2)
{
return !(p1 == p2);
}
}
}

View File

@@ -1,5 +1,3 @@
using System;
namespace BattleFieldSimulator.BattlefieldEnvironment
{
public struct EffectivenessRatios

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.Reflection;
using BattleFieldSimulator.Exceptions;
namespace BattleFieldSimulator.BattlefieldEnvironment
@@ -10,7 +9,7 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
public int EngagementDistance { get; }
public int TroopCount { get; }
public Mission Mission { get; }
public Point Location { get; }
public Point Location { get; set; }
public double MovementSpeed { get; }
public double WeaponDamage { get; }
public double Marksmanship { get; }
@@ -21,6 +20,7 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
public double CurrentSpeed { get; set; }
public List<Troop> IdentifiedEnemy { get; }
public int Fatalities { get; set; }
public Point Destination { get; set; }
@@ -56,9 +56,11 @@ namespace BattleFieldSimulator.BattlefieldEnvironment
Objective = objective;
IdentifiedEnemy = new List<Troop>();
Fatalities = 0;
Destination = objective;
ValidateTroop();
}
private void ValidateTroop()
{
if(SightDistance > 10 || SightDistance < 0)

View File

@@ -1,4 +1,6 @@
using System;
using System.IO;
using System.Linq;
using BattleFieldSimulator.SimRunner;
namespace BattleFieldSimulator.ConsoleClient
@@ -22,16 +24,17 @@ namespace BattleFieldSimulator.ConsoleClient
{
DisplayWelcome();
input = Console.ReadLine();
inputValid = ValidInput(input);
inputValid = ValidInput(input.Split(' ').ToList()[0]);
}
switch (input)
var inString = input.Split(' ').ToList();
switch (inString[0])
{
case "-h":
PrintHelpMenu();
break;
case "-r":
_simRunner.RunSimulation("SimpleMap.json", "SimpleTroopFile.json");
_simRunner.RunSimulation(inString[1], inString[2], inString[3]);
break;
default:
return;
@@ -41,7 +44,11 @@ namespace BattleFieldSimulator.ConsoleClient
private void PrintHelpMenu()
{
throw new NotImplementedException();
Console.WriteLine($"<-r mapFileName.json TroopFileName.json> Will execute the program on the given files. \n" +
$"A properly formatted man and troop json file are required. The files must be placed \n" +
$"in their respective folder locations. There are examples of what the files should \n" +
$"look like in there. \n \n" +
$"<-q> Will exit the program");
}
private bool ValidInput(string input) => input == "-h" || input == "-r" || input == "-q";
@@ -51,7 +58,7 @@ namespace BattleFieldSimulator.ConsoleClient
Console.WriteLine("Welcome to the battlefield simulator! \n \n " +
"Please make a selection: \n" +
"\t <-h> help menu \n" +
"\t <-r> run program \n" +
"\t <-r mapFileName.json TroopFileName.json outFile.txt> run program \n" +
"\t <-q> exit program \n");
}
}

View File

@@ -18,6 +18,8 @@ namespace BattleFieldSimulator
container.Register<IJsonSerializer, JsonSerializer>(Reuse.Singleton);
container.Register<ITroopLoader, TroopLoader>(Reuse.Singleton);
container.Register<ISimulation, Simulation>(Reuse.Singleton);
container.Register<IPathGenerator, PathGenerator>(Reuse.Singleton);
container.Register<IMapPrinter, MapPrinter>(Reuse.Singleton);
// container.Register<>(Reuse.Singleton);

View File

@@ -2,6 +2,6 @@ namespace BattleFieldSimulator.SimRunner
{
public interface ISimRunner
{
void RunSimulation(string mapName, string troopFile);
void RunSimulation(string mapName, string troopFile, string outFile);
}
}

View File

@@ -1,6 +1,4 @@
using System;
using BattleFieldSimulator.BattlefieldEnvironment;
using DryIoc;
using Environment = BattleFieldSimulator.BattlefieldEnvironment.Environment;
namespace BattleFieldSimulator.SimRunner
@@ -16,15 +14,15 @@ namespace BattleFieldSimulator.SimRunner
_simulation = simulation;
}
public void RunSimulation(string mapName, string troopFile)
public void RunSimulation(string mapName, string troopFile, string outFile)
{
var environment = Setup(mapName, troopFile);
var environment = Setup(mapName, troopFile, outFile);
_simulation.Run(environment);
}
private Environment Setup(string mapName, string troopFile)
private Environment Setup(string mapName, string troopFile, string outFile)
{
return _environmentSetup.Setup(mapName, troopFile);
return _environmentSetup.Setup(mapName, troopFile, outFile);
}
}
}

View File

@@ -1,19 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Xml.Schema;
using BattleFieldSimulator.BattlefieldEnvironment;
using BattleFieldSimulator.FileSystem;
namespace BattleFieldSimulator.SimRunner
{
public class Simulation : ISimulation
{
public Simulation()
private IPathGenerator _pathGenerator;
private IMapPrinter _mapPritner;
public Simulation(IPathGenerator pathGenerator, IMapPrinter mapPrinter)
{
_pathGenerator = pathGenerator;
_mapPritner = mapPrinter;
}
public void Run(IEnvironment environment)
@@ -21,49 +21,205 @@ namespace BattleFieldSimulator.SimRunner
var finished = false;
while (!finished)
{
PrintRoundInfo(environment);
RunRound(environment);
finished = CheckIfFinished(environment.Allies, environment.Adversaries);
}
if(environment.Adversaries.Count != 0)
Console.WriteLine($"The Enemy Won!!\n\n");
if(environment.Allies.Count != 0)
Console.WriteLine($"We Were Victorious!!\n\n");
}
private void PrintRoundInfo(IEnvironment environment)
{
Console.WriteLine($"Allies: {environment.Allies.Count} " +
$"\nAdversaries: {environment.Adversaries.Count}");
environment.OutFile.WriteLine($"Allies: {environment.Allies.Count} " +
$"\nAdversaries: {environment.Adversaries.Count}");
foreach(var ally in environment.Allies)
{
Console.WriteLine(
$"Ally {environment.Allies.IndexOf(ally)} Casualties: {ally.Fatalities} Initial Troop Count: {ally.TroopCount}");
environment.OutFile.WriteLine($"Ally {environment.Allies.IndexOf(ally)} Casualties: {ally.Fatalities} Initial Troop Count: {ally.TroopCount}");
}
foreach(var adversary in environment.Adversaries)
{
Console.WriteLine(
$"Adversary {environment.Adversaries.IndexOf(adversary)} Casualties: {adversary.Fatalities} Initial Troop Count: {adversary.TroopCount}");
environment.OutFile.WriteLine($"Adversary {environment.Adversaries.IndexOf(adversary)} Casualties: {adversary.Fatalities} Initial Troop Count: {adversary.TroopCount}");
}
_mapPritner.PrintMap(environment.Map, environment.Allies, environment.Adversaries, environment.OutFile);
}
private void RunRound(IEnvironment environment)
{
var map = environment.Map;
var allies = environment.Allies;
var allys = environment.Allies;
var adversaries = environment.Adversaries;
foreach (var troop in allies)
foreach (var troop in allys)
LookAround(troop, map, adversaries);
foreach (var troop in adversaries)
LookAround(troop, map, allies);
CheckCallForHelp(allies, adversaries);
LookAround(troop, map, allys);
CheckCallForHelp(allys, adversaries);
var nextTurn = false;
var current = 0;
foreach (var ally in allys.Where(ally => ally.IdentifiedEnemy.Count == 0))
{
if (ally.AssistanceQueue.Count == 0)
{
Move(ally, map, ally.Objective);
}
else
{
var smallest = double.MaxValue;
var destPoint = new Point(0,0);
foreach (var request in ally.AssistanceQueue)
{
var dist = Distance(request, ally.Location);
if (dist < smallest)
{
smallest = dist;
destPoint = request;
}
}
Move(ally, map, destPoint);
}
}
foreach (var adversary in adversaries.Where(adversary => adversary.IdentifiedEnemy.Count == 0))
{
if (adversary.AssistanceQueue.Count == 0 )
{
Move(adversary, map, adversary.Objective);
}
else
{
var smallest = double.MaxValue;
var destPoint = new Point(0,0);
foreach (var request in adversary.AssistanceQueue)
{
var dist = Distance(request, adversary.Location);
if (dist < smallest)
{
smallest = dist;
destPoint = request;
}
}
Move(adversary, map, destPoint);
}
}
while (!nextTurn)
{
if (current >= allies.Count && current >= adversaries.Count)
if (current >= allys.Count && current >= adversaries.Count)
nextTurn = true;
if (current < allies.Count)
Attack(allies[current], allies[current].IdentifiedEnemy);
if (current < allys.Count)
Attack(allys[current], allys[current].IdentifiedEnemy);
if (current < adversaries.Count)
Attack(adversaries[current], adversaries[current].IdentifiedEnemy);
if (current < allies.Count)
if (allies[current].TroopCount == allies[current].Fatalities)
allies.Remove(allies[current]);
//Clean up the Dead.
if (current < allys.Count)
if (allys[current].TroopCount == allys[current].Fatalities)
{
allys.Remove(allys[current]);
foreach (var adversary in adversaries)
{
adversary.IdentifiedEnemy.RemoveAll(n => n.TroopCount == n.Fatalities);
}
}
if (current < adversaries.Count)
if (adversaries[current].TroopCount == adversaries[current].Fatalities)
{
adversaries.Remove(adversaries[current]);
foreach (var ally in allys)
{
ally.IdentifiedEnemy.RemoveAll(n => n.Fatalities == n.TroopCount);
}
}
current++;
}
}
private void CheckCallForHelp(List<Troop> allies, List<Troop> adversaries)
private void Move(Troop troop, IMap map, Point destPoint)
{
foreach (var eTroop in from ally in allies from eTroop in ally.IdentifiedEnemy where CalculateAttackValues(eTroop, ally)>CalculateAttackValues(ally, eTroop) select eTroop)
var x = _pathGenerator.GeneratePaths(troop.Location, destPoint, map);
CalculateMove(x, map, troop);
}
private void CalculateMove(List<MapPath> mapPaths, IMap map, Troop troop)
{
mapPaths.OrderBy(p => p.Distance);
var path = mapPaths[0].Path;
path.Reverse();
var movement = GetMovementSpeed(troop);
var index = 0;
while (movement > 0)
{
CallForHelp(eTroop.Location, allies);
var current = path[index];
var next = path[index + 1];
if (Math.Abs(map.Grid[next.X][next.Y] - map.Grid[current.X][current.Y]) > 1)
movement -= 2;
else
movement--;
index++;
}
troop.Location = path[index];
}
private double GetMovementSpeed(Troop troop)
{
var r = new Random();
double speed;
if (troop.Mission == Mission.Attack)
{
if (troop.AssistanceQueue.Count > 0)
speed = troop.MovementSpeed;
else
{
if (NextBool(r, 65))
speed = troop.MovementSpeed;
else if (NextBool(r, 55))
speed = troop.MovementSpeed * .75;
else if (NextBool(r, 45))
speed = troop.MovementSpeed * .5;
else
speed = troop.MovementSpeed * .25;
}
}
else
{
if (troop.AssistanceQueue.Count > 0)
speed = troop.MovementSpeed * .75;
else
{
if (NextBool(r, 45))
speed = troop.MovementSpeed;
else if (NextBool(r, 35))
speed = troop.MovementSpeed * .75;
else if (NextBool(r, 25))
speed = troop.MovementSpeed * .5;
else
speed = troop.MovementSpeed * .15;
}
}
speed = (int) speed;
if (speed < 1)
speed = 1;
return speed;
}
private void CheckCallForHelp(List<Troop> allys, List<Troop> adversaries)
{
foreach (var eTroop in from ally in allys from eTroop in ally.IdentifiedEnemy where CalculateAttackValues(eTroop, ally)>CalculateAttackValues(ally, eTroop) select eTroop)
{
CallForHelp(eTroop.Location, allys);
}
foreach (var eTroop in from adversary in adversaries from eTroop in adversary.IdentifiedEnemy where CalculateAttackValues(eTroop, adversary)>CalculateAttackValues(adversary, eTroop) select eTroop)
{
@@ -113,11 +269,12 @@ namespace BattleFieldSimulator.SimRunner
var currentCell = new Point(x, y);
if (Distance(troop.Location, currentCell) < adjustedTroopSight)
nearbyTroops.AddRange(enemy.Where(q =>
q.Location.X == currentCell.X && q.Location.Y == currentCell.Y).ToList());
q.Location == currentCell && !troop.IdentifiedEnemy.Contains(q)).ToList());
}
}
troop.IdentifiedEnemy.AddRange(VerifyTroopSighting(nearbyTroops, troop, map));
}
private double CalculateTrueSightDistance(Troop troop)

View File

@@ -0,0 +1,174 @@
Allies: 2
Adversaries: 2
Ally 0 Casualties: 0 Initial Troop Count: 30
Ally 1 Casualties: 0 Initial Troop Count: 10
Adversary 0 Casualties: 0 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A . . . . . . .
. E . . . . . . . .
. . . . . . . E . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 2
Ally 0 Casualties: 20 Initial Troop Count: 30
Ally 1 Casualties: 5 Initial Troop Count: 10
Adversary 0 Casualties: 6 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A . . . E . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 2
Ally 0 Casualties: 22 Initial Troop Count: 30
Ally 1 Casualties: 6 Initial Troop Count: 10
Adversary 0 Casualties: 7 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A E . . . . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 2
Ally 0 Casualties: 26 Initial Troop Count: 30
Adversary 0 Casualties: 8 Initial Troop Count: 10
Adversary 1 Casualties: 4 Initial Troop Count: 15
A . . E . . . . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 2
Ally 0 Casualties: 27 Initial Troop Count: 30
Adversary 0 Casualties: 9 Initial Troop Count: 10
Adversary 1 Casualties: 5 Initial Troop Count: 15
A/E. . . . . . . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 27 Initial Troop Count: 30
Adversary 0 Casualties: 6 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 27 Initial Troop Count: 30
Adversary 0 Casualties: 7 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 27 Initial Troop Count: 30
Adversary 0 Casualties: 9 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 28 Initial Troop Count: 30
Adversary 0 Casualties: 9 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 29 Initial Troop Count: 30
Adversary 0 Casualties: 10 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 1
Adversaries: 1
Ally 0 Casualties: 29 Initial Troop Count: 30
Adversary 0 Casualties: 11 Initial Troop Count: 15
A/E. . . . . . . . .
. . . . . . . . . .

View File

@@ -0,0 +1,122 @@
Allies: 2
Adversaries: 2
Ally 0 Casualties: 0 Initial Troop Count: 30
Ally 1 Casualties: 0 Initial Troop Count: 10
Adversary 0 Casualties: 0 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A . . . . . . .
. E . . . . . . . .
. . . . . . . E . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 2
Ally 0 Casualties: 18 Initial Troop Count: 30
Ally 1 Casualties: 6 Initial Troop Count: 10
Adversary 0 Casualties: 6 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A . . . E . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 2
Ally 0 Casualties: 25 Initial Troop Count: 30
Ally 1 Casualties: 6 Initial Troop Count: 10
Adversary 0 Casualties: 9 Initial Troop Count: 10
Adversary 1 Casualties: 0 Initial Troop Count: 15
A . A E . . . . . .
. E . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 1
Ally 0 Casualties: 25 Initial Troop Count: 30
Ally 1 Casualties: 6 Initial Troop Count: 10
Adversary 0 Casualties: 5 Initial Troop Count: 15
A . A E . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 1
Ally 0 Casualties: 25 Initial Troop Count: 30
Ally 1 Casualties: 7 Initial Troop Count: 10
Adversary 0 Casualties: 10 Initial Troop Count: 15
A . A E . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 1
Ally 0 Casualties: 25 Initial Troop Count: 30
Ally 1 Casualties: 8 Initial Troop Count: 10
Adversary 0 Casualties: 12 Initial Troop Count: 15
A . A E . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------
Allies: 2
Adversaries: 1
Ally 0 Casualties: 25 Initial Troop Count: 30
Ally 1 Casualties: 8 Initial Troop Count: 10
Adversary 0 Casualties: 13 Initial Troop Count: 15
A . A E . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
--------------------

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
{
"Map": {
"X": "10",
"Y" : "10",
"Grid": [
[0, 0, 0, 0, 0, 0, 0, 5, 5, 0],
[0, 1, 1, 1, 0, 0, 0, 5, 5, 0],
[0, 2, 2, 2, 0, 0, 0, 5, 4, 0],
[0, 2, 3, 2, 0, 0, 0, 4, 3, 0],
[0, 2, 2, 1, 0, 0, 0, 3, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 2, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 1, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
}
}

View File

@@ -0,0 +1,81 @@
{
"Allies": [
{
"Troop":
{
"MovementSpeed": 1.5,
"SightDistance": 4,
"EngagementDistance": 3,
"WeaponDamage": 8.5,
"Marksmanship": 7,
"TroopCount": 30,
"Aggressiveness": 7,
"Defense": 6,
"Mission": "Defend",
"EntryPointX": 0,
"EntryPointY": 0,
"ObjectiveX": 0,
"ObjectiveY": 0
}
},
{
"Troop":
{
"MovementSpeed": 2.5,
"SightDistance": 2,
"EngagementDistance": 1,
"WeaponDamage": 5,
"Marksmanship": 4,
"TroopCount": 10,
"Aggressiveness": 10,
"Defense": 3,
"Mission": "Defend",
"EntryPointX": 0,
"EntryPointY": 2,
"ObjectiveX": 0,
"ObjectiveY": 0
}
}
],
"Adversaries": [
{
"Troop":
{
"MovementSpeed": 2.5,
"SightDistance": 3,
"EngagementDistance": 1,
"WeaponDamage": 7,
"Marksmanship": 4,
"TroopCount": 10,
"Aggressiveness": 10,
"Defense": 3,
"Mission": "Attack",
"EntryPointX": 1,
"EntryPointY": 1,
"ObjectiveX": 0,
"ObjectiveY": 0
}
},
{
"Troop":
{
"MovementSpeed": 2.5,
"SightDistance": 2,
"EngagementDistance": 1,
"WeaponDamage": 1,
"Marksmanship": 4,
"TroopCount": 15,
"Aggressiveness": 10,
"Defense": 3,
"Mission": "Attack",
"EntryPointX": 2,
"EntryPointY": 7,
"ObjectiveX": 0,
"ObjectiveY": 0
}
}
]
}

View File

@@ -0,0 +1,10 @@
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/maps/SimpleMap.json
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/troops/SimpleTroopFile.json
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/BattleFieldSimulator.exe
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/BattleFieldSimulator.pdb
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/Newtonsoft.Json.dll
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/Newtonsoft.Json.xml
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.csprojAssemblyReference.cache
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.csproj.CopyComplete
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.exe
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.pdb

View File

@@ -0,0 +1,10 @@
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/maps/SimpleMap.json
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/troops/SimpleTroopFile.json
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/BattleFieldSimulator.exe
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/BattleFieldSimulator.pdb
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/Newtonsoft.Json.dll
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/bin/Release/Newtonsoft.Json.xml
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.csprojAssemblyReference.cache
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.csproj.CopyComplete
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.exe
/Users/bradybodily/Repositories/CS5110_Multi_Agent/BattleFieldSimulator/BattleFieldSimulator/obj/Release/BattleFieldSimulator.pdb