public GravityCell[,] GetNeumanNeighbours(int x, int y) { int[] neighbours = new int[neighbourhood.GetGrains().Count]; for (int i = 0; i < neighbourhood.GetGrains().Count; ++i) { neighbours[i] = 0; } int[] closeNeighbours = neighbourhood.GetPeriodicIndex(x, y); int left = closeNeighbours[0]; int right = closeNeighbours[1]; int up = closeNeighbours[2]; int down = closeNeighbours[3]; if (neighbourhood.GetSeedTab()[left, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[left, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[right, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[right, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[x, up].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, up].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[x, down].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, down].GetValue() - 1]++; } return(neighbourhood.GetBiggestNaighbour(neighbours, x, y)); }
public GravityCell[,] GetHexagonalNeighbours(int x, int y, int hexaCase) { int[] neighbours = new int[neighbourhood.GetGrains().Count]; for (int i = 0; i < neighbourhood.GetGrains().Count; ++i) { neighbours[i] = 0; } int[] closeNeighbours = neighbourhood.GetPeriodicIndex(x, y); int left = closeNeighbours[0]; int right = closeNeighbours[1]; int up = closeNeighbours[2]; int down = closeNeighbours[3]; switch (hexaCase) { case 0: if (neighbourhood.GetSeedTab()[x, up].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, up].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[right, up].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[right, up].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[right, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[right, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[left, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[left, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[left, down].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[left, down].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[x, down].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, down].GetValue() - 1]++; } break; case 1: if (neighbourhood.GetSeedTab()[x, up].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, up].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[left, up].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[left, up].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[left, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[left, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[right, y].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[right, y].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[right, down].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[right, down].GetValue() - 1]++; } if (neighbourhood.GetSeedTab()[x, down].GetValue() != 0) { neighbours[neighbourhood.GetSeedTab()[x, down].GetValue() - 1]++; } break; default: break; } return(neighbourhood.GetBiggestNaighbour(neighbours, x, y)); }