Example #1
0
        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));
        }
Example #2
0
        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));
        }