瓷砖随着旋转从魔方中消失



我正在研究一个 2x2 魔方,但在我的程序中无法旋转一侧。立方体是一个正方形的 2D 数组。我只是想逆时针转90度。

这就是发生的事情https://i.stack.imgur.com/78Xqg.jpg

改变了颜色,这样我就能看到特定的方块以及它们是如何变化的。我尝试更改顺序,一次移动特定的部分,看看问题是否只是重叠的部分(没有这样的运气(。

//square class
public class square implements Comparable {
    int c;
    private Rectangle r;
    int xpos, ypos, width, height;
    public square(int a, int x, int y) {
        c = a;
        xpos = x;
        ypos = y;
        r = new Rectangle(xpos, ypos, 50, 50);
    }
    //some unused methods
}
//inside the cube class
public class cube{
square[] temp = new square[4]
square[][] sq= new square[6][4]
//two for loops make squares and fills the sq 2d array
//the result is in the imgur link
public void turnVc(){
    temp= sq[2];
    sq[2][0]=temp[1];
    sq[2][1]=temp[3];
    sq[2][2]=temp[2];
    sq[2][3]=temp[0];
}
}

我希望输出是逆时针旋转的原始图像。

tmp 是一个指针,指向与 sq[2] 指针相同的对象。这就是为什么当你改变sq[2]内容时,你也会改变tmp。我认为与其分配"temp= sq[2];",不如执行以下操作:

temp = new square[4];
for (int i = 0; i < 4; i++) {
    temp[i] = sq[2][i];
}

编辑:我认为你可以做的一点改进是你不需要保存所有的 sq[2] 数组,你只能保存拳头项目。我会这样做(TMP 现在是一个正方形,而不是数组(:

tmp = sq[2][0];
sq[2][0] = sq[2][1];
sq[2][1] = sq[2][3];
sq[2][3] = sq[2][2];
sq[2][2] = tmp;

如果你的方形类实现了 Cloneable,你应该尽可能使用 clone(( 方法,它也类似于 @Nguyen Tan Bao 的答案,但更短我猜你C++开发人员,Java中的引用就像C++中的指针,你可以研究更多 玩得开心!

相关内容

  • 没有找到相关文章

最新更新