コード例 #1
0
ファイル: Program.cs プロジェクト: taylorjg/GameOfLife
 private static void EraseCell(Coords gridCoords, CellState cellState)
 {
     if (GridCoordsAreWithinBounds(gridCoords))
     {
         DrawCharacter(gridCoords, ' ');
     }
 }
コード例 #2
0
ファイル: Rules.cs プロジェクト: taylorjg/GameOfLife
        // Any live cell with fewer than two live neighbours dies, as if caused by under-population.
        // Any live cell with two or three live neighbours lives on to the next generation.
        // Any live cell with more than three live neighbours dies, as if by overcrowding.
        // Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
        internal static bool CurrentlyAliveCellWillStillBeALiveInTheNextGeneration(Grid currentGrid, Coords coords)
        {
            var numLiveNeighbours = GetNumLiveNeighbours(currentGrid, coords);

            // Rules 1, 2 and 3.
            return (numLiveNeighbours == 2 || numLiveNeighbours == 3);
        }
コード例 #3
0
ファイル: Rules.cs プロジェクト: taylorjg/GameOfLife
        internal static bool CurrentlyDeadCellWillBecomeALiveInTheNextGeneration(Grid currentGrid, Coords coords)
        {
            var numLiveNeighbours = GetNumLiveNeighbours(currentGrid, coords);

            // Rule 4.
            return (numLiveNeighbours == 3);
        }
コード例 #4
0
ファイル: Universe.cs プロジェクト: taylorjg/GameOfLife
        private bool CellWasDeadInPreviousGrid(Coords coords)
        {
            var cellHasComeAlive = true;

            if (_previousGrid != null)
            {
                cellHasComeAlive = !_previousGrid.IsLiveCellAt(coords);
            }

            return cellHasComeAlive;
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: taylorjg/GameOfLife
        private static void DrawCell(Coords gridCoords, CellState cellState)
        {
            if (GridCoordsAreWithinBounds(gridCoords))
            {
                var savedForegroundColor = Console.ForegroundColor;

                Console.ForegroundColor = cellState.IsZombie ? ConsoleColor.Magenta : ConsoleColor.Cyan;
                DrawCharacter(gridCoords, 'X');

                Console.ForegroundColor = savedForegroundColor;
            }
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: taylorjg/GameOfLife
 private static void DrawCharacter(Coords gridCoords, char character)
 {
     var consoleCoords = GridCoordsToConsoleCoords(gridCoords);
     Console.SetCursorPosition(consoleCoords.X, consoleCoords.Y);
     Console.Write(character);
 }
コード例 #7
0
 public void SetUp()
 {
     _coords = new Coords(12, 13);
 }
コード例 #8
0
ファイル: Grid.cs プロジェクト: taylorjg/GameOfLife
 public void MarkZombieCellAt(Coords coords)
 {
     _cells[coords] = CellState.ZombieCellState();
 }
コード例 #9
0
ファイル: Grid.cs プロジェクト: taylorjg/GameOfLife
 public void MarkWasPreviouslyAliveCellAt(Coords coords)
 {
     _cells[coords] = CellState.WasPreviouslyAliveCellState();
 }
コード例 #10
0
ファイル: Grid.cs プロジェクト: taylorjg/GameOfLife
 public bool IsLiveCellAt(Coords coords)
 {
     return _cells.ContainsKey(coords) && _cells[coords].IsAlive;
 }
コード例 #11
0
ファイル: Grid.cs プロジェクト: taylorjg/GameOfLife
 public bool CellWasPreviouslyAliveAt(Coords coords)
 {
     return _cells.ContainsKey(coords) && _cells[coords].WasPreviouslyAlive;
 }
コード例 #12
0
ファイル: Universe.cs プロジェクト: taylorjg/GameOfLife
 private bool CellIsDeadInCurrentGrid(Coords coords)
 {
     return !_currentGrid.IsLiveCellAt(coords);
 }
コード例 #13
0
ファイル: Universe.cs プロジェクト: taylorjg/GameOfLife
 public void AddSeedCellAt(Coords coords)
 {
     _currentGrid.MarkLiveCellAt(coords);
 }
コード例 #14
0
ファイル: Rules.cs プロジェクト: taylorjg/GameOfLife
 private static int GetNumLiveNeighbours(Grid currentGrid, Coords coords)
 {
     var coordsOfNeighbours = coords.Neighbours();
     return coordsOfNeighbours.Count(currentGrid.IsLiveCellAt);
 }
コード例 #15
0
ファイル: Program.cs プロジェクト: taylorjg/GameOfLife
 private static bool GridCoordsAreWithinBounds(Coords gridCoords)
 {
     return Math.Abs(gridCoords.X) <= MaxOffsetFromOriginX &&
            Math.Abs(gridCoords.Y) <= MaxOffsetFromOriginY;
 }
コード例 #16
0
ファイル: Grid.cs プロジェクト: taylorjg/GameOfLife
 public void MarkLiveCellAt(Coords coords)
 {
     _cells[coords] = CellState.AliveCellState();
 }
コード例 #17
0
ファイル: Program.cs プロジェクト: taylorjg/GameOfLife
 private static Coords GridCoordsToConsoleCoords(Coords coords)
 {
     return Coords.Create(
         MaxOffsetFromOriginX + coords.X,
         OverallBoardSizeY - MaxOffsetFromOriginY - coords.Y - 1);
 }
コード例 #18
0
        private void AssertThatGridContainsExpectedLiveCellsAfterTick(Universe universe, Coords[] setOfExpectedCoords)
        {
            universe.Tick();

            var coordsOfLiveCells = new List<Coords>();
            universe.IterateLiveCells((coords, cellState) => coordsOfLiveCells.Add(coords));

            Assert.That(setOfExpectedCoords, Is.Unique);
            Assert.That(coordsOfLiveCells, Is.Unique);

            Assert.That(coordsOfLiveCells.Count(), Is.EqualTo(setOfExpectedCoords.Count()), "Found the wrong number of live cells");

            foreach (var expectedCoords in setOfExpectedCoords)
            {
                var match = coordsOfLiveCells.FirstOrDefault(coords => coords.Equals(expectedCoords));
                var message = string.Format("Expected to find a live cell at ({0}, {1})", expectedCoords.X, expectedCoords.Y);
                Assert.That(match, Is.Not.Null, message);
            }
        }