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--; } }