Non-working but with all the logic, needs debug
This commit is contained in:
@@ -47,7 +47,7 @@ namespace SharpPropagation
|
||||
Dimensions = dimensions;
|
||||
Rnd = rnd;
|
||||
Age = 0;
|
||||
Humans = new Human[dimensions.Width,dimensions.Height];
|
||||
Humans = new Human[dimensions.Width, dimensions.Height];
|
||||
|
||||
Generate();
|
||||
}
|
||||
@@ -122,6 +122,181 @@ namespace SharpPropagation
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public void Propagate()
|
||||
{
|
||||
int test = 0;
|
||||
int[] stats;
|
||||
do
|
||||
{
|
||||
|
||||
test++;
|
||||
/*
|
||||
if (test > 100)
|
||||
{
|
||||
Display();
|
||||
test = 0;
|
||||
}
|
||||
*/
|
||||
stats = GetStats();
|
||||
List<Human> peopleToCheck = new List<Human>();
|
||||
|
||||
//Parallel.For(0, Dimensions.Width,x =>
|
||||
for (int x = 0; x < Dimensions.Width; x++)
|
||||
{
|
||||
//Parallel.For(0, Dimensions.Width,y =>
|
||||
for (int y = 0; y < Dimensions.Width; y++)
|
||||
{
|
||||
switch (Humans[x, y].PresentState)
|
||||
{
|
||||
//for now only infected peoples are interesting
|
||||
case Human.State.Infected:
|
||||
peopleToCheck.Add(Humans[x, y]);
|
||||
break;
|
||||
default:
|
||||
//do nothing
|
||||
break;
|
||||
}
|
||||
}//);
|
||||
}//);
|
||||
|
||||
List<Human> peopleToInfect = new List<Human>();
|
||||
List<Human> peopleToCure = new List<Human>();
|
||||
List<Human> peopleToKill = new List<Human>();
|
||||
|
||||
//Parallel.ForEach(peopleToCheck, person =>
|
||||
foreach (Human person in peopleToCheck)
|
||||
{
|
||||
//I am assuming that if the Human is Curing or dying on this tick, he cant infect anyone
|
||||
if (wouldCure())
|
||||
{
|
||||
peopleToCure.Add(person);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wouldDie())
|
||||
{
|
||||
peopleToKill.Add(person);
|
||||
}
|
||||
else
|
||||
{
|
||||
//now we can start to check if people would be infected or not
|
||||
if (person.Position.X > 0 && person.Position.X < Dimensions.Width - 1 && person.Position.Y > 0 && person.Position.Y < Dimensions.Height - 1)
|
||||
{
|
||||
/// ###
|
||||
/// #@#
|
||||
/// ###
|
||||
|
||||
List<Human> potentialInfections = new List<Human>();
|
||||
//potentialInfections.Add(Humans[person.Position.X,person.Position.Y]);
|
||||
|
||||
potentialInfections.Add(Humans[person.Position.X - 1, person.Position.Y - 1]); //Top Left
|
||||
potentialInfections.Add(Humans[person.Position.X, person.Position.Y - 1]); //Top
|
||||
potentialInfections.Add(Humans[person.Position.X + 1, person.Position.Y - 1]); //Top Right
|
||||
|
||||
potentialInfections.Add(Humans[person.Position.X - 1, person.Position.Y]); //Left
|
||||
potentialInfections.Add(Humans[person.Position.X + 1, person.Position.Y]); //Right
|
||||
|
||||
potentialInfections.Add(Humans[person.Position.X - 1, person.Position.Y + 1]); //Bottom Left
|
||||
potentialInfections.Add(Humans[person.Position.X, person.Position.Y + 1]); //Bottom
|
||||
potentialInfections.Add(Humans[person.Position.X + 1, person.Position.Y + 1]); //Bottom Right
|
||||
|
||||
foreach (Human potentialInfected in potentialInfections)
|
||||
{
|
||||
if (wouldBeInfected())
|
||||
{
|
||||
if (potentialInfected.PresentState == Human.State.Normal)
|
||||
{
|
||||
peopleToInfect.Add(potentialInfected);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO
|
||||
//Check every special cases (corners sides etc..)
|
||||
|
||||
//REMOVE WHEN IMPLEMENTED
|
||||
//It is here to prevent an infected in the borders to keep the programm running as he thinks there are still people to simulate
|
||||
peopleToKill.Add(person);
|
||||
|
||||
/// @##
|
||||
/// ###
|
||||
/// ###
|
||||
|
||||
/// #@#
|
||||
/// ###
|
||||
/// ###
|
||||
|
||||
/// ##@
|
||||
/// ###
|
||||
/// ###
|
||||
|
||||
/// ###
|
||||
/// @##
|
||||
/// ###
|
||||
|
||||
/// ###
|
||||
/// ##@
|
||||
/// ###
|
||||
|
||||
/// ###
|
||||
/// ###
|
||||
/// @##
|
||||
|
||||
/// ###
|
||||
/// ###
|
||||
/// #@#
|
||||
|
||||
/// ###
|
||||
/// ###
|
||||
/// ##@
|
||||
}
|
||||
}
|
||||
}
|
||||
}//);
|
||||
if (peopleToInfect.Count > 0)
|
||||
{
|
||||
//Parallel.ForEach(peopleToInfect, infected =>
|
||||
foreach (Human infected in peopleToInfect)
|
||||
{
|
||||
Humans[infected.Position.X, infected.Position.Y].PresentState = Human.State.Infected;
|
||||
}//);
|
||||
}
|
||||
if (peopleToCure.Count > 0)
|
||||
{
|
||||
//Parallel.ForEach(peopleToCure, cured =>
|
||||
foreach (Human cured in peopleToCure)
|
||||
{
|
||||
Humans[cured.Position.X, cured.Position.Y].PresentState = Human.State.Immune;
|
||||
}//);
|
||||
}
|
||||
if (peopleToKill.Count > 0)
|
||||
{
|
||||
//Parallel.ForEach(peopleToKill, dead =>
|
||||
foreach (Human dead in peopleToKill)
|
||||
{
|
||||
Humans[dead.Position.X, dead.Position.Y].PresentState = Human.State.Dead;
|
||||
}//);
|
||||
}
|
||||
|
||||
} /*while (stats[1] > 0);*/ while (test < 1000);
|
||||
// It will run until the last infected man either dies or cures
|
||||
}
|
||||
public bool wouldBeInfected()
|
||||
{
|
||||
return Rnd.Next(0, CORRECTED_PERCENTAGE) > Plague.InfectionRate;
|
||||
}
|
||||
public bool wouldCure()
|
||||
{
|
||||
//You could add a modifier that increases the curing chance with the age of the disease in the Human
|
||||
//Like after 2 weeks with it it would be at least 5 times more likely for him to cure
|
||||
return Rnd.Next(0, CORRECTED_PERCENTAGE) > Plague.CuringRate;
|
||||
}
|
||||
public bool wouldDie()
|
||||
{
|
||||
return Rnd.Next(0, CORRECTED_PERCENTAGE) > Plague.DeathRate;
|
||||
}
|
||||
public void Display()
|
||||
{
|
||||
int[] stats = GetStats();
|
||||
@@ -141,27 +316,29 @@ namespace SharpPropagation
|
||||
switch (Humans[x, y].PresentState)
|
||||
{
|
||||
case Human.State.Normal:
|
||||
Console.BackgroundColor = ConsoleColor.Green;
|
||||
//Console.BackgroundColor = ConsoleColor.Green;
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
break;
|
||||
case Human.State.Infected:
|
||||
Console.BackgroundColor = ConsoleColor.Red;
|
||||
//Console.BackgroundColor = ConsoleColor.Red;
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
break;
|
||||
case Human.State.Immune:
|
||||
Console.BackgroundColor = ConsoleColor.Blue;
|
||||
//Console.BackgroundColor = ConsoleColor.Blue;
|
||||
Console.ForegroundColor = ConsoleColor.Blue;
|
||||
break;
|
||||
case Human.State.Dead:
|
||||
Console.BackgroundColor = ConsoleColor.Gray;
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
//Console.BackgroundColor = ConsoleColor.Gray;
|
||||
Console.ForegroundColor = ConsoleColor.Black;
|
||||
break;
|
||||
default:
|
||||
Console.BackgroundColor = ConsoleColor.Black;
|
||||
Console.ForegroundColor = ConsoleColor.Black;
|
||||
//Console.BackgroundColor = ConsoleColor.Black;
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
break;
|
||||
}
|
||||
Console.Write(sprite);
|
||||
//We reset to the default
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,17 +12,16 @@ namespace SharpPropagation
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("********** Sharp Propagation (Console) 2022 **********");
|
||||
Console.WriteLine("Press any key to start the propagation");
|
||||
Console.ReadLine();
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
Population peoples = new Population(new Size(30,50),random,10,10,5);
|
||||
peoples.SetDisease(new Disease(random,20,10,5,"Chick Chicken"));
|
||||
Console.WriteLine("Before Propagation");
|
||||
peoples.Display();
|
||||
peoples.Propagate();
|
||||
Console.WriteLine("After Propagation");
|
||||
peoples.Display();
|
||||
|
||||
Console.ReadKey();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user