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; } } } }
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); }
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(); } }
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))); } } }
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(); } }
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(); }); }
public static Cell GetCellFromPlayground(Playground pPlayground, int pPositionX, int pPositionY) { return(pPlayground.PlaygroundCells[(pPlayground.Width * pPositionY) + pPositionX]); }
private void InitPlayground(ref Playground pPlayground, int pWidth, int pHeight) { pPlayground = new Playground(pWidth, pHeight); }
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(); } }