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
|
DX9Target Cible = new DX9Target();
FloatParallelArray Valeur0 = new FloatParallelArray(0, new int[2] { Largeur, Hauteur });
FloatParallelArray Valeur1 = new FloatParallelArray(1, new int[2] { Largeur, Hauteur });
FloatParallelArray Valeur2 = new FloatParallelArray(2, new int[2] { Largeur, Hauteur });
FloatParallelArray Valeur3 = new FloatParallelArray(3, new int[2] { Largeur, Hauteur });
override public void Générer()
{
FloatParallelArray Voisines = new FloatParallelArray(0, new int[2] { Largeur, Hauteur });
FloatParallelArray Cellules = new FloatParallelArray(Génération);
//Cumul des valeurs des voisines
for (int Y = -1; Y <= 1; Y++)
{
for (int X = -1; X <= 1; X++)
{
if (!(X == 0 && Y == 0))
{
Voisines = Voisines + ParallelArrays.Rotate(Cellules, Y, X);
}
}
}
//Regarde si il y a 2 voisines
BoolParallelArray Resultat_1a = ParallelArrays.CompareEqual(Voisines, Valeur2);
//Vivante si il y a 2 voisines, Morte sinon
FloatParallelArray Resultat_1b = ParallelArrays.Cond(Resultat_1a, Valeur1, Valeur0);
//Si morte : pas d'importance qu'il y ait eu 2 voisines
FloatParallelArray Resultat_1c = ParallelArrays.Min(Resultat_1b, Cellules);
//Regarde si il y a 3 voisines
BoolParallelArray Resultat_2a = ParallelArrays.CompareEqual(Voisines, Valeur3);
//Vivante si il y a 3 voisines, morte sinon
FloatParallelArray Resultat_2b = ParallelArrays.Cond(Resultat_2a, Valeur1, Valeur0);
//Regarde si vivant dans au moins un des deux test
Cellules = ParallelArrays.Max(Resultat_1c, Resultat_2b);
//Evaluation
Cible.ToArray(Cellules, out Génération);
} |
Partager