Beispiel #1
0
    /// <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);
    }
Beispiel #2
0
 /// <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;
 }
Beispiel #3
0
    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;
    }
Beispiel #4
0
    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--;
        }
    }
Beispiel #5
0
    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--;
        }
    }