Project

General

Profile

« Previous | Next » 

Revision c0254421

Added by Leszek Koltunski about 3 years ago

Automatic scrambling of the Evil Cube works!

View differences:

src/main/java/org/distorted/objects/TwistyBandagedEvil.java
21 21

  
22 22
import android.content.res.Resources;
23 23

  
24
import org.distorted.bandaged.BandagedState;
24 25
import org.distorted.library.main.DistortedEffects;
25 26
import org.distorted.library.main.DistortedTexture;
26 27
import org.distorted.library.mesh.MeshSquare;
......
33 34

  
34 35
class TwistyBandagedEvil extends TwistyBandagedAbstract
35 36
{
37
   private int mCurrState;
38
   private boolean mUseX;
39
   private boolean mUseY;
40
   private boolean mUseZ;
41

  
42
   // The list of all 'significant' states of the Evil Cube, just like in the 3Plate Cube class.
43
   // This time the list got computed automatically - by the BandagedStateGraph.computeGraph().
44

  
45
   private final BandagedState[] mStates = new BandagedState[]
46
     {
47
     new BandagedState( new int[] {2, 1,  1,2,-1,  2}         , new int[] {2, 2,142,2,-1, 28}         , new int[] {0, 1,114}                   ),
48
     new BandagedState( new int[] {2, 2,  2}                  , new int[] {2,-1,143}                  , null                                   ),
49
     new BandagedState( new int[] {2, 2,  1}                  , null                                  , new int[] {0, 1,  3,0, 2, 47}          ),
50
     new BandagedState( new int[] {2, 1,  4}                  , new int[] {2, 1,132,2,-1,131}         , new int[] {0, 1, 47,0,-1,  2}          ),
51
     new BandagedState( new int[] {2,-1,  3}                  , new int[] {2, 1,  5,2,-1,  6}         , null                                   ),
52
     new BandagedState( null                                  , new int[] {2, 2,  6,2,-1,  4}         , new int[] {0, 1, 51}                   ),
53
     new BandagedState( null                                  , new int[] {2, 1,  4,2, 2,  5}         , new int[] {2, 2,  7,2,-1, 80}          ),
54
     new BandagedState( new int[] {2, 2,  8}                  , null                                  , new int[] {2, 1, 80,2, 2,  6}          ),
55
     new BandagedState( new int[] {2, 2,  7}                  , null                                  , new int[] {0,-1,  9}                   ),
56
     new BandagedState( new int[] {2, 1, 10,2, 2, 11,2,-1, 12}, null                                  , new int[] {0, 1,  8}                   ),
57
     new BandagedState( new int[] {2, 1, 11,2, 2, 12,2,-1,  9}, null                                  , new int[] {0,-1,118}                   ),
58
     new BandagedState( new int[] {2, 1, 12,2, 2,  9,2,-1, 10}, null                                  , new int[] {2, 1, 77}                   ),
59
     new BandagedState( new int[] {2, 1,  9,2, 2, 10,2,-1, 11}, null                                  , new int[] {2, 1, 13,2, 2,143}          ),
60
     new BandagedState( new int[] {2, 1, 14,2, 2, 15,2,-1, 16}, new int[] {2, 1, 57,2,-1, 58}         , new int[] {2, 1,143,2,-1, 12}          ),
61
     new BandagedState( new int[] {2, 1, 15,2, 2, 16,2,-1, 13}, null                                  , new int[] {2, 1, 41}                   ),
62
     new BandagedState( new int[] {2, 1, 16,2, 2, 13,2,-1, 14}, null                                  , new int[] {0, 1, 82}                   ),
63
     new BandagedState( new int[] {2, 1, 13,2, 2, 14,2,-1, 15}, new int[] {2, 1, 17,2,-1, 18}         , new int[] {0, 1,111,0,-1,115}          ),
64
     new BandagedState( null                                  , new int[] {2, 2, 18,2,-1, 16}         , new int[] {0,-1,139}                   ),
65
     new BandagedState( new int[] {2, 1, 19,2,-1, 20}         , new int[] {2, 1, 16,2, 2, 17}         , new int[] {2, 1,142}                   ),
66
     new BandagedState( new int[] {2, 2, 20,2,-1, 18}         , null                                  , new int[] {2, 1, 39,2, 2,140}          ),
67
     new BandagedState( new int[] {2, 1, 18,2, 2, 19}         , new int[] {2, 1, 21}                  , null                                   ),
68
     new BandagedState( null                                  , new int[] {2,-1, 20}                  , new int[] {0,-1, 22}                   ),
69
     new BandagedState( new int[] {2, 2, 23,2,-1, 24}         , null                                  , new int[] {0, 1, 21}                   ),
70
     new BandagedState( new int[] {2, 1, 24,2, 2, 22}         , null                                  , new int[] {2, 1, 92}                   ),
71
     new BandagedState( new int[] {2, 1, 22,2,-1, 23}         , null                                  , new int[] {0, 1, 25}                   ),
72
     new BandagedState( new int[] {2, 1, 26,2, 2, 27}         , null                                  , new int[] {0,-1, 24}                   ),
73
     new BandagedState( new int[] {2, 1, 27,2,-1, 25}         , new int[] {2, 1, 74}                  , null                                   ),
74
     new BandagedState( new int[] {2, 2, 25,2,-1, 26}         , null                                  , new int[] {2, 1, 28,2, 2,124}          ),
75
     new BandagedState( new int[] {2, 1, 29,2, 2, 30,2,-1, 31}, new int[] {2,-1,142}                  , new int[] {2, 1,124,2,-1, 27}          ),
76
     new BandagedState( new int[] {2, 1, 30,2, 2, 31,2,-1, 28}, null                                  , new int[] {2, 1,141}                   ),
77
     new BandagedState( new int[] {2, 1, 31,2, 2, 28,2,-1, 29}, null                                  , new int[] {0, 1,130}                   ),
78
     new BandagedState( new int[] {2, 1, 28,2, 2, 29,2,-1, 30}, new int[] {2, 1, 32,2,-1, 33}         , new int[] {0, 1, 89,0,-1, 90}          ),
79
     new BandagedState( null                                  , new int[] {2, 2, 33,2,-1, 31}         , new int[] {0,-1,137}                   ),
80
     new BandagedState( new int[] {2, 1, 34}                  , new int[] {2, 1, 31,2, 2, 32}         , null                                   ),
81
     new BandagedState( new int[] {2,-1, 33}                  , null                                  , new int[] {2, 1, 35}                   ),
82
     new BandagedState( null                                  , new int[] {2,-1, 36}                  , new int[] {2,-1, 34}                   ),
83
     new BandagedState( null                                  , new int[] {2, 1, 35}                  , new int[] {2,-1, 37}                   ),
84
     new BandagedState( null                                  , new int[] {2, 1, 38,2, 2, 93}         , new int[] {2, 1, 36}                   ),
85
     new BandagedState( new int[] {2, 1, 39}                  , new int[] {2, 1, 93,2,-1, 37}         , null                                   ),
86
     new BandagedState( new int[] {2,-1, 38}                  , new int[] {2, 1, 40,2,-1, 64}         , new int[] {2, 1,140,2,-1, 19}          ),
87
     new BandagedState( new int[] {2, 1, 41,2,-1, 42}         , new int[] {2, 2, 64,2,-1, 39}         , null                                   ),
88
     new BandagedState( new int[] {2, 2, 42,2,-1, 40}         , null                                  , new int[] {2,-1, 14}                   ),
89
     new BandagedState( new int[] {2, 1, 40,2, 2, 41}         , null                                  , new int[] {0, 1, 43,0, 2,128}          ),
90
     new BandagedState( new int[] {2, 1, 44,2,-1, 45}         , new int[] {2, 1,114,2, 2,113,2,-1, 86}, new int[] {0, 1,128,0,-1, 42}          ),
91
     new BandagedState( new int[] {2, 2, 45,2,-1, 43}         , new int[] {2, 1, 48,2,-1,108}         , new int[] {2,-1, 81}                   ),
92
     new BandagedState( new int[] {2, 1, 43,2, 2, 44}         , null                                  , new int[] {0, 1, 46}                   ),
93
     new BandagedState( null                                  , new int[] {2, 1, 47}                  , new int[] {0,-1, 45}                   ),
94
     new BandagedState( null                                  , new int[] {2,-1, 46}                  , new int[] {0, 2,  2,0,-1,  3}          ),
95
     new BandagedState( new int[] {2,-1, 49}                  , new int[] {2, 2,108,2,-1, 44}         , null                                   ),
96
     new BandagedState( new int[] {2, 1, 48}                  , null                                  , new int[] {0, 1, 50}                   ),
97
     new BandagedState( null                                  , new int[] {2, 1, 51,2, 2, 52}         , new int[] {0,-1, 49}                   ),
98
     new BandagedState( null                                  , new int[] {2, 1, 52,2,-1, 50}         , new int[] {0,-1,  5}                   ),
99
     new BandagedState( null                                  , new int[] {2, 2, 50,2,-1, 51}         , new int[] {2,-1, 53}                   ),
100
     new BandagedState( null                                  , new int[] {2, 1, 54,2, 2, 55}         , new int[] {2, 1, 52}                   ),
101
     new BandagedState( null                                  , new int[] {2, 1, 55,2,-1, 53}         , new int[] {0,-1,104}                   ),
102
     new BandagedState( null                                  , new int[] {2, 2, 53,2,-1, 54}         , new int[] {0, 2, 56,0,-1, 65}          ),
103
     new BandagedState( new int[] {2, 1, 57}                  , null                                  , new int[] {0, 1, 65,0, 2, 55}          ),
104
     new BandagedState( new int[] {2,-1, 56}                  , new int[] {2, 2, 58,2,-1, 13}         , null                                   ),
105
     new BandagedState( null                                  , new int[] {2, 1, 13,2, 2, 57}         , new int[] {2,-1, 59}                   ),
106
     new BandagedState( new int[] {2, 1, 60}                  , null                                  , new int[] {2, 1, 58}                   ),
107
     new BandagedState( new int[] {2,-1, 59}                  , null                                  , new int[] {2, 1, 61}                   ),
108
     new BandagedState( new int[] {2,-1, 62}                  , null                                  , new int[] {2,-1, 60}                   ),
109
     new BandagedState( new int[] {2, 1, 61}                  , new int[] {2,-1, 63}                  , null                                   ),
110
     new BandagedState( null                                  , new int[] {2, 1, 62}                  , new int[] {2, 1, 64}                   ),
111
     new BandagedState( null                                  , new int[] {2, 1, 39,2, 2, 40}         , new int[] {2,-1, 63}                   ),
112
     new BandagedState( new int[] {2, 1, 66,2,-1, 67}         , new int[] {2, 1, 78,2, 2, 79,2,-1, 80}, new int[] {0, 1, 55,0,-1, 56}          ),
113
     new BandagedState( new int[] {2, 2, 67,2,-1, 65}         , new int[] {2,-1,107}                  , null                                   ),
114
     new BandagedState( new int[] {2, 1, 65,2, 2, 66}         , null                                  , new int[] {0, 1, 68}                   ),
115
     new BandagedState( null                                  , new int[] {2, 1, 69}                  , new int[] {0,-1, 67}                   ),
116
     new BandagedState( null                                  , new int[] {2,-1, 68}                  , new int[] {0,-1, 70}                   ),
117
     new BandagedState( null                                  , new int[] {2,-1, 71}                  , new int[] {0, 1, 69}                   ),
118
     new BandagedState( new int[] {2,-1, 72}                  , new int[] {2, 1, 70}                  , null                                   ),
119
     new BandagedState( new int[] {2, 1, 71}                  , null                                  , new int[] {0,-1, 73}                   ),
120
     new BandagedState( new int[] {2, 1, 74,2, 2, 75}         , null                                  , new int[] {0, 1, 72}                   ),
121
     new BandagedState( new int[] {2, 1, 75,2,-1, 73}         , new int[] {2,-1, 26}                  , new int[] {0, 1, 83,0,-1,138}          ),
122
     new BandagedState( new int[] {2, 2, 73,2,-1, 74}         , new int[] {2, 1, 76,2,-1, 77}         , null                                   ),
123
     new BandagedState( null                                  , new int[] {2, 2, 77,2,-1, 75}         , new int[] {0, 1, 78}                   ),
124
     new BandagedState( null                                  , new int[] {2, 1, 75,2, 2, 76}         , new int[] {2,-1, 11}                   ),
125
     new BandagedState( null                                  , new int[] {2, 1, 79,2, 2, 80,2,-1, 65}, new int[] {0,-1, 76}                   ),
126
     new BandagedState( null                                  , new int[] {2, 1, 80,2, 2, 65,2,-1, 78}, new int[] {2,-1,110}                   ),
127
     new BandagedState( new int[] {2, 1, 81,2,-1, 82}         , new int[] {2, 1, 65,2, 2, 78,2,-1, 79}, new int[] {2, 1,  6,2,-1,  7}          ),
128
     new BandagedState( new int[] {2, 2, 82,2,-1, 80}         , null                                  , new int[] {2, 1, 44}                   ),
129
     new BandagedState( new int[] {2, 1, 80,2, 2, 81}         , new int[] {2, 1, 83,2,-1, 84}         , new int[] {0,-1, 15}                   ),
130
     new BandagedState( null                                  , new int[] {2, 2, 84,2,-1, 82}         , new int[] {0, 2,138,0,-1, 74}          ),
131
     new BandagedState( new int[] {2, 1, 85}                  , new int[] {2, 1, 82,2, 2, 83}         , null                                   ),
132
     new BandagedState( new int[] {2,-1, 84}                  , null                                  , new int[] {2, 1, 86,2, 2,119}          ),
133
     new BandagedState( new int[] {2, 1, 87,2,-1, 88}         , new int[] {2, 1, 43,2, 2,114,2,-1,113}, new int[] {2, 1,119,2,-1, 85}          ),
134
     new BandagedState( new int[] {2, 2, 88,2,-1, 86}         , null                                  , new int[] {2, 1, 94}                   ),
135
     new BandagedState( new int[] {2, 1, 86,2, 2, 87}         , new int[] {2, 1, 89}                  , null                                   ),
136
     new BandagedState( null                                  , new int[] {2,-1, 88}                  , new int[] {0, 2, 90,0,-1, 31}          ),
137
     new BandagedState( new int[] {2, 1, 91,2, 2, 92}         , null                                  , new int[] {0, 1, 31,0, 2, 89}          ),
138
     new BandagedState( new int[] {2, 1, 92,2,-1, 90}         , null                                  , new int[] {0, 1, 93}                   ),
139
     new BandagedState( new int[] {2, 2, 90,2,-1, 91}         , null                                  , new int[] {2,-1, 23}                   ),
140
     new BandagedState( null                                  , new int[] {2, 2, 37,2,-1, 38}         , new int[] {0,-1, 91}                   ),
141
     new BandagedState( null                                  , new int[] {2,-1, 95}                  , new int[] {2,-1, 87}                   ),
142
     new BandagedState( null                                  , new int[] {2, 1, 94}                  , new int[] {2,-1, 96}                   ),
143
     new BandagedState( null                                  , new int[] {2, 1, 97}                  , new int[] {2, 1, 95}                   ),
144
     new BandagedState( new int[] {2, 1, 98}                  , new int[] {2,-1, 96}                  , null                                   ),
145
     new BandagedState( new int[] {2,-1, 97}                  , null                                  , new int[] {2,-1, 99}                   ),
146
     new BandagedState( new int[] {2, 2,100,2,-1,101}         , null                                  , new int[] {2, 1, 98}                   ),
147
     new BandagedState( new int[] {2, 1,101,2, 2, 99}         , new int[] {2, 1,111,2,-1,112}         , null                                   ),
148
     new BandagedState( new int[] {2, 1, 99,2,-1,100}         , new int[] {2, 1,102}                  , new int[] {2, 1,108,2,-1,109}          ),
149
     new BandagedState( new int[] {2, 1,103,2,-1,104}         , new int[] {2,-1,101}                  , null                                   ),
150
     new BandagedState( new int[] {2, 2,104,2,-1,102}         , null                                  , new int[] {2,-1,105}                   ),
151
     new BandagedState( new int[] {2, 1,102,2, 2,103}         , null                                  , new int[] {0, 1, 54}                   ),
152
     new BandagedState( new int[] {2,-1,106}                  , null                                  , new int[] {2, 1,103}                   ),
153
     new BandagedState( new int[] {2, 1,105}                  , null                                  , new int[] {2, 1,107}                   ),
154
     new BandagedState( null                                  , new int[] {2, 1, 66}                  , new int[] {2,-1,106}                   ),
155
     new BandagedState( null                                  , new int[] {2, 1, 44,2, 2, 48}         , new int[] {2, 2,109,2,-1,101}          ),
156
     new BandagedState( new int[] {2,-1,110}                  , null                                  , new int[] {2, 1,101,2, 2,108}          ),
157
     new BandagedState( new int[] {2, 1,109}                  , null                                  , new int[] {2, 1, 79}                   ),
158
     new BandagedState( null                                  , new int[] {2, 2,112,2,-1,100}         , new int[] {0, 2,115,0,-1, 16}          ),
159
     new BandagedState( null                                  , new int[] {2, 1,100,2, 2,111}         , new int[] {2, 1,113}                   ),
160
     new BandagedState( null                                  , new int[] {2, 1, 86,2, 2, 43,2,-1,114}, new int[] {2,-1,112}                   ),
161
     new BandagedState( null                                  , new int[] {2, 1,113,2, 2, 86,2,-1, 43}, null                                   ),
162
     new BandagedState( new int[] {2, 2,116}                  , null                                  , new int[] {0, 1, 16,0, 2,111}          ),
163
     new BandagedState( new int[] {2, 2,115}                  , null                                  , new int[] {2,-1,117}                   ),
164
     new BandagedState( new int[] {2, 1,118}                  , null                                  , new int[] {2, 1,116}                   ),
165
     new BandagedState( new int[] {2,-1,117}                  , null                                  , new int[] {0, 1, 10}                   ),
166
     new BandagedState( null                                  , new int[] {2, 1,120,2, 2,121,2,-1,122}, new int[] {2, 2, 85,2,-1, 86}          ),
167
     new BandagedState( null                                  , new int[] {2, 1,121,2, 2,122,2,-1,119}, new int[] {2,-1,129}                   ),
168
     new BandagedState( null                                  , new int[] {2, 1,122,2, 2,119,2,-1,120}, new int[] {0, 1,125}                   ),
169
     new BandagedState( null                                  , new int[] {2, 1,119,2, 2,120,2,-1,121}, new int[] {0,-1,123}                   ),
170
     new BandagedState( null                                  , new int[] {2, 2,124}                  , new int[] {0, 1,122}                   ),
171
     new BandagedState( null                                  , new int[] {2, 2,123}                  , new int[] {2, 2, 27,2,-1, 28}          ),
172
     new BandagedState( null                                  , new int[] {2, 1,126}                  , new int[] {0,-1,121}                   ),
173
     new BandagedState( null                                  , new int[] {2,-1,125}                  , new int[] {2,-1,127}                   ),
174
     new BandagedState( null                                  , new int[] {2, 2,128}                  , new int[] {2, 1,126}                   ),
175
     new BandagedState( null                                  , new int[] {2, 2,127}                  , new int[] {0, 2, 42,0,-1, 43}          ),
176
     new BandagedState( new int[] {2, 2,130,2,-1,131}         , null                                  , new int[] {2, 1,120}                   ),
177
     new BandagedState( new int[] {2, 1,131,2, 2,129}         , null                                  , new int[] {0,-1, 30}                   ),
178
     new BandagedState( new int[] {2, 1,129,2,-1,130}         , new int[] {2, 1,  3,2, 2,132}         , null                                   ),
179
     new BandagedState( null                                  , new int[] {2, 2,131,2,-1,  3}         , new int[] {0,-1,133}                   ),
180
     new BandagedState( null                                  , new int[] {2,-1,134}                  , new int[] {0, 1,132}                   ),
181
     new BandagedState( new int[] {2,-1,135}                  , new int[] {2, 1,133}                  , null                                   ),
182
     new BandagedState( new int[] {2, 1,134}                  , null                                  , new int[] {0,-1,136}                   ),
183
     new BandagedState( new int[] {2, 1,137}                  , null                                  , new int[] {0, 1,135}                   ),
184
     new BandagedState( new int[] {2,-1,136}                  , null                                  , new int[] {0, 1, 32}                   ),
185
     new BandagedState( new int[] {2, 1,139}                  , null                                  , new int[] {0, 1, 74,0, 2, 83}          ),
186
     new BandagedState( new int[] {2,-1,138}                  , null                                  , new int[] {0, 1, 17}                   ),
187
     new BandagedState( null                                  , new int[] {2, 1,141}                  , new int[] {2, 2, 19,2,-1, 39}          ),
188
     new BandagedState( null                                  , new int[] {2,-1,140}                  , new int[] {2,-1, 29}                   ),
189
     new BandagedState( null                                  , new int[] {2, 1, 28}                  , new int[] {2,-1, 18}                   ),
190
     new BandagedState( null                                  , new int[] {2, 1,  1}                  , new int[] {2, 2, 12,2,-1, 13}          )
191
     };
192

  
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

  
36 195
  private static final float[][] POSITIONS = new float[][]
37 196
      {
38 197
        { 1.0f,  1.0f, -1.0f},
......
77 236

  
78 237
///////////////////////////////////////////////////////////////////////////////////////////////////
79 238
// PUBLIC API
80
// TODO
81 239

  
82 240
  public void randomizeNewScramble(int[][] scramble, Random rnd, int num)
83 241
    {
84 242
    if( num==0 )
85 243
      {
86
      scramble[num][0] = rnd.nextInt(ROTATION_AXIS.length);
87
      }
88
    else
89
      {
90
      int newVector = rnd.nextInt(ROTATION_AXIS.length-1);
91
      scramble[num][0] = (newVector>=scramble[num-1][0] ? newVector+1 : newVector);
244
      mCurrState = 0;
245
      mUseX = true;
246
      mUseY = true;
247
      mUseZ = true;
92 248
      }
93 249

  
94
    float rowFloat = rnd.nextFloat();
250
    int total = mStates[mCurrState].getTotal(mUseX,mUseY,mUseZ);
251
    int random= rnd.nextInt(total);
252
    int[] info= mStates[mCurrState].getInfo(random,mUseX,mUseY,mUseZ);
95 253

  
96
    for(int row=0; row<mRowChances.length; row++)
97
      {
98
      if( rowFloat<=mRowChances[row] )
99
        {
100
        scramble[num][1] = row;
101
        break;
102
        }
103
      }
254
    scramble[num][0] = info[0];
255
    scramble[num][1] = info[1];
256
    scramble[num][2] = info[2];
104 257

  
105
    switch( rnd.nextInt(4) )
258
    mCurrState = info[3];
259

  
260
    switch(info[0])
106 261
      {
107
      case 0: scramble[num][2] = -2; break;
108
      case 1: scramble[num][2] = -1; break;
109
      case 2: scramble[num][2] =  1; break;
110
      case 3: scramble[num][2] =  2; break;
262
      case 0: mUseX = false; mUseY = true ; mUseZ = true ; break;
263
      case 1: mUseX = true ; mUseY = false; mUseZ = true ; break;
264
      case 2: mUseX = true ; mUseY = true ; mUseZ = false; break;
111 265
      }
266

  
267
    //android.util.Log.e("D", (info[0]==0 ? "X" : (info[0]==1 ? "Y" : "Z")) + info[2] +" --> "+info[3]);
112 268
    }
113 269

  
114 270
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff