我需要帮助来完成我的 2D 魔方
I need help to finish my 2D Rubik's Cube
我正在尝试制作一个基本的 2D Rubik Cube 3x3,但我在方块的颜色方面遇到了问题,当我开始混合位置导致颜色没有相应改变并且我不知道如何修复它。
这是代码。非常感谢您的帮助和时间。
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == upLeft){
Collections.swap(squaresList, 0, 27);
Collections.swap(squaresList, 3, 30);
Collections.swap(squaresList, 6, 33);
Collections.swap(squaresList, 27, 18);
Collections.swap(squaresList, 30, 21);
Collections.swap(squaresList, 33, 24);
Collections.swap(squaresList, 18, 9);
Collections.swap(squaresList, 21, 12);
Collections.swap(squaresList, 24, 15);
// HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM
// I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT...
for(int i = 0; i < squaresList.size(); i++){
if(i <= 8){
squaresList.get(i).setBackground(Color.WHITE);
}else if(i >= 9 && i <= 17){
squaresList.get(i).setBackground(Color.YELLOW);
}else if(i > 17 && i <= 26){
squaresList.get(i).setBackground(Color.BLUE);
}else if(i > 26 && i <= 35){
squaresList.get(i).setBackground(Color.RED);
}else if(i > 35 && i <= 44){
squaresList.get(i).setBackground(Color.GREEN);
}else if(i > 44 && i <= 53){
squaresList.get(i).setBackground(Color.ORANGE);
}
}
}
if(e.getSource() == upLeftRight){
Collections.swap(squaresList, 0, 45);
Collections.swap(squaresList, 1, 46);
Collections.swap(squaresList, 2, 47);
Collections.swap(squaresList, 45, 18);
Collections.swap(squaresList, 46, 19);
Collections.swap(squaresList, 47, 20);
Collections.swap(squaresList, 18, 36);
Collections.swap(squaresList, 19, 37);
Collections.swap(squaresList, 20, 38);
// HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM
// I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT...
for(int i = 0; i < squaresList.size(); i++){
if(i <= 8){
squaresList.get(i).setBackground(Color.WHITE);
}else if(i >= 9 && i <= 17){
squaresList.get(i).setBackground(Color.YELLOW);
}else if(i > 17 && i <= 26){
squaresList.get(i).setBackground(Color.BLUE);
}else if(i > 26 && i <= 35){
squaresList.get(i).setBackground(Color.RED);
}else if(i > 35 && i <= 44){
squaresList.get(i).setBackground(Color.GREEN);
}else if(i > 44 && i <= 53){
squaresList.get(i).setBackground(Color.ORANGE);
}
}
}
}
根据您提供的代码,我假设 squareList 包含正方形但不包含颜色值。您的方法的问题是您使用 Collection.swap()
在方块值周围移动,但您没有根据原始值分配颜色值,这意味着交换方块时不会交换颜色。
考虑以下示例。假设数字代表你的每一个方格。
Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}
并且您正在按黑-蓝-绿-红的顺序分配到此列表。结果将是颜色按以下顺序排列:
Original colour list: {Black, Blue, Green, Red}
另一方面,执行交换后:
After swap, the square list: {3, 1, 2, 4}
但是你按相同的顺序给颜色,这又是:
After swap, colour list: {Black, Blue, Green, Red}
所以你的 sq 3 有黑色,1 有蓝色,等等,看起来颜色没有变化。我建议两种处理方法:一种是在数据中保留一个单独的颜色列表,并在交换正方形时将其交换在一起。并使用颜色列表中的顺序分配颜色。
另一种解决方案是为每个正方形制作一个数据结构,其中包含颜色值。代码将如下所示:
class Square
{
Color myColour;
// ...
}
有了这个结构,当你执行交换时你正在做:
Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}
After swap, square list: {3(Green), 2(Blue), 1(Black), 4(Red)}
希望对您有所帮助。
我正在尝试制作一个基本的 2D Rubik Cube 3x3,但我在方块的颜色方面遇到了问题,当我开始混合位置导致颜色没有相应改变并且我不知道如何修复它。
这是代码。非常感谢您的帮助和时间。
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == upLeft){
Collections.swap(squaresList, 0, 27);
Collections.swap(squaresList, 3, 30);
Collections.swap(squaresList, 6, 33);
Collections.swap(squaresList, 27, 18);
Collections.swap(squaresList, 30, 21);
Collections.swap(squaresList, 33, 24);
Collections.swap(squaresList, 18, 9);
Collections.swap(squaresList, 21, 12);
Collections.swap(squaresList, 24, 15);
// HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM
// I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT...
for(int i = 0; i < squaresList.size(); i++){
if(i <= 8){
squaresList.get(i).setBackground(Color.WHITE);
}else if(i >= 9 && i <= 17){
squaresList.get(i).setBackground(Color.YELLOW);
}else if(i > 17 && i <= 26){
squaresList.get(i).setBackground(Color.BLUE);
}else if(i > 26 && i <= 35){
squaresList.get(i).setBackground(Color.RED);
}else if(i > 35 && i <= 44){
squaresList.get(i).setBackground(Color.GREEN);
}else if(i > 44 && i <= 53){
squaresList.get(i).setBackground(Color.ORANGE);
}
}
}
if(e.getSource() == upLeftRight){
Collections.swap(squaresList, 0, 45);
Collections.swap(squaresList, 1, 46);
Collections.swap(squaresList, 2, 47);
Collections.swap(squaresList, 45, 18);
Collections.swap(squaresList, 46, 19);
Collections.swap(squaresList, 47, 20);
Collections.swap(squaresList, 18, 36);
Collections.swap(squaresList, 19, 37);
Collections.swap(squaresList, 20, 38);
// HERE IS WHERE I THINK THE PROBLEM IS...BUT I CANT SEE PAST THE PROBLEM
// I TRIED USING HASHMAP SO EACH SQUARE HAS A UNIQUE CODE FOR ITS COLOR BUT DIDNT WORK OUT...
for(int i = 0; i < squaresList.size(); i++){
if(i <= 8){
squaresList.get(i).setBackground(Color.WHITE);
}else if(i >= 9 && i <= 17){
squaresList.get(i).setBackground(Color.YELLOW);
}else if(i > 17 && i <= 26){
squaresList.get(i).setBackground(Color.BLUE);
}else if(i > 26 && i <= 35){
squaresList.get(i).setBackground(Color.RED);
}else if(i > 35 && i <= 44){
squaresList.get(i).setBackground(Color.GREEN);
}else if(i > 44 && i <= 53){
squaresList.get(i).setBackground(Color.ORANGE);
}
}
}
}
根据您提供的代码,我假设 squareList 包含正方形但不包含颜色值。您的方法的问题是您使用 Collection.swap()
在方块值周围移动,但您没有根据原始值分配颜色值,这意味着交换方块时不会交换颜色。
考虑以下示例。假设数字代表你的每一个方格。
Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}
并且您正在按黑-蓝-绿-红的顺序分配到此列表。结果将是颜色按以下顺序排列:
Original colour list: {Black, Blue, Green, Red}
另一方面,执行交换后:
After swap, the square list: {3, 1, 2, 4}
但是你按相同的顺序给颜色,这又是:
After swap, colour list: {Black, Blue, Green, Red}
所以你的 sq 3 有黑色,1 有蓝色,等等,看起来颜色没有变化。我建议两种处理方法:一种是在数据中保留一个单独的颜色列表,并在交换正方形时将其交换在一起。并使用颜色列表中的顺序分配颜色。
另一种解决方案是为每个正方形制作一个数据结构,其中包含颜色值。代码将如下所示:
class Square
{
Color myColour;
// ...
}
有了这个结构,当你执行交换时你正在做:
Original square list: {1(Black), 2(Blue), 3(Green), 4(Red)}
After swap, square list: {3(Green), 2(Blue), 1(Black), 4(Red)}
希望对您有所帮助。