public GenerationController(Vector gridSize)
        {
            this.GridSize = gridSize;

            _grid = new Grid(this.GridSize);
            _timmer = new Stopwatch();
        }
        public static List<Line> GenerateGridLines(Vector gridVector, Vector cellVector)
        {
            var lines = new List<Line>();
            lines.AddRange(GridLinesGenerator.GenerateVerticalLines(gridVector, cellVector));
            lines.AddRange(GridLinesGenerator.GenerateHorizontalLines(gridVector, cellVector));

            return lines;
        }
Exemple #3
0
        private Vector[,] GetCellNeighbours(int cellPositionX, int cellPositionY)
        {
            var neighbours = new Vector[3, 3]
            {
                {new Vector(cellPositionX - 1, cellPositionY - 1), new Vector(cellPositionX - 1, cellPositionY), new Vector(cellPositionX - 1, cellPositionY + 1)},
                {new Vector(cellPositionX, cellPositionY - 1),     new Vector(int.MinValue, int.MinValue),       new Vector(cellPositionX, cellPositionY + 1)},
                {new Vector(cellPositionX + 1, cellPositionY - 1), new Vector(cellPositionX + 1, cellPositionY), new Vector(cellPositionX + 1, cellPositionY + 1)}
            };

            return neighbours;
        }
Exemple #4
0
        public Grid(Vector gridSize)
        {
            Cells = new Cell[gridSize.X, gridSize.Y];

            this.InitializeCells();

            _cellsMarkedToBirth = new List<Cell>();
            _cellsMarkedToDeath = new List<Cell>();

            _cellsWidth = this.Cells.GetLength(0);
            _cellsHeight = this.Cells.GetLength(1);
        }
        public void SetInitialState_LiveCells_ConfirmGrid(int[] aliveCells)
        {
            var gridSize = new Vector(3, 3);
            var cells = new List<Vector>();
            var generationController = new GenerationController(gridSize);

            for (int i = 0; i < aliveCells.Length; i = i + 2)
                cells.Add(new Vector(aliveCells[i], aliveCells[i + 1]));

            generationController.SetInitialState(cells);

            foreach (var cell in cells)
                Assert.IsTrue(generationController.GetAliveCells().Contains(cell));
        }
Exemple #6
0
        public Form1()
        {
            InitializeComponent();

            _isRunning = true;

            var gridSize = new Vector(3, 3);
            _generationController = new GenerationController(gridSize);
            _generationController.OnGenerationComplete += _generationController_OnGenerationComplete;

            _cellSize = new Vector(x: this.pctCanvas.Size.Width / _generationController.GridSize.X,
                                   y: this.pctCanvas.Size.Height / _generationController.GridSize.Y);

            this.GridLines = new List<Line>();
            this.GridLines.AddRange(GridLinesGenerator.GenerateGridLines(_generationController.GridSize, _cellSize));
        }
        private static IEnumerable<Line> GenerateVerticalLines(Vector gridVector, Vector cellVector)
        {
            int verticalLines = gridVector.X / cellVector.X;

            var start = new Vector(0, 0);
            var end = new Vector(0, gridVector.Y);

            var lines = new List<Line>();

            lines.Add(new Line(start, end));

            for (int i = 0; i < verticalLines; i++)
            {
                start = new Vector(start.X + cellVector.X, start.Y);
                end = new Vector(end.X + cellVector.X, end.Y);

                lines.Add(new Line(start, end));
            }

            return lines;
        }
        private static IEnumerable<Line> GenerateHorizontalLines(Vector gridVector, Vector cellVector)
        {
            int horizontalLines = gridVector.Y / cellVector.Y;

            var lines = new List<Line>();

            var start = new Vector(0, 0);
            var end = new Vector(gridVector.X, 0);

            lines.Add(new Line(start, end));

            for (int i = 0; i < horizontalLines; i++)
            {
                start = new Vector(start.X, start.Y + cellVector.Y);
                end = new Vector(end.X, end.Y + cellVector.Y);

                lines.Add(new Line(start, end));
            }

            return lines;
        }
Exemple #9
0
        private bool IsValidCellIndex(Vector neighbour)
        {
            if (neighbour.X == int.MinValue || neighbour.Y == int.MinValue)
                return false;

            if ((neighbour.X >= 0 && neighbour.X < _cellsWidth) && (neighbour.Y >= 0 && neighbour.Y < _cellsHeight))
                return true;

            return false;
        }
Exemple #10
0
 private void FillAliveCells(Graphics graphics, Vector cell)
 {
     throw new NotImplementedException();
 }