/// <summary> /// 根据难度随机生成谜题参数 /// </summary> /// <param name="rank"></param> public static PuzzleParams GetPuzzleParamsByRank(int rank) { PuzzleParams pp = new PuzzleParams(); if (rank <= 5) { pp.rows = pp.columns = rank + 2; pp.block = 0; } else if (rank <= 10) { pp.rows = pp.columns = 7; pp.block = rank - 5; } else if (rank <= 15) { pp.rows = pp.columns = 7; pp.block = 0; pp.arrow = rank - 10; } else if (rank <= 20) { pp.rows = pp.columns = 7; pp.block = new System.Random().Next(10); pp.arrow = 10 - pp.block; } else { pp.rows = pp.columns = 7; pp.block = new System.Random().Next(15); pp.arrow = 15 - pp.block; } return(pp); }
/// <summary> /// 根据难度随机生成谜题参数 /// </summary> /// <param name="rank"></param> public static PuzzleParams GetPuzzleParamsByRank(int rank) { PuzzleParams pp = new PuzzleParams(); if (rank <= 5) { pp.rows = pp.columns = rank + 2; pp.block = 0; } else if (rank <= 10) { pp.rows = pp.columns = 7; pp.block = rank - 5; } else if (rank <= 15) { pp.rows = pp.columns = 7; pp.block = 0; pp.arrow = rank - 10; } else if (rank <= 20) { pp.rows = pp.columns = 7; pp.block = new System.Random().Next(10); pp.arrow = 10 - pp.block; } else { pp.rows = pp.columns = 7; pp.block = new System.Random().Next(15); pp.arrow = 15 - pp.block; } return pp; }
private void NextLevel() { level = new Level(); level.MakePuzzle(PuzzleParams.GetPuzzleParamsByRank(rank++)); //level.MakePuzzle(new QuadValue[,] //{ // { QuadValue.Back, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, // { QuadValue.Back, QuadValue.Right | QuadValue.Down, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Down, QuadValue.Front }, // { QuadValue.Back, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, // { QuadValue.Back, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, // { QuadValue.Back, QuadValue.Right, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, // { QuadValue.Back, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, // { QuadValue.Back, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front, QuadValue.Front }, //}); level.puzzle.localPosition = new Vector3(0, 0, Style.PuzzleDepth); level.puzzle.AddEventListener(PuzzleEvent.SolveChange, SolveChangeHandler); GameObject puzzlego = new GameObject("Puzzle"); puzzleView = puzzlego.AddComponent <PuzzleView>(); puzzleView.data = level.puzzle; }
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--; } }
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--; } }