コード例 #1
0
ファイル: Playground.cs プロジェクト: GloomyBoy/Solver
        public void Test_1()
        {
            var gridStr =
                @"None|Blue|Blue|Blue|Blue|Blue|None
4
R:R|R:B|R:R|R:B|R:R|R:B|R:R
R:R|R:B|R:R|R:L|R:L|R:L|R:R
R:G|R:D|R:G|R:D|R:G|R:L|R:G
R:L|R:L|R:L|R:L|R:G|R:L|R:G
R:R|R:L|R:L|R:L|R:R|R:B|R:R";
            var grid = GridGenerator.GetGrid(gridStr);
            // var swaps = GridAnalyzer.GetPossibleSwaps(grid);
            var killed = GridAnalyzer.GetGeneratedCells(new List <CellItem>()
            {
                grid[0, 3],
                grid[1, 3],
                grid[1, 4],
                grid[2, 3],
                grid[2, 4],
                grid[3, 1],
                grid[3, 3],
                grid[3, 4],
                grid[3, 1],
                grid[4, 1],
                grid[5, 1],
                grid[5, 2],
                grid[5, 3]
            });
        }
コード例 #2
0
        public CollapseResult Collapse(List <CellItem> additional = null, List <CellItem> generated = null)
        {
            if (generated == null)
            {
                generated = new List <CellItem>();
            }
            if (additional == null)
            {
                additional = new List <CellItem>();
            }
            var collapsing = GetCollapsingCells();
            var inCollapse = new List <CellItem>();

            foreach (var cellItem in collapsing)
            {
                inCollapse.AddRange(ActionFactory.GetBehaviour(cellItem).Action(SwapType.Kill, inCollapse.ToList()));
            }
            var result   = inCollapse.Union(additional).Distinct().ToList();
            var newItems = GridAnalyzer.GetGeneratedCells(result);

            generated.AddRange(newItems);
            foreach (var cellItem in result)
            {
                this[cellItem.Position.X, cellItem.Position.Y] = null;
            }
            foreach (var cellItem in newItems)
            {
                this[cellItem.Position.X, cellItem.Position.Y] = cellItem;
            }

            for (int i = 0; i < Width; i++)
            {
                for (int j = 1; j < Height; j++)
                {
                    var moveUp = j;
                    while (moveUp > 0 && this[i, moveUp] != null && this[i, moveUp - 1] == null)
                    {
                        this[i, moveUp - 1] = this[i, moveUp];
                        this[i, moveUp]     = null;
                        moveUp--;
                    }
                }
            }

            var ret = new CollapseResult(Width);

            ret.Append(result);
            return(ret);
        }
コード例 #3
0
ファイル: Main.cs プロジェクト: GloomyBoy/Solver
        private void LoadImage(Bitmap bitmap)
        {
            if (bitmap == null)
            {
                return;
            }
            PictureHelper.LoadImage(bitmap, out var grid);
            if (grid == null || grid.IsEqual(_grid))
            {
                return;
            }

            _grid = grid;
            if (cbRec.Checked)
            {
                bitmap.Save(_recordFolder + $"\\record_{_recordIndex}.png");
                _recordIndex++;
            }
            if (_grid.WeakSlot >= 0 && cbTitanColor.SelectedIndex >= 0)
            {
                foreach (var i in Enumerable.Range(1, 5))
                {
                    _grid._enemies[i] = (CellColor)cbTitanColor.SelectedItem;
                }
            }
            pbGameGrid.Image = GridDrawer.GetGridImage(grid);
            pbEnemies.Image  = new Bitmap(pbEnemies.Width, pbEnemies.Height);
            GridDrawer.GetGridEnemies(grid, pbEnemies.Image);
            var results = GridAnalyzer.GetPossibleSwaps(grid);

            results = results.OrderByDescending(r => r, new TitanSwapComparer()).ToList();
            clbSwaps.Items.Clear();
            clbSwaps.Items.AddRange(items: results.ToArray());
            if (results.Count > 0)
            {
                clbSwaps.SetSelected(0, true);
            }
        }