summaryrefslogtreecommitdiff
path: root/MorgSimulator/Program.cs
blob: 29fd971d77e88eebea7a3fe847be8c4c10bc7cc6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using MorgSimulator;
using MorgSimulator.Reader;
using MorgSimulator.Factory;

var dish = new Dish();
var factory = new MorgFactory();
var fileReader = new FileReader("morgs.txt");
var csvReader = new CSVReader(fileReader);
var morgReader = new MorgReader(csvReader, factory);
int id = 1;

while (!morgReader.EndOfStream)
{
    var morg = morgReader.ReadMorg(id++);

    if (morg != null)
        dish.AddMorg(morg);
}

morgReader.Close();

const int RUN_TIME = 15;

for (int timeStep = 0; timeStep < RUN_TIME; timeStep++)
    foreach (var morg in dish.GetAllMorgs())
        if (morg.IsAlive)
        {
            if (morg.Prey == null || !morg.Prey.IsAlive)
            {
                var nearestPrey = dish.FindNearestPrey(morg);

                if (nearestPrey != null)
                {
                    nearestPrey.Attach(morg);

                    morg.Prey = nearestPrey;
                    morg.Direction = morg.CalculateDirectionToTarget(nearestPrey.Location);
                }
            }

            morg.Move();
            morg.Notify();

            if (morg.Prey != null && morg.Prey.IsAlive && morg.DistanceTo(morg.Prey.Location) <= 1.0)
                morg.Feed();
        }