コード例 #1
0
ファイル: Level.cs プロジェクト: SylarLi/Puzzle1
    public void MakePuzzle(PuzzleParams pp)
    {
        _record.Clear();
        _puzzle = new Puzzle(pp.rows, pp.columns);
        int i = 0;

        for (i = 0; i < _puzzle.rows; i++)
        {
            for (int j = 0; j < _puzzle.columns; j++)
            {
                _puzzle[i, j] = new Quad(i, j, QuadValue.Front);
            }
        }

        System.Random random = new System.Random();

        i = pp.block;
        while (i > 0)
        {
            int row    = random.Next(_puzzle.rows);
            int column = random.Next(_puzzle.columns);
            _puzzle[row, column].value = QuadValue.Block;
            i--;
        }

        if (pp.arrow > 0)
        {
            // QuadValue.Left | QuadValue.Up, QuadValue.Right | QuadValue.Up, QuadValue.Left | QuadValue.Down, QuadValue.Right | QuadValue.Down
            QuadValue[] diretions = new QuadValue[] { QuadValue.Left, QuadValue.Right, QuadValue.Up, QuadValue.Down };
            do
            {
                for (i = 0; i < _puzzle.rows; i++)
                {
                    for (int j = 0; j < _puzzle.columns; j++)
                    {
                        if ((_puzzle[i, j].value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
                        {
                            _puzzle[i, j] = new Quad(i, j, QuadValue.Front);
                        }
                    }
                }
                i = pp.arrow;
                while (i > 0)
                {
                    int row    = random.Next(_puzzle.rows);
                    int column = random.Next(_puzzle.columns);
                    if (_puzzle[row, column].value == QuadValue.Front || _puzzle[row, column].value == QuadValue.Back)
                    {
                        _puzzle[row, column].value = diretions[random.Next(diretions.Length)];
                        i--;
                    }
                }
            }while (_resolver.ResolveIsLoop(puzzle));
        }

        i = 10;
        while (i > 0 || _resolver.IsSolved(_puzzle))
        {
            IOperation op = new Operation(OpType.TouchClick, random.Next(_puzzle.rows), random.Next(_puzzle.columns));
            _record.Push(op);
            _resolver.ResolveTouchData(_puzzle, op);
            i--;
        }
    }