コード例 #1
0
 private bool CheckEveryNeighbour(OutputGrid outputGrid)
 {
     for (int row = 0; row < outputGrid.height; row++)
     {
         for (int col = 0; col < outputGrid.width; col++)
         {
             Vector2Int        cellCoordinates = new Vector2Int(col, row);
             List <VectorPair> list            = new List <VectorPair>()
             {
                 new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(1, 0), Direction.Right, cellCoordinates),
                 new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(-1, 0), Direction.Left, cellCoordinates),
                 new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, 1), Direction.Up, cellCoordinates),
                 new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, -1), Direction.Down, cellCoordinates)
             };
             foreach (var item in list)
             {
                 if (item.CellToPropagatePosition.x >= 0 && item.CellToPropagatePosition.x < 3 && item.CellToPropagatePosition.y >= 0 && item.CellToPropagatePosition.y < 3 && outputGrid.CheckCellExists(item.CellToPropagatePosition))
                 {
                     var itemToCheck = outputGrid.GetPossibleValuesForPositon(item.CellToPropagatePosition).First();
                     var baseCell    = outputGrid.GetPossibleValuesForPositon(cellCoordinates).First();
                     if (patternManager.GetPossibleNeighboursForPatternInDIrection(baseCell, item.DiectionFromBase).Contains(itemToCheck) == false)
                     {
                         Debug.Log(baseCell + " cant have a neighbour " + itemToCheck + " at direction " + item.DiectionFromBase.ToString());
                         return(false);
                     }
                 }
             }
         }
     }
     return(true);
 }
コード例 #2
0
        public void CoreSolverEntropyUpdatePass()
        {
            outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            solver.CollapseCell(position);
            solver.Propagate();

            var newPosition1 = solver.GetLowestEntropyCell();

            solver.CollapseCell(newPosition1);
            solver.Propagate();

            while (solver.CheckForConflics() == false && outputGrid.CheckIfGridIsSolved() == false)
            {
                newPosition1 = solver.GetLowestEntropyCell();
                solver.CollapseCell(newPosition1);
                solver.Propagate();
            }


            Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 1)).Count);
            Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 0)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count);


            Assert.True(solver.CheckForConflics() || outputGrid.CheckIfGridIsSolved());
        }
コード例 #3
0
        public void CoreSolverGetLowestEntropyRandomPasses()
        {
            outputGrid = new OutputGrid(1, 1, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position       = new Vector2Int(0, 0);
            var returnPosition = solver.GetLowestEntropyCell();

            Assert.True(position == returnPosition);
        }
コード例 #4
0
        public void CoreSolverCheckLowestEntropyPasses()
        {
            outputGrid = new OutputGrid(10, 10, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            solver.CollapseCell(position);
            Assert.True(outputGrid.CheckIfCellIsCollapsed(position));
        }
コード例 #5
0
        public void OutputGridTestCOnstructorFail()
        {
            //arrange
            OutputGrid outputGrid = new OutputGrid(5, 5, 10);

            //act
            //assert
            Assert.True(outputGrid.GetPossibleValuesForPositon(new Vector2Int(5, 5)).Count == 0);
        }
コード例 #6
0
        public void OutputGridTestOutputSolution()
        {
            //arrange
            OutputGrid outputGrid = new OutputGrid(5, 5, 10);

            //act
            int[][] output = outputGrid.GetSolvedOutputGrid();
            //assert
            Assert.True(output.Length == 0);
        }
コード例 #7
0
        public void OutputGridTestCOnstructorPasses()
        {
            //arrange
            OutputGrid outputGrid = new OutputGrid(5, 5, 10);
            //act
            var list = outputGrid.GetPossibleValuesForPositon(new Vector2Int(4, 4));

            //assert
            Assert.True(list.Count == 10 && list.ElementAt(0) == 0 && list.ElementAt(9) == 9);
        }
コード例 #8
0
        public void CoreSolverPropagatePass()
        {
            outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            solver.CollapseCell(position);
            solver.Propagate();
            var numberOfPossiblePatterns = patternManager.GetNumberOfPatterns();

            Assert.True(outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count < numberOfPossiblePatterns && outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count < numberOfPossiblePatterns);
        }
コード例 #9
0
        public void WFCCoreCheckIfSolvedTruePasses()
        {
            outputGrid = new OutputGrid(10, 10, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    outputGrid.SetPatternOnPosition(i, j, 1);
                }
            }
            Assert.True(solver.CheckIfSolved());
        }
コード例 #10
0
ファイル: HomeVM.cs プロジェクト: Wowand/quantum
        public void Restart(object parameter)
        {
            try
            {
                _model.CurrentStep = 0;
                CircuitEvaluator eval = CircuitEvaluator.GetInstance();

                _outputModel = eval.InitFromModel(_model);
                OutputGrid.LoadModel(_model, _outputModel);
            }
            catch (Exception e)
            {
                PrintException(e);
            }
        }
コード例 #11
0
        public void TileMapOutputTestSimplePasses()
        {
            //outputGrid = new OutputGrid(3, 3, patternManager.GetNumberOfPatterns());
            //solver = new CoreSolver(outputGrid, patternManager);
            //var position = new Vector2Int(0, 0);
            //for (int i = 0; i < 3; i++)
            //{
            //    for (int j = 0; j < 3; j++)
            //    {
            //        outputGrid.SetPatternOnPosition(i, j, 1);
            //    }
            //}

            outputGrid = new OutputGrid(5, 5, patternManager.GetNumberOfPatterns());
            solver     = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            solver.CollapseCell(position);
            solver.Propagate();

            var newPosition1 = solver.GetLowestEntropyCell();

            solver.CollapseCell(newPosition1);
            solver.Propagate();

            while (solver.CheckForConflics() == false && outputGrid.CheckIfGridIsSolved() == false)
            {
                newPosition1 = solver.GetLowestEntropyCell();
                solver.CollapseCell(newPosition1);
                solver.Propagate();
            }
            if (solver.CheckForConflics())
            {
                Debug.Log("Conflict");
                Assert.True(true);
            }
            else
            {
                outputGrid.PrintResultsToConsol();
                int[][] wfcOutput = outputGrid.GetSolvedOutputGrid();
                IOutputCreator <Tilemap> tileOutput = new TileMapOutput(valueManager, outputtilemap);
                tileOutput.CreateOutput(patternManager, wfcOutput, outputGrid.width, outputGrid.height);
                Assert.True(CheckEveryNeighbour(outputGrid));
            }
        }
コード例 #12
0
        public void CoreSolverEntropyPass()
        {
            outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns());
            outputGrid.SetPatternOnPosition(1, 1, 0);
            solver = new CoreSolver(outputGrid, patternManager);
            var position = new Vector2Int(0, 0);

            solver.CollapseCell(position);
            solver.Propagate();
            var newPosition1 = solver.GetLowestEntropyCell();

            var newPosition2 = solver.GetLowestEntropyCell();

            Debug.Log(newPosition1 + " " + newPosition2);
            Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 1)).Count);
            Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 0)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count);

            Assert.True(((newPosition1 == new Vector2Int(0, 1) || newPosition1 == new Vector2Int(1, 0)) && (newPosition2 == new Vector2Int(0, 1) || newPosition2 == new Vector2Int(1, 0))) || outputGrid.CheckIfGridIsSolved());
        }
コード例 #13
0
ファイル: HomeVM.cs プロジェクト: Wowand/quantum
        private void InitFromModel(ComputerModel model)
        {
            if (_model != null)
            {
                Dictionary <string, List <Gate> > oldComposites = _model.CompositeGates;
                Dictionary <string, List <Gate> > newComposites = model.CompositeGates;

                foreach (var pair in oldComposites)
                {
                    if (!newComposites.ContainsKey(pair.Key))
                    {
                        newComposites[pair.Key] = pair.Value;
                    }
                }
            }
            _model = model;

            CircuitGrid = new CircuitGridVM(_model);

            CircuitEvaluator eval = CircuitEvaluator.GetInstance();

            _outputModel = eval.InitFromModel(_model);
            OutputGrid.LoadModel(_model, _outputModel);
        }
コード例 #14
0
ファイル: Game.cs プロジェクト: ramsaygrant/GameOfLife
 /// <summary>
 /// Set output grid to input grid by Deep Copy output grid into input grid
 /// </summary>
 private void FlipGridState()
 {
     GridHelper.Copy(OutputGrid, InputGrid);
     OutputGrid.ReInitialize();
 }