Revision ecf3f149
Added by Leszek Koltunski about 4 years ago
| src/main/java/org/distorted/objects/TwistyBandagedAbstract.java | ||
|---|---|---|
| 583 | 583 |
|
| 584 | 584 |
return true; |
| 585 | 585 |
} |
| 586 |
|
|
| 587 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 588 |
// only needed for solvers - there are no Bandaged solvers ATM) |
|
| 589 |
|
|
| 590 |
public String retObjectString() |
|
| 591 |
{
|
|
| 592 |
return ""; |
|
| 593 |
} |
|
| 594 | 586 |
} |
| src/main/java/org/distorted/objects/TwistyCube.java | ||
|---|---|---|
| 374 | 374 |
return true; |
| 375 | 375 |
} |
| 376 | 376 |
|
| 377 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 378 |
// order: Up --> Right --> Front --> Down --> Left --> Back |
|
| 379 |
// (because the first implemented Solver - the two-phase Cube3 one - expects such order) |
|
| 380 |
// |
|
| 381 |
// Solved 3x3x3 Cube maps to "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB" |
|
| 382 |
// |
|
| 383 |
// s : size of the cube; let index = a*s + b (i.e. a,b = row,column) |
|
| 384 |
// |
|
| 385 |
// Up : index --> b<s-1 ? (s-1)*(s+4b)+a : 6*s*s -13*s +8 +a |
|
| 386 |
// Right : index --> 6*s*s - 12*s + 7 - index |
|
| 387 |
// Front : index --> if b==0 : s*s - 1 - index |
|
| 388 |
// if b==s-1: 6*s*s -11*s +6 - index |
|
| 389 |
// else |
|
| 390 |
// a==0: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-2) + s |
|
| 391 |
// else: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-1-a) |
|
| 392 |
// Down : index --> b==0 ? (s-1-a) : s*s + s-1 + 4*(b-1)*(s-1) - a |
|
| 393 |
// Left : index --> (s-1-a)*s + b |
|
| 394 |
// Back : index --> if b==s-1: s*(s-1-a) |
|
| 395 |
// if b==0 : 5*s*s -12*s + 8 + (s-1-a)*s |
|
| 396 |
// else |
|
| 397 |
// if a==s-1: s*s + 4*(s-2-b)*(s-1) |
|
| 398 |
// else : s*s + 4*(s-2-b)*(s-1) + s + (s-2-a)*2 |
|
| 399 |
|
|
| 400 |
public String retObjectString() |
|
| 401 |
{
|
|
| 402 |
StringBuilder objectString = new StringBuilder(); |
|
| 403 |
int layers = getNumLayers(); |
|
| 404 |
int len = layers*layers; |
|
| 405 |
int cubitIndex, row, col, color,face; |
|
| 406 |
|
|
| 407 |
final int RIGHT= 0; |
|
| 408 |
final int LEFT = 1; |
|
| 409 |
final int UP = 2; |
|
| 410 |
final int DOWN = 3; |
|
| 411 |
final int FRONT= 4; |
|
| 412 |
final int BACK = 5; |
|
| 413 |
|
|
| 414 |
// 'I' - interior, theoretically can happen |
|
| 415 |
final char[] FACE_NAMES = { 'R', 'L', 'U', 'D', 'F', 'B', 'I'};
|
|
| 416 |
|
|
| 417 |
face = UP; |
|
| 418 |
|
|
| 419 |
for(int i=0; i<len; i++) |
|
| 420 |
{
|
|
| 421 |
row = i/layers; |
|
| 422 |
col = i%layers; |
|
| 423 |
|
|
| 424 |
cubitIndex = col<layers-1 ? (layers-1)*(layers+4*col) + row : 6*layers*layers - 13*layers + 8 + row; |
|
| 425 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 426 |
objectString.append(FACE_NAMES[color]); |
|
| 427 |
} |
|
| 428 |
|
|
| 429 |
face = RIGHT; |
|
| 430 |
|
|
| 431 |
for(int i=0; i<len; i++) |
|
| 432 |
{
|
|
| 433 |
cubitIndex = 6*layers*layers - 12*layers +7 - i; |
|
| 434 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 435 |
objectString.append(FACE_NAMES[color]); |
|
| 436 |
} |
|
| 437 |
|
|
| 438 |
face = FRONT; |
|
| 439 |
|
|
| 440 |
for(int i=0; i<len; i++) |
|
| 441 |
{
|
|
| 442 |
row = i/layers; |
|
| 443 |
col = i%layers; |
|
| 444 |
|
|
| 445 |
if( col==layers-1 ) cubitIndex = 6*layers*layers - 11*layers + 6 -i; |
|
| 446 |
else if( col==0 ) cubitIndex = layers*layers - 1 - i; |
|
| 447 |
else |
|
| 448 |
{
|
|
| 449 |
if( row==0 ) cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-2) + layers; |
|
| 450 |
else cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-1-row); |
|
| 451 |
} |
|
| 452 |
|
|
| 453 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 454 |
objectString.append(FACE_NAMES[color]); |
|
| 455 |
} |
|
| 456 |
|
|
| 457 |
face = DOWN; |
|
| 458 |
|
|
| 459 |
for(int i=0; i<len; i++) |
|
| 460 |
{
|
|
| 461 |
row = i/layers; |
|
| 462 |
col = i%layers; |
|
| 463 |
|
|
| 464 |
cubitIndex = col==0 ? layers-1-row : layers*layers + layers-1 + 4*(col-1)*(layers-1) - row; |
|
| 465 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 466 |
objectString.append(FACE_NAMES[color]); |
|
| 467 |
} |
|
| 468 |
|
|
| 469 |
face = LEFT; |
|
| 470 |
|
|
| 471 |
for(int i=0; i<len; i++) |
|
| 472 |
{
|
|
| 473 |
row = i/layers; |
|
| 474 |
col = i%layers; |
|
| 475 |
|
|
| 476 |
cubitIndex = (layers-1-row)*layers + col; |
|
| 477 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 478 |
objectString.append(FACE_NAMES[color]); |
|
| 479 |
} |
|
| 480 |
|
|
| 481 |
face = BACK; |
|
| 482 |
|
|
| 483 |
for(int i=0; i<len; i++) |
|
| 484 |
{
|
|
| 485 |
row = i/layers; |
|
| 486 |
col = i%layers; |
|
| 487 |
|
|
| 488 |
if( col==layers-1 ) cubitIndex = layers*(layers-1-row); |
|
| 489 |
else if( col==0 ) cubitIndex = 5*layers*layers - 12*layers + 8 + (layers-1-row)*layers; |
|
| 490 |
else |
|
| 491 |
{
|
|
| 492 |
if( row==layers-1 ) cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1); |
|
| 493 |
else cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1) + layers + 2*(layers-2-row); |
|
| 494 |
} |
|
| 495 |
|
|
| 496 |
color = getCubitFaceColorIndex(cubitIndex,face); |
|
| 497 |
objectString.append(FACE_NAMES[color]); |
|
| 498 |
} |
|
| 499 |
|
|
| 500 |
return objectString.toString(); |
|
| 501 |
} |
|
| 502 |
|
|
| 503 | 377 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 504 | 378 |
|
| 505 | 379 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyDiamond.java | ||
|---|---|---|
| 604 | 604 |
return true; |
| 605 | 605 |
} |
| 606 | 606 |
|
| 607 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 608 |
// only needed for solvers - there are no Diamond solvers ATM |
|
| 609 |
|
|
| 610 |
public String retObjectString() |
|
| 611 |
{
|
|
| 612 |
return ""; |
|
| 613 |
} |
|
| 614 |
|
|
| 615 | 607 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 616 | 608 |
|
| 617 | 609 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyDino.java | ||
|---|---|---|
| 256 | 256 |
return BASIC_ANGLE; |
| 257 | 257 |
} |
| 258 | 258 |
|
| 259 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 260 |
// only needed for solvers - there are no Dino solvers ATM) |
|
| 261 |
|
|
| 262 |
public String retObjectString() |
|
| 263 |
{
|
|
| 264 |
return ""; |
|
| 265 |
} |
|
| 266 |
|
|
| 267 | 259 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 268 | 260 |
|
| 269 | 261 |
public int getComplexity(int numLayers) |
| src/main/java/org/distorted/objects/TwistyHelicopter.java | ||
|---|---|---|
| 513 | 513 |
return false; |
| 514 | 514 |
} |
| 515 | 515 |
|
| 516 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 517 |
// only needed for solvers - there are no Helicopter solvers ATM) |
|
| 518 |
|
|
| 519 |
public String retObjectString() |
|
| 520 |
{
|
|
| 521 |
return ""; |
|
| 522 |
} |
|
| 523 |
|
|
| 524 | 516 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 525 | 517 |
|
| 526 | 518 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyIvy.java | ||
|---|---|---|
| 508 | 508 |
return false; |
| 509 | 509 |
} |
| 510 | 510 |
|
| 511 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 512 |
// only needed for solvers - there are no Ivy solvers ATM) |
|
| 513 |
|
|
| 514 |
public String retObjectString() |
|
| 515 |
{
|
|
| 516 |
return ""; |
|
| 517 |
} |
|
| 518 |
|
|
| 519 | 511 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 520 | 512 |
|
| 521 | 513 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyJing.java | ||
|---|---|---|
| 480 | 480 |
return true; |
| 481 | 481 |
} |
| 482 | 482 |
|
| 483 |
//////////////////////////////////////////////////////////////////////// |
|
| 484 |
// only needed for solvers - there are no JingPyraminx solvers ATM) |
|
| 485 |
|
|
| 486 |
public String retObjectString() |
|
| 487 |
{
|
|
| 488 |
return ""; |
|
| 489 |
} |
|
| 490 |
|
|
| 491 | 483 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 492 | 484 |
|
| 493 | 485 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyMinx.java | ||
|---|---|---|
| 557 | 557 |
{
|
| 558 | 558 |
return BASIC_ANGLE; |
| 559 | 559 |
} |
| 560 |
|
|
| 561 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 562 |
// only needed for solvers - there are no Minx solvers ATM) |
|
| 563 |
|
|
| 564 |
public String retObjectString() |
|
| 565 |
{
|
|
| 566 |
return ""; |
|
| 567 |
} |
|
| 568 | 560 |
} |
| src/main/java/org/distorted/objects/TwistyObject.java | ||
|---|---|---|
| 399 | 399 |
} |
| 400 | 400 |
} |
| 401 | 401 |
|
| 402 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 403 |
|
|
| 404 |
int getCubitFaceColorIndex(int cubit, int face) |
|
| 405 |
{
|
|
| 406 |
Static4D texMap = mMesh.getTextureMap(NUM_FACES*cubit + face); |
|
| 407 |
|
|
| 408 |
int x = (int)(texMap.get0()/texMap.get2()); |
|
| 409 |
int y = (int)(texMap.get1()/texMap.get3()); |
|
| 410 |
|
|
| 411 |
return (mNumTexRows-1-y)*NUM_STICKERS_IN_ROW + x; |
|
| 412 |
} |
|
| 413 |
|
|
| 414 | 402 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 415 | 403 |
// normal, not bandaged, object. |
| 416 | 404 |
|
| ... | ... | |
| 572 | 560 |
factory.printStickerCoords(); |
| 573 | 561 |
} |
| 574 | 562 |
|
| 563 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 564 |
|
|
| 565 |
public int getCubitFaceColorIndex(int cubit, int face) |
|
| 566 |
{
|
|
| 567 |
Static4D texMap = mMesh.getTextureMap(NUM_FACES*cubit + face); |
|
| 568 |
|
|
| 569 |
int x = (int)(texMap.get0()/texMap.get2()); |
|
| 570 |
int y = (int)(texMap.get1()/texMap.get3()); |
|
| 571 |
|
|
| 572 |
return (mNumTexRows-1-y)*NUM_STICKERS_IN_ROW + x; |
|
| 573 |
} |
|
| 574 |
|
|
| 575 | 575 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 576 | 576 |
// the getFaceColors + final black in a grid (so that we do not exceed the maximum texture size) |
| 577 | 577 |
|
| ... | ... | |
| 984 | 984 |
public abstract Static3D[] getRotationAxis(); |
| 985 | 985 |
public abstract boolean isSolved(); |
| 986 | 986 |
public abstract int[] getBasicAngle(); |
| 987 |
public abstract String retObjectString(); |
|
| 988 | 987 |
public abstract void randomizeNewScramble(int[][] scramble, Random rnd, int curScramble, int totScrambles); |
| 989 | 988 |
public abstract int getObjectName(int numLayers); |
| 990 | 989 |
public abstract int getInventor(int numLayers); |
| src/main/java/org/distorted/objects/TwistyPyraminx.java | ||
|---|---|---|
| 468 | 468 |
return true; |
| 469 | 469 |
} |
| 470 | 470 |
|
| 471 |
//////////////////////////////////////////////////////////////////////// |
|
| 472 |
// only needed for solvers - there are no Pyraminx solvers ATM) |
|
| 473 |
|
|
| 474 |
public String retObjectString() |
|
| 475 |
{
|
|
| 476 |
return ""; |
|
| 477 |
} |
|
| 478 |
|
|
| 479 | 471 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 480 | 472 |
|
| 481 | 473 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyRedi.java | ||
|---|---|---|
| 538 | 538 |
CUBITS[19].mQuatIndex == q ); |
| 539 | 539 |
} |
| 540 | 540 |
|
| 541 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 542 |
// only needed for solvers - there are no Redi solvers ATM) |
|
| 543 |
|
|
| 544 |
public String retObjectString() |
|
| 545 |
{
|
|
| 546 |
return ""; |
|
| 547 |
} |
|
| 548 |
|
|
| 549 | 541 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 550 | 542 |
|
| 551 | 543 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistyRex.java | ||
|---|---|---|
| 685 | 685 |
return true; |
| 686 | 686 |
} |
| 687 | 687 |
|
| 688 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 689 |
// only needed for solvers - there are no Rex solvers ATM |
|
| 690 |
|
|
| 691 |
public String retObjectString() |
|
| 692 |
{
|
|
| 693 |
return ""; |
|
| 694 |
} |
|
| 695 |
|
|
| 696 | 688 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 697 | 689 |
|
| 698 | 690 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistySkewb.java | ||
|---|---|---|
| 687 | 687 |
return true; |
| 688 | 688 |
} |
| 689 | 689 |
|
| 690 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 691 |
// only needed for solvers - there are no Skewb solvers ATM) |
|
| 692 |
|
|
| 693 |
public String retObjectString() |
|
| 694 |
{
|
|
| 695 |
return ""; |
|
| 696 |
} |
|
| 697 |
|
|
| 698 | 690 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 699 | 691 |
|
| 700 | 692 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/objects/TwistySquare.java | ||
|---|---|---|
| 295 | 295 |
{
|
| 296 | 296 |
return BASIC_ANGLE; |
| 297 | 297 |
} |
| 298 |
|
|
| 299 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 300 |
// only needed for solvers - there are no Square solvers ATM) |
|
| 301 |
|
|
| 302 |
public String retObjectString() |
|
| 303 |
{
|
|
| 304 |
return ""; |
|
| 305 |
} |
|
| 306 |
|
|
| 307 | 298 |
} |
| src/main/java/org/distorted/objects/TwistyUltimate.java | ||
|---|---|---|
| 485 | 485 |
return true; |
| 486 | 486 |
} |
| 487 | 487 |
|
| 488 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 489 |
// only needed for solvers - there are no Skewb Ultimate solvers ATM) |
|
| 490 |
|
|
| 491 |
public String retObjectString() |
|
| 492 |
{
|
|
| 493 |
return ""; |
|
| 494 |
} |
|
| 495 |
|
|
| 496 | 488 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 497 | 489 |
|
| 498 | 490 |
public int getObjectName(int numLayers) |
| src/main/java/org/distorted/screens/RubikScreenSolver.java | ||
|---|---|---|
| 212 | 212 |
{
|
| 213 | 213 |
mSolving = true; |
| 214 | 214 |
TwistyObject object = act.getObject(); |
| 215 |
String objectString = object.retObjectString(); |
|
| 216 |
SolverMain solver = new SolverMain( act.getResources(), mCurrentObject, mCurrentObjectSize, objectString ); |
|
| 215 |
SolverMain solver = new SolverMain( act.getResources(), object ); |
|
| 217 | 216 |
solver.start(); |
| 218 | 217 |
} |
| 219 | 218 |
} |
| src/main/java/org/distorted/solvers/SolverMain.java | ||
|---|---|---|
| 23 | 23 |
|
| 24 | 24 |
import org.distorted.main.R; |
| 25 | 25 |
import org.distorted.objects.ObjectList; |
| 26 |
import org.distorted.objects.TwistyObject; |
|
| 26 | 27 |
import org.distorted.screens.ScreenList; |
| 27 | 28 |
import org.distorted.screens.RubikScreenSolver; |
| 28 | 29 |
|
| ... | ... | |
| 30 | 31 |
|
| 31 | 32 |
public class SolverMain implements Runnable |
| 32 | 33 |
{
|
| 33 |
private final String mObjectPosition; |
|
| 34 | 34 |
private final Resources mRes; |
| 35 |
private final ObjectList mObject; |
|
| 36 |
private final int mSize; |
|
| 35 |
private final TwistyObject mObject; |
|
| 37 | 36 |
|
| 38 | 37 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 39 | 38 |
|
| 40 |
public SolverMain(Resources res, ObjectList object, int size, String position )
|
|
| 39 |
public SolverMain(Resources res, TwistyObject object)
|
|
| 41 | 40 |
{
|
| 42 |
mRes = res; |
|
| 43 |
mObject = object; |
|
| 44 |
mSize = size; |
|
| 45 |
mObjectPosition = position; |
|
| 41 |
mRes = res; |
|
| 42 |
mObject= object; |
|
| 46 | 43 |
} |
| 47 | 44 |
|
| 48 | 45 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 75 | 72 |
if( !org.distorted.solvers.cube3.Search.prepare(mRes) ) |
| 76 | 73 |
result= "Error 9"; |
| 77 | 74 |
else |
| 78 |
result = org.distorted.solvers.cube3.Search.solution(mObjectPosition, 24, 20); |
|
| 75 |
{
|
|
| 76 |
String objectPosition = prepareCube3position(); |
|
| 77 |
result = org.distorted.solvers.cube3.Search.solution(objectPosition, 24, 20); |
|
| 78 |
} |
|
| 79 | 79 |
|
| 80 | 80 |
if (result.contains("Error"))
|
| 81 | 81 |
{
|
| ... | ... | |
| 100 | 100 |
} |
| 101 | 101 |
} |
| 102 | 102 |
|
| 103 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 104 |
// order: Up --> Right --> Front --> Down --> Left --> Back |
|
| 105 |
// (because the first implemented Solver - the two-phase Cube3 one - expects such order) |
|
| 106 |
// |
|
| 107 |
// Solved 3x3x3 Cube maps to "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB" |
|
| 108 |
// |
|
| 109 |
// s : size of the cube; let index = a*s + b (i.e. a,b = row,column) |
|
| 110 |
// |
|
| 111 |
// Up : index --> b<s-1 ? (s-1)*(s+4b)+a : 6*s*s -13*s +8 +a |
|
| 112 |
// Right : index --> 6*s*s - 12*s + 7 - index |
|
| 113 |
// Front : index --> if b==0 : s*s - 1 - index |
|
| 114 |
// if b==s-1: 6*s*s -11*s +6 - index |
|
| 115 |
// else |
|
| 116 |
// a==0: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-2) + s |
|
| 117 |
// else: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-1-a) |
|
| 118 |
// Down : index --> b==0 ? (s-1-a) : s*s + s-1 + 4*(b-1)*(s-1) - a |
|
| 119 |
// Left : index --> (s-1-a)*s + b |
|
| 120 |
// Back : index --> if b==s-1: s*(s-1-a) |
|
| 121 |
// if b==0 : 5*s*s -12*s + 8 + (s-1-a)*s |
|
| 122 |
// else |
|
| 123 |
// if a==s-1: s*s + 4*(s-2-b)*(s-1) |
|
| 124 |
// else : s*s + 4*(s-2-b)*(s-1) + s + (s-2-a)*2 |
|
| 125 |
|
|
| 126 |
private String prepareCube3position() |
|
| 127 |
{
|
|
| 128 |
StringBuilder objectString = new StringBuilder(); |
|
| 129 |
int layers = mObject.getNumLayers(); |
|
| 130 |
int len = layers*layers; |
|
| 131 |
int cubitIndex, row, col, color,face; |
|
| 132 |
|
|
| 133 |
final int RIGHT= 0; |
|
| 134 |
final int LEFT = 1; |
|
| 135 |
final int UP = 2; |
|
| 136 |
final int DOWN = 3; |
|
| 137 |
final int FRONT= 4; |
|
| 138 |
final int BACK = 5; |
|
| 139 |
|
|
| 140 |
// 'I' - interior, theoretically can happen |
|
| 141 |
final char[] FACE_NAMES = { 'R', 'L', 'U', 'D', 'F', 'B', 'I'};
|
|
| 142 |
|
|
| 143 |
face = UP; |
|
| 144 |
|
|
| 145 |
for(int i=0; i<len; i++) |
|
| 146 |
{
|
|
| 147 |
row = i/layers; |
|
| 148 |
col = i%layers; |
|
| 149 |
|
|
| 150 |
cubitIndex = col<layers-1 ? (layers-1)*(layers+4*col) + row : 6*layers*layers - 13*layers + 8 + row; |
|
| 151 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 152 |
objectString.append(FACE_NAMES[color]); |
|
| 153 |
} |
|
| 154 |
|
|
| 155 |
face = RIGHT; |
|
| 156 |
|
|
| 157 |
for(int i=0; i<len; i++) |
|
| 158 |
{
|
|
| 159 |
cubitIndex = 6*layers*layers - 12*layers +7 - i; |
|
| 160 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 161 |
objectString.append(FACE_NAMES[color]); |
|
| 162 |
} |
|
| 163 |
|
|
| 164 |
face = FRONT; |
|
| 165 |
|
|
| 166 |
for(int i=0; i<len; i++) |
|
| 167 |
{
|
|
| 168 |
row = i/layers; |
|
| 169 |
col = i%layers; |
|
| 170 |
|
|
| 171 |
if( col==layers-1 ) cubitIndex = 6*layers*layers - 11*layers + 6 -i; |
|
| 172 |
else if( col==0 ) cubitIndex = layers*layers - 1 - i; |
|
| 173 |
else |
|
| 174 |
{
|
|
| 175 |
if( row==0 ) cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-2) + layers; |
|
| 176 |
else cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-1-row); |
|
| 177 |
} |
|
| 178 |
|
|
| 179 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 180 |
objectString.append(FACE_NAMES[color]); |
|
| 181 |
} |
|
| 182 |
|
|
| 183 |
face = DOWN; |
|
| 184 |
|
|
| 185 |
for(int i=0; i<len; i++) |
|
| 186 |
{
|
|
| 187 |
row = i/layers; |
|
| 188 |
col = i%layers; |
|
| 189 |
|
|
| 190 |
cubitIndex = col==0 ? layers-1-row : layers*layers + layers-1 + 4*(col-1)*(layers-1) - row; |
|
| 191 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 192 |
objectString.append(FACE_NAMES[color]); |
|
| 193 |
} |
|
| 194 |
|
|
| 195 |
face = LEFT; |
|
| 196 |
|
|
| 197 |
for(int i=0; i<len; i++) |
|
| 198 |
{
|
|
| 199 |
row = i/layers; |
|
| 200 |
col = i%layers; |
|
| 201 |
|
|
| 202 |
cubitIndex = (layers-1-row)*layers + col; |
|
| 203 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 204 |
objectString.append(FACE_NAMES[color]); |
|
| 205 |
} |
|
| 206 |
|
|
| 207 |
face = BACK; |
|
| 208 |
|
|
| 209 |
for(int i=0; i<len; i++) |
|
| 210 |
{
|
|
| 211 |
row = i/layers; |
|
| 212 |
col = i%layers; |
|
| 213 |
|
|
| 214 |
if( col==layers-1 ) cubitIndex = layers*(layers-1-row); |
|
| 215 |
else if( col==0 ) cubitIndex = 5*layers*layers - 12*layers + 8 + (layers-1-row)*layers; |
|
| 216 |
else |
|
| 217 |
{
|
|
| 218 |
if( row==layers-1 ) cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1); |
|
| 219 |
else cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1) + layers + 2*(layers-2-row); |
|
| 220 |
} |
|
| 221 |
|
|
| 222 |
color = mObject.getCubitFaceColorIndex(cubitIndex,face); |
|
| 223 |
objectString.append(FACE_NAMES[color]); |
|
| 224 |
} |
|
| 225 |
|
|
| 226 |
return objectString.toString(); |
|
| 227 |
} |
|
| 228 |
|
|
| 103 | 229 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 104 | 230 |
|
| 105 | 231 |
private void interruptCube3() |
| ... | ... | |
| 121 | 247 |
{
|
| 122 | 248 |
RubikScreenSolver solver = (RubikScreenSolver) ScreenList.SVER.getScreenClass(); |
| 123 | 249 |
|
| 124 |
if( mObject == ObjectList.CUBE && mSize == 3)
|
|
| 250 |
if( mObject.getObjectList()==ObjectList.CUBE && mObject.getNumLayers()==3 )
|
|
| 125 | 251 |
{
|
| 126 | 252 |
solveCube3(solver); |
| 127 | 253 |
} |
Also available in: Unified diff
Move the TwistyObject.retCubePosition() to the solver.