Project

General

Profile

Download (5.19 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / solvers / SolverMain.java @ 11e67fa5

1 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 bb62ca3f Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.solvers;
11
12
import android.content.res.Resources;
13
14 da57afae Leszek Koltunski
import org.distorted.objectlib.helpers.OperatingSystemInterface;
15 e4733ed7 Leszek Koltunski
import org.distorted.objectlib.main.ObjectSignatures;
16 3f7a4363 Leszek Koltunski
import org.distorted.objectlib.main.TwistyObject;
17
18 f0336037 Leszek Koltunski
import org.distorted.main.R;
19 fcd5b990 Leszek Koltunski
import org.distorted.screens.ScreenList;
20
import org.distorted.screens.RubikScreenSolver;
21 f0336037 Leszek Koltunski
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23
24 a304ee64 Leszek Koltunski
public class SolverMain implements Runnable
25 f0336037 Leszek Koltunski
{
26 c494476f Leszek Koltunski
  private final Resources mRes;
27 da57afae Leszek Koltunski
  private final OperatingSystemInterface mOS;
28 7e4f3e04 Leszek Koltunski
  private final long mSignature;
29 420eb96d Leszek Koltunski
  private final TwistyObject mObject;
30 f0336037 Leszek Koltunski
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32
33 da57afae Leszek Koltunski
  public SolverMain(OperatingSystemInterface os, Resources res, TwistyObject object)
34 f0336037 Leszek Koltunski
    {
35 7e4f3e04 Leszek Koltunski
    mRes       = res;
36 da57afae Leszek Koltunski
    mOS        = os;
37 7e4f3e04 Leszek Koltunski
    mObject    = object;
38 7ed91391 Leszek Koltunski
    long[] sig = object.getSignature().getArray();
39
    mSignature = sig[sig.length-1];
40 f0336037 Leszek Koltunski
    }
41
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43 46a961fd Leszek Koltunski
// certain objects have certain cubits locked - for example, the Cube3's centers of
44
// sides always have the same color.
45
// If a certain cubit is locked, return the color (index into it's FACE_COLORS array) it
46
// must have. Otherwise return -1.
47
48 d433b50e Leszek Koltunski
  public static int cubitIsLocked(int object, int cubit)
49 46a961fd Leszek Koltunski
    {
50 e4733ed7 Leszek Koltunski
    if( object == ObjectSignatures.CUBE_3 )
51 46a961fd Leszek Koltunski
      {
52 09b2bd31 Leszek Koltunski
      if( cubit==20 ) return 0; // center of the right  face
53
      if( cubit==21 ) return 1; // center of the left   face
54
      if( cubit==22 ) return 2; // center of the up     face
55
      if( cubit==23 ) return 3; // center of the bottom face
56
      if( cubit==24 ) return 4; // center of the front  face
57
      if( cubit==25 ) return 5; // center of the back   face
58 46a961fd Leszek Koltunski
      }
59
60
    return -1;
61
    }
62
63 373fa45f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
64
65
  public void start()
66
    {
67
    Thread thr = new Thread(this);
68
    thr.start();
69
    }
70
71 f0336037 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
72
73
  public void run()
74
    {
75 420eb96d Leszek Koltunski
    RubikScreenSolver screen = (RubikScreenSolver) ScreenList.SVER.getScreenClass();
76 f0336037 Leszek Koltunski
77 fcbf34af Leszek Koltunski
    if( mSignature==ObjectSignatures.CUBE_3 )
78 f0336037 Leszek Koltunski
      {
79 873ce847 Leszek Koltunski
      SolverCube3 solver = new SolverCube3(mOS,mRes,mObject);
80 420eb96d Leszek Koltunski
      solver.solve(screen);
81
      }
82 5da7a80b Leszek Koltunski
    else if( mSignature==ObjectSignatures.PDUO_2 )
83 420eb96d Leszek Koltunski
      {
84 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminxDuo(mOS,mRes,mObject);
85 420eb96d Leszek Koltunski
      solver.solve(screen);
86 f0336037 Leszek Koltunski
      }
87 3eedf418 Leszek Koltunski
    else if( mSignature==ObjectSignatures.IVY_2 )
88
      {
89 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverIvyCube(mOS,mRes,mObject);
90 3eedf418 Leszek Koltunski
      solver.solve(screen);
91
      }
92 16003ca8 Leszek Koltunski
    else if( mSignature==ObjectSignatures.CU_232 )
93
      {
94 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverCuboid232(mOS,mRes,mObject);
95 16003ca8 Leszek Koltunski
      solver.solve(screen);
96
      }
97 d0852c9c Leszek Koltunski
    else if( mSignature==ObjectSignatures.CU_323 )
98
      {
99
      SolverTablebase solver = new SolverCuboid323(mOS,mRes,mObject);
100
      solver.solve(screen);
101
      }
102 7dbbda72 Leszek Koltunski
    else if( mSignature==ObjectSignatures.PYRA_3 )
103
      {
104 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminx(mOS,mRes,mObject);
105 7dbbda72 Leszek Koltunski
      solver.solve(screen);
106
      }
107 9a39aabf Leszek Koltunski
    else if( mSignature==ObjectSignatures.DIAM_2 )
108
      {
109 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverSkewbDiamond(mOS,mRes,mObject);
110 9a39aabf Leszek Koltunski
      solver.solve(screen);
111
      }
112 a4569df4 Leszek Koltunski
    else if( mSignature==ObjectSignatures.CUBE_2 )
113
      {
114 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverCube2(mOS,mRes,mObject);
115 a4569df4 Leszek Koltunski
      solver.solve(screen);
116
      }
117 841f82f0 Leszek Koltunski
    else if( mSignature==ObjectSignatures.JING_2 )
118
      {
119 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverJing(mOS,mRes,mObject);
120 841f82f0 Leszek Koltunski
      solver.solve(screen);
121
      }
122 18354673 Leszek Koltunski
    else if( mSignature==ObjectSignatures.SKEW_2 )
123
      {
124 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverSkewb(mOS,mRes,mObject);
125 18354673 Leszek Koltunski
      solver.solve(screen);
126
      }
127 a505bce0 Leszek Koltunski
    else if( mSignature==ObjectSignatures.DINO_3 )
128
      {
129 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverDino6(mOS,mRes,mObject);
130 a505bce0 Leszek Koltunski
      solver.solve(screen);
131
      }
132 8afa10ef Leszek Koltunski
    else if( mSignature==ObjectSignatures.DIN4_3 )
133
      {
134 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverDino4(mOS,mRes,mObject);
135 8afa10ef Leszek Koltunski
      solver.solve(screen);
136
      }
137 04154c0f Leszek Koltunski
    else if( mSignature==ObjectSignatures.PDIA_3 )
138
      {
139 da57afae Leszek Koltunski
      SolverTablebase solver = new SolverPyraminxDiamond(mOS,mRes,mObject);
140 04154c0f Leszek Koltunski
      solver.solve(screen);
141
      }
142 f0336037 Leszek Koltunski
    else
143
      {
144 ca278d11 Leszek Koltunski
      screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
145 f0336037 Leszek Koltunski
      }
146
    }
147
}