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; } } }
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; } } }
public async Task CreateSubstructure(Substructures substructure, int grains) { await Task.Run(() => this.grid1.SubstructueCreation(substructure, grains)); OverwriteGrid(grid1, grid2); }
public async Task CreateSubstructure(Substructures substructure, int grains) { await Task.Run(() => this.matrix1.CreateSubstructure(substructure, grains)); CloneMatrix(matrix1, matrix2); }