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; }
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); }
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]); } } }
/// <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); }
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 ReadOut(BinaryReader reader) { _row = reader.ReadInt32(); _column = reader.ReadInt32(); _value = (QuadValue)reader.ReadInt32(); }
public Quad(int row, int column, QuadValue value = QuadValue.Block) { _row = row; _column = column; _value = value; }
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); }
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; }
/// <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; }
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--; } }