コード例 #1
1
ファイル: Operation.cs プロジェクト: SylarLi/Puzzle1
 public Operation(OpType type, int row, int column, QuadValue direction = QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)
 {
     _type = type;
     _row = row;
     _column = column;
     _direction = direction;
 }
コード例 #2
0
ファイル: Operation.cs プロジェクト: SylarLi/Puzzle1
 public Operation(OpType type, int row, int column, QuadValue direction = QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)
 {
     _type      = type;
     _row       = row;
     _column    = column;
     _direction = direction;
 }
コード例 #3
0
ファイル: Resolver.cs プロジェクト: SylarLi/Puzzle1
    public bool IsSolved(IPuzzle puzzle)
    {
        bool      pass  = true;
        QuadValue value = QuadValue.Block;

        for (int i = 0; i < puzzle.rows; i++)
        {
            for (int j = 0; j < puzzle.columns; j++)
            {
                if (value == QuadValue.Block &&
                    (puzzle[i, j].value == QuadValue.Front || puzzle[i, j].value == QuadValue.Back))
                {
                    value = puzzle[i, j].value;
                }
                if ((value == QuadValue.Front || value == QuadValue.Back) &&
                    (puzzle[i, j].value == QuadValue.Front || puzzle[i, j].value == QuadValue.Back) &&
                    value != puzzle[i, j].value)
                {
                    pass = false;
                    break;
                }
            }
        }
        return(pass);
    }
コード例 #4
0
ファイル: Level.cs プロジェクト: SylarLi/Puzzle1
 public void MakePuzzle(QuadValue[,] values)
 {
     _record.Clear();
     _puzzle = new Puzzle(values.GetLength(0), values.GetLength(1));
     for (int i = 0; i < _puzzle.rows; i++)
     {
         for (int j = 0; j < _puzzle.columns; j++)
         {
             _puzzle[i, j] = new Quad(i, j, values[i, j]);
         }
     }
 }
コード例 #5
0
ファイル: Style.cs プロジェクト: SylarLi/Puzzle1
    /// <summary>
    /// 正面和反面的UVOffset
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static Vector2[] GetQuadUVOffsets(QuadValue value)
    {
        Vector2[] offsets = new Vector2[2];
        switch (value)
        {
        case QuadValue.Front:
        {
            offsets[0] = new Vector2(0, 0);
            offsets[1] = new Vector2(0.25f, 0);
            break;
        }

        case QuadValue.Back:
        {
            offsets[0] = new Vector2(0.25f, 0);
            offsets[1] = new Vector2(0, 0);
            break;
        }

        case QuadValue.Block:
        {
            offsets[0] = offsets[1] = new Vector2(0.75f, 0);
            break;
        }

        default:
        {
            if ((value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
            {
                offsets[0] = offsets[1] = new Vector2(0.5f, 0);
            }
            break;
        }
        }
        return(offsets);
    }
コード例 #6
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--;
        }
    }
コード例 #7
0
ファイル: Quad.cs プロジェクト: SylarLi/Puzzle1
 public void ReadOut(BinaryReader reader)
 {
     _row    = reader.ReadInt32();
     _column = reader.ReadInt32();
     _value  = (QuadValue)reader.ReadInt32();
 }
コード例 #8
0
ファイル: Quad.cs プロジェクト: SylarLi/Puzzle1
 public Quad(int row, int column, QuadValue value = QuadValue.Block)
 {
     _row    = row;
     _column = column;
     _value  = value;
 }
コード例 #9
0
ファイル: Quad.cs プロジェクト: SylarLi/Puzzle1
 public void ReadOut(BinaryReader reader)
 {
     _row = reader.ReadInt32();
     _column = reader.ReadInt32();
     _value = (QuadValue)reader.ReadInt32();
 }
コード例 #10
0
ファイル: Quad.cs プロジェクト: SylarLi/Puzzle1
 public Quad(int row, int column, QuadValue value = QuadValue.Block)
 {
     _row = row;
     _column = column;
     _value = value;
 }
コード例 #11
0
ファイル: Style.cs プロジェクト: SylarLi/Puzzle1
    public static Vector3 GetAngles(QuadValue value)
    {
        Vector3 angles = Vector3.zero;

        switch (value)
        {
        case QuadValue.Front:
        case QuadValue.Back:
        case QuadValue.Block:
        {
            angles = Vector3.zero;
            break;
        }

        case QuadValue.Left | QuadValue.Up:
        {
            angles = new Vector3(0, 0, 45);
            break;
        }

        case QuadValue.Right | QuadValue.Up:
        {
            angles = new Vector3(0, 0, -45);
            break;
        }

        case QuadValue.Left | QuadValue.Down:
        {
            angles = new Vector3(0, 0, 135);
            break;
        }

        case QuadValue.Right | QuadValue.Down:
        {
            angles = new Vector3(0, 0, -135);
            break;
        }

        case QuadValue.Left:
        {
            angles = new Vector3(0, 0, 90);
            break;
        }

        case QuadValue.Up:
        {
            angles = new Vector3(0, 0, 0);
            break;
        }

        case QuadValue.Right:
        {
            angles = new Vector3(0, 0, -90);
            break;
        }

        case QuadValue.Down:
        {
            angles = new Vector3(0, 0, 180);
            break;
        }
        }
        return(angles);
    }
コード例 #12
0
ファイル: Style.cs プロジェクト: SylarLi/Puzzle1
 public static Vector3 GetAngles(QuadValue value)
 {
     Vector3 angles = Vector3.zero;
     switch (value)
     {
         case QuadValue.Front:
         case QuadValue.Back:
         case QuadValue.Block:
             {
                 angles = Vector3.zero;
                 break;
             }
         case QuadValue.Left | QuadValue.Up:
             {
                 angles = new Vector3(0, 0, 45);
                 break;
             }
         case QuadValue.Right | QuadValue.Up:
             {
                 angles = new Vector3(0, 0, -45);
                 break;
             }
         case QuadValue.Left | QuadValue.Down:
             {
                 angles = new Vector3(0, 0, 135);
                 break;
             }
         case QuadValue.Right | QuadValue.Down:
             {
                 angles = new Vector3(0, 0, -135);
                 break;
             }
         case QuadValue.Left:
             {
                 angles = new Vector3(0, 0, 90);
                 break;
             }
         case QuadValue.Up:
             {
                 angles = new Vector3(0, 0, 0);
                 break;
             }
         case QuadValue.Right:
             {
                 angles = new Vector3(0, 0, -90);
                 break;
             }
         case QuadValue.Down:
             {
                 angles = new Vector3(0, 0, 180);
                 break;
             }
     }
     return angles;
 }
コード例 #13
0
ファイル: Style.cs プロジェクト: SylarLi/Puzzle1
 /// <summary>
 /// 正面和反面的UVOffset
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public static Vector2[] GetQuadUVOffsets(QuadValue value)
 {
     Vector2[] offsets = new Vector2[2];
     switch (value)
     {
         case QuadValue.Front:
             {
                 offsets[0] = new Vector2(0, 0);
                 offsets[1] = new Vector2(0.25f, 0);
                 break;
             }
         case QuadValue.Back:
             {
                 offsets[0] = new Vector2(0.25f, 0);
                 offsets[1] = new Vector2(0, 0);
                 break;
             }
         case QuadValue.Block:
             {
                 offsets[0] = offsets[1] = new Vector2(0.75f, 0);
                 break;
             }
         default:
             {
                 if ((value & (QuadValue.Left | QuadValue.Right | QuadValue.Up | QuadValue.Down)) > 0)
                 {
                     offsets[0] = offsets[1] = new Vector2(0.5f, 0);
                 }
                 break;
             }
     }
     return offsets;
 }
コード例 #14
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--;
        }
    }