C# 如何操纵由2D数组表示的Rubiks立方体的面以执行面旋转
我正在用C#创建一个解决Rubiks立方体的项目。它将Rubiks多维数据集的当前状态作为输入,并输出一系列要执行的移动,以使用指定的符号来求解多维数据集 多维数据集由6个长度为9的字符串数组组成的数组表示:C# 如何操纵由2D数组表示的Rubiks立方体的面以执行面旋转,c#,rubiks-cube,C#,Rubiks Cube,我正在用C#创建一个解决Rubiks立方体的项目。它将Rubiks多维数据集的当前状态作为输入,并输出一系列要执行的移动,以使用指定的符号来求解多维数据集 多维数据集由6个长度为9的字符串数组组成的数组表示: private string[,] CubeState = new string[6,9] { { "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE"}, { "BL
private string[,] CubeState = new string[6,9] {
{ "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE"},
{ "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE"},
{ "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED"},
{ "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN"},
{ "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE"},
{ "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW" } };
我已经创建了一个excel电子表格来表示每个面
你可以把它想象成一张网,折叠在一起形成立方体
因为我使用的是控制台应用程序,而不是windows窗体应用程序,所以我必须通过将每个面写入彼此下面的控制台来表示多维数据集。我使用以下方法执行此操作PrintCube()
:
我的其余代码在这里:
Cube.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Cube
{
private string[,] CubeState = new string[6, 9] {
{ "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE"},
{ "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE"},
{ "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED"},
{ "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN"},
{ "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE"},
{ "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW" } };
private readonly string[] CubeCenters = new string[] { "WHITE", "BLUE", "RED", "GREEN", "ORANGE", "YELLOW" };
private readonly string[] CubeSides = new string[] { "FRONT", "TOP", "RIGHT", "BOTTOM", "LEFT", "BACK" };
public Cube()
{
}
public void PerformOperation(CubeOperations operation)
{
string[,] newCubeState = CubeState;
string tempString;
switch (operation)
{
//Console.WriteLine("{0} -> {1}\nOld Face: {2} Old Item: {3}\nNew Face: {4} New Item: {5}\n\n", newCubeState[3, i], CubeState[5, 8 - i], 5, (8 - i), 3, (i));
case CubeOperations.F:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[4, (3 * (i - 6)) + 2];
newCubeState[4, (3 * (i - 6)) + 2] = CubeState[3, i - 6]; //258 012
newCubeState[3, i - 6] = CubeState[2, 3 * (i - 6)]; //012 036
newCubeState[2, 3 * (i - 6)] = CubeState[1, i]; //036 678
newCubeState[1, i] = tempString; //678 258
// Test 2
/*newCubeState[1, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[1, i];
newCubeState[3, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[3, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.WHITE);
break;
case CubeOperations.R:
for (int i = 2; i < 9; i += 3)
{
// Test 1
tempString = CubeState[3, i];
newCubeState[3, i] = CubeState[5, 8 - i]; //258 630
newCubeState[5, i - 2] = CubeState[1, 10 - i]; //036 852
newCubeState[1, i] = CubeState[0, i]; //258 258
newCubeState[0, i] = tempString; //258 258
// Test 2
/*newCubeState[0, i] = CubeState[3, i];
newCubeState[1, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[1, i - 2];
newCubeState[3, i - 2] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.RED);
break;
case CubeOperations.U:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i]; //012 012
newCubeState[0, i] = CubeState[2, i]; //012 012
newCubeState[2, i] = CubeState[5, i]; //012 012
newCubeState[5, i] = tempString; //012 012
// Test 2
/*newCubeState[0, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.BLUE);
break;
case CubeOperations.L:
for (int i = 0; i < 7; i += 3)
{
// Test 1
tempString = CubeState[0, i];
newCubeState[0, i] = CubeState[1, i]; //036 036
newCubeState[1, i] = CubeState[5, i + 2]; //036 258
newCubeState[5, i + 2] = CubeState[3, i]; //258 036
newCubeState[3, i] = tempString; //036 036
// Test 2
/*newCubeState[0, i] = CubeState[1, i];
newCubeState[1, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.ORANGE);
break;
case CubeOperations.B:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[1, i];
newCubeState[1, i] = CubeState[2, (i * 3) + 2]; //012 258
newCubeState[2, (i * 3) + 2] = CubeState[3, i + 6]; //258 678
newCubeState[3, i + 6] = CubeState[4, (i * 3)]; //678 036
newCubeState[4, (i * 3)] = tempString; //036 012
// Test 2
/*newCubeState[1, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[1, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.YELLOW);
break;
case CubeOperations.D:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[2, i];
newCubeState[2, i] = CubeState[0, i]; //678 678
newCubeState[0, i] = CubeState[4, i]; //678 678
newCubeState[4, i] = CubeState[5, i]; //678 678
newCubeState[5, i] = tempString; //678 678
// Test 2
/*newCubeState[0, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.GREEN);
break;
case CubeOperations.FPRIME:
break;
case CubeOperations.RPRIME:
break;
case CubeOperations.UPRIME:
break;
case CubeOperations.LPRIME:
break;
case CubeOperations.BPRIME:
break;
case CubeOperations.DPRIME:
break;
case CubeOperations.F2:
break;
case CubeOperations.R2:
break;
case CubeOperations.U2:
break;
case CubeOperations.L2:
break;
case CubeOperations.B2:
break;
case CubeOperations.D2:
break;
default:
break;
}
CubeState = newCubeState;
}
private void RotateFaceRight(string[,] cube, CubeCenters faceCenterColour)
{
string[] face = new string[9];
int faceNumber = (int)faceCenterColour;
for (int i = 0; i < 9; i++)
{
face[i] = cube[(int)faceCenterColour, i];
}
/*
* 012 -> 630
* 345 -> 741
* 678 -> 852
*/
cube[faceNumber, 0] = face[6];
cube[faceNumber, 1] = face[3];
cube[faceNumber, 2] = face[0];
cube[faceNumber, 3] = face[7];
cube[faceNumber, 4] = face[4];
cube[faceNumber, 5] = face[1];
cube[faceNumber, 6] = face[8];
cube[faceNumber, 7] = face[5];
cube[faceNumber, 8] = face[2];
}
public void PrintCube()
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("--" + CubeState[i, j]);
if (j % 3 == 2 && j != 0)
{
Console.Write("\r\n");
}
}
Console.WriteLine("\r\n");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeCenters
{
WHITE,
BLUE,
RED,
GREEN,
ORANGE,
YELLOW
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeOperations
{
F,
R,
U,
L,
B,
D,
FPRIME,
RPRIME,
UPRIME,
LPRIME,
BPRIME,
DPRIME,
F2,
R2,
U2,
L2,
B2,
D2
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Program
{
static void Main(string[] args)
{
Cube cube = new Cube();
cube.PerformOperation(CubeOperations.R);
cube.PrintCube();
Console.ReadLine();
}
}
}
CubeOperations.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Cube
{
private string[,] CubeState = new string[6, 9] {
{ "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE"},
{ "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE"},
{ "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED"},
{ "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN"},
{ "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE"},
{ "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW" } };
private readonly string[] CubeCenters = new string[] { "WHITE", "BLUE", "RED", "GREEN", "ORANGE", "YELLOW" };
private readonly string[] CubeSides = new string[] { "FRONT", "TOP", "RIGHT", "BOTTOM", "LEFT", "BACK" };
public Cube()
{
}
public void PerformOperation(CubeOperations operation)
{
string[,] newCubeState = CubeState;
string tempString;
switch (operation)
{
//Console.WriteLine("{0} -> {1}\nOld Face: {2} Old Item: {3}\nNew Face: {4} New Item: {5}\n\n", newCubeState[3, i], CubeState[5, 8 - i], 5, (8 - i), 3, (i));
case CubeOperations.F:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[4, (3 * (i - 6)) + 2];
newCubeState[4, (3 * (i - 6)) + 2] = CubeState[3, i - 6]; //258 012
newCubeState[3, i - 6] = CubeState[2, 3 * (i - 6)]; //012 036
newCubeState[2, 3 * (i - 6)] = CubeState[1, i]; //036 678
newCubeState[1, i] = tempString; //678 258
// Test 2
/*newCubeState[1, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[1, i];
newCubeState[3, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[3, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.WHITE);
break;
case CubeOperations.R:
for (int i = 2; i < 9; i += 3)
{
// Test 1
tempString = CubeState[3, i];
newCubeState[3, i] = CubeState[5, 8 - i]; //258 630
newCubeState[5, i - 2] = CubeState[1, 10 - i]; //036 852
newCubeState[1, i] = CubeState[0, i]; //258 258
newCubeState[0, i] = tempString; //258 258
// Test 2
/*newCubeState[0, i] = CubeState[3, i];
newCubeState[1, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[1, i - 2];
newCubeState[3, i - 2] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.RED);
break;
case CubeOperations.U:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i]; //012 012
newCubeState[0, i] = CubeState[2, i]; //012 012
newCubeState[2, i] = CubeState[5, i]; //012 012
newCubeState[5, i] = tempString; //012 012
// Test 2
/*newCubeState[0, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.BLUE);
break;
case CubeOperations.L:
for (int i = 0; i < 7; i += 3)
{
// Test 1
tempString = CubeState[0, i];
newCubeState[0, i] = CubeState[1, i]; //036 036
newCubeState[1, i] = CubeState[5, i + 2]; //036 258
newCubeState[5, i + 2] = CubeState[3, i]; //258 036
newCubeState[3, i] = tempString; //036 036
// Test 2
/*newCubeState[0, i] = CubeState[1, i];
newCubeState[1, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.ORANGE);
break;
case CubeOperations.B:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[1, i];
newCubeState[1, i] = CubeState[2, (i * 3) + 2]; //012 258
newCubeState[2, (i * 3) + 2] = CubeState[3, i + 6]; //258 678
newCubeState[3, i + 6] = CubeState[4, (i * 3)]; //678 036
newCubeState[4, (i * 3)] = tempString; //036 012
// Test 2
/*newCubeState[1, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[1, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.YELLOW);
break;
case CubeOperations.D:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[2, i];
newCubeState[2, i] = CubeState[0, i]; //678 678
newCubeState[0, i] = CubeState[4, i]; //678 678
newCubeState[4, i] = CubeState[5, i]; //678 678
newCubeState[5, i] = tempString; //678 678
// Test 2
/*newCubeState[0, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.GREEN);
break;
case CubeOperations.FPRIME:
break;
case CubeOperations.RPRIME:
break;
case CubeOperations.UPRIME:
break;
case CubeOperations.LPRIME:
break;
case CubeOperations.BPRIME:
break;
case CubeOperations.DPRIME:
break;
case CubeOperations.F2:
break;
case CubeOperations.R2:
break;
case CubeOperations.U2:
break;
case CubeOperations.L2:
break;
case CubeOperations.B2:
break;
case CubeOperations.D2:
break;
default:
break;
}
CubeState = newCubeState;
}
private void RotateFaceRight(string[,] cube, CubeCenters faceCenterColour)
{
string[] face = new string[9];
int faceNumber = (int)faceCenterColour;
for (int i = 0; i < 9; i++)
{
face[i] = cube[(int)faceCenterColour, i];
}
/*
* 012 -> 630
* 345 -> 741
* 678 -> 852
*/
cube[faceNumber, 0] = face[6];
cube[faceNumber, 1] = face[3];
cube[faceNumber, 2] = face[0];
cube[faceNumber, 3] = face[7];
cube[faceNumber, 4] = face[4];
cube[faceNumber, 5] = face[1];
cube[faceNumber, 6] = face[8];
cube[faceNumber, 7] = face[5];
cube[faceNumber, 8] = face[2];
}
public void PrintCube()
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("--" + CubeState[i, j]);
if (j % 3 == 2 && j != 0)
{
Console.Write("\r\n");
}
}
Console.WriteLine("\r\n");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeCenters
{
WHITE,
BLUE,
RED,
GREEN,
ORANGE,
YELLOW
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeOperations
{
F,
R,
U,
L,
B,
D,
FPRIME,
RPRIME,
UPRIME,
LPRIME,
BPRIME,
DPRIME,
F2,
R2,
U2,
L2,
B2,
D2
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Program
{
static void Main(string[] args)
{
Cube cube = new Cube();
cube.PerformOperation(CubeOperations.R);
cube.PrintCube();
Console.ReadLine();
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Cube
{
private string[,] CubeState = new string[6, 9] {
{ "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE", "WHITE"},
{ "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE", "BLUE"},
{ "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED", "RED"},
{ "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN", "GREEN"},
{ "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE", "ORANGE"},
{ "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW", "YELLOW" } };
private readonly string[] CubeCenters = new string[] { "WHITE", "BLUE", "RED", "GREEN", "ORANGE", "YELLOW" };
private readonly string[] CubeSides = new string[] { "FRONT", "TOP", "RIGHT", "BOTTOM", "LEFT", "BACK" };
public Cube()
{
}
public void PerformOperation(CubeOperations operation)
{
string[,] newCubeState = CubeState;
string tempString;
switch (operation)
{
//Console.WriteLine("{0} -> {1}\nOld Face: {2} Old Item: {3}\nNew Face: {4} New Item: {5}\n\n", newCubeState[3, i], CubeState[5, 8 - i], 5, (8 - i), 3, (i));
case CubeOperations.F:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[4, (3 * (i - 6)) + 2];
newCubeState[4, (3 * (i - 6)) + 2] = CubeState[3, i - 6]; //258 012
newCubeState[3, i - 6] = CubeState[2, 3 * (i - 6)]; //012 036
newCubeState[2, 3 * (i - 6)] = CubeState[1, i]; //036 678
newCubeState[1, i] = tempString; //678 258
// Test 2
/*newCubeState[1, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[1, i];
newCubeState[3, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[3, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.WHITE);
break;
case CubeOperations.R:
for (int i = 2; i < 9; i += 3)
{
// Test 1
tempString = CubeState[3, i];
newCubeState[3, i] = CubeState[5, 8 - i]; //258 630
newCubeState[5, i - 2] = CubeState[1, 10 - i]; //036 852
newCubeState[1, i] = CubeState[0, i]; //258 258
newCubeState[0, i] = tempString; //258 258
// Test 2
/*newCubeState[0, i] = CubeState[3, i];
newCubeState[1, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[1, i - 2];
newCubeState[3, i - 2] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.RED);
break;
case CubeOperations.U:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i]; //012 012
newCubeState[0, i] = CubeState[2, i]; //012 012
newCubeState[2, i] = CubeState[5, i]; //012 012
newCubeState[5, i] = tempString; //012 012
// Test 2
/*newCubeState[0, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.BLUE);
break;
case CubeOperations.L:
for (int i = 0; i < 7; i += 3)
{
// Test 1
tempString = CubeState[0, i];
newCubeState[0, i] = CubeState[1, i]; //036 036
newCubeState[1, i] = CubeState[5, i + 2]; //036 258
newCubeState[5, i + 2] = CubeState[3, i]; //258 036
newCubeState[3, i] = tempString; //036 036
// Test 2
/*newCubeState[0, i] = CubeState[1, i];
newCubeState[1, i] = CubeState[5, i];
newCubeState[5, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[0, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.ORANGE);
break;
case CubeOperations.B:
for (int i = 0; i < 3; i++)
{
// Test 1
tempString = CubeState[1, i];
newCubeState[1, i] = CubeState[2, (i * 3) + 2]; //012 258
newCubeState[2, (i * 3) + 2] = CubeState[3, i + 6]; //258 678
newCubeState[3, i + 6] = CubeState[4, (i * 3)]; //678 036
newCubeState[4, (i * 3)] = tempString; //036 012
// Test 2
/*newCubeState[1, i] = CubeState[2, i];
newCubeState[2, i] = CubeState[3, i];
newCubeState[3, i] = CubeState[4, i];
newCubeState[4, i] = CubeState[1, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.YELLOW);
break;
case CubeOperations.D:
for (int i = 6; i < 9; i++)
{
// Test 1
tempString = CubeState[2, i];
newCubeState[2, i] = CubeState[0, i]; //678 678
newCubeState[0, i] = CubeState[4, i]; //678 678
newCubeState[4, i] = CubeState[5, i]; //678 678
newCubeState[5, i] = tempString; //678 678
// Test 2
/*newCubeState[0, i] = CubeState[4, i];
newCubeState[2, i] = CubeState[0, i];
newCubeState[5, i] = CubeState[2, i];
newCubeState[4, i] = CubeState[5, i];*/
}
RotateFaceRight(newCubeState, Rubiks_Cube_Solver.CubeCenters.GREEN);
break;
case CubeOperations.FPRIME:
break;
case CubeOperations.RPRIME:
break;
case CubeOperations.UPRIME:
break;
case CubeOperations.LPRIME:
break;
case CubeOperations.BPRIME:
break;
case CubeOperations.DPRIME:
break;
case CubeOperations.F2:
break;
case CubeOperations.R2:
break;
case CubeOperations.U2:
break;
case CubeOperations.L2:
break;
case CubeOperations.B2:
break;
case CubeOperations.D2:
break;
default:
break;
}
CubeState = newCubeState;
}
private void RotateFaceRight(string[,] cube, CubeCenters faceCenterColour)
{
string[] face = new string[9];
int faceNumber = (int)faceCenterColour;
for (int i = 0; i < 9; i++)
{
face[i] = cube[(int)faceCenterColour, i];
}
/*
* 012 -> 630
* 345 -> 741
* 678 -> 852
*/
cube[faceNumber, 0] = face[6];
cube[faceNumber, 1] = face[3];
cube[faceNumber, 2] = face[0];
cube[faceNumber, 3] = face[7];
cube[faceNumber, 4] = face[4];
cube[faceNumber, 5] = face[1];
cube[faceNumber, 6] = face[8];
cube[faceNumber, 7] = face[5];
cube[faceNumber, 8] = face[2];
}
public void PrintCube()
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("--" + CubeState[i, j]);
if (j % 3 == 2 && j != 0)
{
Console.Write("\r\n");
}
}
Console.WriteLine("\r\n");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeCenters
{
WHITE,
BLUE,
RED,
GREEN,
ORANGE,
YELLOW
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
enum CubeOperations
{
F,
R,
U,
L,
B,
D,
FPRIME,
RPRIME,
UPRIME,
LPRIME,
BPRIME,
DPRIME,
F2,
R2,
U2,
L2,
B2,
D2
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rubiks_Cube_Solver
{
class Program
{
static void Main(string[] args)
{
Cube cube = new Cube();
cube.PerformOperation(CubeOperations.R);
cube.PrintCube();
Console.ReadLine();
}
}
}
这回答了你的问题吗<代码>字符串[,]newCubeState=CubeState代码>,这些是对同一(仅)多维数据集状态数组的引用。因此,使用一个变量更改它会自动“更新”另一个变量/属性。您可能希望对多维数据集的边和块使用枚举或常量。像
newCubeState[2,3*(i-6)]
这样的表达式可读性不强,您必须始终检查哪些索引对应于哪一面/块。@Progman我的主要问题不是引用多维数据集状态数组,而是显示了不正确的结果,但感谢您的反馈。在CubeOperations.R
部分,为什么要编写CubeState[5,8-i]
,然后在下一行中使用不同的索引newCubeState[5,i-2]
?它们不应该和你写的所有其他案例一样吗?