Esempio n. 1
0
        public static void SubstructueCreation(this Grid grid, Substructures substructure, int grains)
        {
            if (grid.NotEmptyCells.Length == 0)
            {
                return;
            }

            var random    = new Random();
            var chosenIds = new List <int>();

            for (int i = 0; i < grains; i++)
            {
                var x = random.Next(grid.Width);
                var y = random.Next(grid.Height);

                var id = grid.Cells[x, y];

                if (!chosenIds.Contains(id) && id != 0 && id != 1)
                {
                    chosenIds.Add(id);
                }
                else
                {
                    i--;
                }
            }

            grid.NotEmptyCells = new bool[grid.Width, grid.Height];

            switch (substructure)
            {
            case Substructures.Substructure:
            {
                Parallel.For(0, grid.Width, (i) => {
                        Parallel.For(0, grid.Height, (j) => {
                            if (!chosenIds.Contains(grid.Cells[i, j]))
                            {
                                grid.Cells[i, j] = 0;
                            }
                            else
                            {
                                grid.NotEmptyCells[i, j] = true;
                            }
                        });
                    });

                grid.ReservationId.AddRange(chosenIds);
                break;
            }

            case Substructures.DualPhase:
            {
                Parallel.For(0, grid.Width, (i) => {
                        Parallel.For(0, grid.Height, (j) => {
                            if (!chosenIds.Contains(grid.Cells[i, j]))
                            {
                                grid.Cells[i, j] = 0;
                            }
                            else
                            {
                                grid.Cells[i, j]         = chosenIds.First();
                                grid.NotEmptyCells[i, j] = true;
                            }
                        });
                    });
                grid.ReservationId.Add(chosenIds.First());
                break;
            }
            }
        }
Esempio n. 2
0
        public static void CreateSubstructure(this Matrix matrix, Substructures substructure, int grains)
        {
            if (matrix.NotEmptyCells.Length == 0)
            {
                return;
            }

            var random    = new Random();
            var chosenIds = new List <int>();

            for (int i = 0; i < grains; i++)
            {
                var x = random.Next(matrix.Width);
                var y = random.Next(matrix.Height);

                var id = matrix.Cells[x, y];

                if (!chosenIds.Contains(id) && id != 0 && id != 1)
                {
                    chosenIds.Add(id);
                }
                else
                {
                    i--;
                }
            }

            matrix.NotEmptyCells = new bool[matrix.Width, matrix.Height];

            switch (substructure)
            {
            case Substructures.Substructure:
            {
                Parallel.For(0, matrix.Width, (i) => {
                        Parallel.For(0, matrix.Height, (j) => {
                            if (!chosenIds.Contains(matrix.Cells[i, j]))
                            {
                                matrix.Cells[i, j] = 0;
                            }
                            else
                            {
                                matrix.NotEmptyCells[i, j] = true;
                            }
                        });
                    });

                matrix.RestrictedIds.AddRange(chosenIds);
                break;
            }

            case Substructures.DualPhase:
            {
                Parallel.For(0, matrix.Width, (i) => {
                        Parallel.For(0, matrix.Height, (j) => {
                            if (!chosenIds.Contains(matrix.Cells[i, j]))
                            {
                                matrix.Cells[i, j] = 0;
                            }
                            else
                            {
                                matrix.Cells[i, j]         = chosenIds.FirstOrDefault();
                                matrix.NotEmptyCells[i, j] = true;
                            }
                        });
                    });
                matrix.RestrictedIds.Add(chosenIds.FirstOrDefault());
                break;
            }
            }
        }
Esempio n. 3
0
        public async Task CreateSubstructure(Substructures substructure, int grains)
        {
            await Task.Run(() => this.grid1.SubstructueCreation(substructure, grains));

            OverwriteGrid(grid1, grid2);
        }
Esempio n. 4
0
        public async Task CreateSubstructure(Substructures substructure, int grains)
        {
            await Task.Run(() => this.matrix1.CreateSubstructure(substructure, grains));

            CloneMatrix(matrix1, matrix2);
        }