示例#1
0
        private void GeneratePlayground(ref Playground pPlayground)
        {
            pPlayground.ResetPlayground();

            var rnd = new Random();

            foreach (var cell in pPlayground.PlaygroundCells)
            {
                if (rnd.NextDouble() < (float)numeric_probability.Value)
                {
                    switch (rnd.Next(Enum.GetNames(typeof(Shapes.ShapesType)).Length))
                    {
                    case (int)Shapes.ShapesType.BEACON: Shapes.SetBeaconTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.BEEHIVE: Shapes.SetBeehiveTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.BLINKER: Shapes.SetBlinkerTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.BLOCK: Shapes.SetBlockTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.BOAT: Shapes.SetBoatTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.GLIDER: Shapes.SetGliderTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.LOAF: Shapes.SetLoafTo(cell.PositionX, cell.PositionY, pPlayground); break;

                    case (int)Shapes.ShapesType.PULSAR: Shapes.SetPulsarTo(cell.PositionX, cell.PositionY, pPlayground); break;
                    }
                }
            }
        }
示例#2
0
        public static Cell GetCellNeighborOnDirectionFromPlayground(Playground pPlayground, Cell pCell, NeighborOnDirection pNeighborOnDirection)
        {
            switch (pNeighborOnDirection)
            {
            case NeighborOnDirection.NORTH:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX, pCell.PositionY - Config.neighborOffset));

            case NeighborOnDirection.EAST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX + Config.neighborOffset, pCell.PositionY));

            case NeighborOnDirection.SOUTH:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX, pCell.PositionY + Config.neighborOffset));

            case NeighborOnDirection.WEST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX - Config.neighborOffset, pCell.PositionY));

            case NeighborOnDirection.NORTH_WEST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX - Config.neighborOffset, pCell.PositionY - Config.neighborOffset));

            case NeighborOnDirection.NORTH_EAST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX + Config.neighborOffset, pCell.PositionY - Config.neighborOffset));

            case NeighborOnDirection.SOUTH_WEST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX - Config.neighborOffset, pCell.PositionY + Config.neighborOffset));

            case NeighborOnDirection.SOUTH_EAST:
                return(GetCellFromPlayground(pPlayground, pCell.PositionX + Config.neighborOffset, pCell.PositionY + Config.neighborOffset));
            }

            return(null);
        }
示例#3
0
 public static void SetBlinkerTo(int pPositionX, int pPositionY, Playground pPlayground)
 {
     if (pPlayground.Width > pPositionX + 2 && pPlayground.Height > pPositionY + 2)
     {
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX, pPositionY + 0).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX, pPositionY + 1).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX, pPositionY + 2).SetLife();
     }
 }
示例#4
0
 private void PlaygroundToBitmap(Playground pPlayground, ref Bitmap pBitmap)
 {
     for (int x = 0; x < pPlayground.Width; x++)
     {
         for (int y = 0; y < pPlayground.Height; y++)
         {
             pBitmap.SetPixel(x, y, GetCellColor(PlaygroundHelper.GetCellFromPlayground(pPlayground, x, y)));
         }
     }
 }
示例#5
0
 public static void SetLoafTo(int pPositionX, int pPositionY, Playground pPlayground)
 {
     if (pPlayground.Width > pPositionX + 3 && pPlayground.Height > pPositionY + 3)
     {
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 1, pPositionY + 0).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 0).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 1).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 2).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 1).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 1, pPositionY + 2).SetLife();
         PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 3).SetLife();
     }
 }
示例#6
0
        private void SwapAndClearPlaygrounds(ref Playground pPlaygroundResult, ref Playground pPlaygroundToSwap)
        {
            var playgroundResult = pPlaygroundResult;
            var playgroundToSwap = pPlaygroundToSwap;

            Parallel.For(0, playgroundResult.PlaygroundCells.Count, new ParallelOptions {
                MaxDegreeOfParallelism = _numOfThreads
            }, p =>
            {
                var cell = playgroundResult.PlaygroundCells[p];

                if (playgroundToSwap.PlaygroundCells[p].IsLife)
                {
                    cell.SetLife();
                }
                else
                {
                    cell.SetDead();
                }

                playgroundToSwap.PlaygroundCells[p].SetDead();
            });
        }
示例#7
0
 public static Cell GetCellFromPlayground(Playground pPlayground, int pPositionX, int pPositionY)
 {
     return(pPlayground.PlaygroundCells[(pPlayground.Width * pPositionY) + pPositionX]);
 }
示例#8
0
 private void InitPlayground(ref Playground pPlayground, int pWidth, int pHeight)
 {
     pPlayground = new Playground(pWidth, pHeight);
 }
示例#9
0
        public static void SetPulsarTo(int pPositionX, int pPositionY, Playground pPlayground)
        {
            if (pPlayground.Width > pPositionX + 12 && pPlayground.Height > pPositionY + 12)
            {
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 0).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 0).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 4, pPositionY + 0).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 8, pPositionY + 0).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 9, pPositionY + 0).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 10, pPositionY + 0).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 12).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 12).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 4, pPositionY + 12).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 8, pPositionY + 12).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 9, pPositionY + 12).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 10, pPositionY + 12).SetLife();

                //--------------------------------------------------------------------------------------------//

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 2).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 3).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 4).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 8).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 9).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 0, pPositionY + 10).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 2).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 3).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 4).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 8).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 9).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 12, pPositionY + 10).SetLife();

                //--------------------------------------------------------------------------------------------//

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 5).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 5).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 4, pPositionY + 5).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 8, pPositionY + 5).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 9, pPositionY + 5).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 10, pPositionY + 5).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 2, pPositionY + 7).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 3, pPositionY + 7).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 4, pPositionY + 7).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 8, pPositionY + 7).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 9, pPositionY + 7).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 10, pPositionY + 7).SetLife();

                //--------------------------------------------------------------------------------------------//

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 2).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 3).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 4).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 8).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 9).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 5, pPositionY + 10).SetLife();

                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 2).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 3).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 4).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 8).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 9).SetLife();
                PlaygroundHelper.GetCellFromPlayground(pPlayground, pPositionX + 7, pPositionY + 10).SetLife();
            }
        }