Java 洗牌1-15或“1-15”的游戏板;“拼图”;益智游戏(安卓)

Java 洗牌1-15或“1-15”的游戏板;“拼图”;益智游戏(安卓),java,android,shuffle,Java,Android,Shuffle,我是一名android初学者,正在开发一款名为“拼图”的益智游戏 以下是主游戏屏幕的示例屏幕截图: 我要做的是在onCreate方法中调用另一个名为shuffleGameBoard()的方法: public void shuffleGameBoard(){ gameGrid.removeAllViews(); GameBoard.scrambleBoard(GameBoard); int指数=0; 对于(int i=0;i

我是一名android初学者,正在开发一款名为“拼图”的益智游戏

以下是主游戏屏幕的示例屏幕截图:

我要做的是在onCreate方法中调用另一个名为shuffleGameBoard()的方法:

public void shuffleGameBoard(){
gameGrid.removeAllViews();
GameBoard.scrambleBoard(GameBoard);
int指数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
开关(gameBoard.getBoardValues()[i][j].getValue()){
案例0:
addView(空白按钮,索引);
打破
案例1:
addView(一个按钮,索引);
打破
案例2:
addView(两个按钮,索引);
打破
案例3:
addView(三个按钮,索引);
打破
案例4:
addView(四按钮,索引);
打破
案例5:
addView(五个按钮,索引);
打破
案例6:
addView(六个按钮,索引);
打破
案例7:
addView(sevenButton,index);
打破
案例8:
addView(八按钮,索引);
打破
案例9:
addView(nineButton,index);
打破
案例10:
addView(tenButton,index);
打破
案例11:
addView(elevenButton,index);
打破
案例12:
addView(十二按钮,索引);
打破
案例13:
addView(第三个按钮,索引);
打破
案例14:
addView(四个按钮,索引);
打破
案例15:
addView(fifteenButton,index);
打破
违约:
打破
}
索引++;
}
}
}
此方法调用我的GameBoard.java类中另一个名为scrambleBoard的方法:

public static void scrambleBoard(GameBoard board){
    Random gen = new Random();
    int count = 0;

    while (count < 100){
        int i1 = gen.nextInt(4);

        int j1 = gen.nextInt(4);


        if (isValidSwap(board.getBoardValues()[i1][j1], board.getEmptyLoc(board))) {
            board.swapTile(board.getBoardValues()[i1][j1], board.getEmptyLoc(board));
            count++;
        }
    }
}
public静态无效置乱板(GameBoard){
Random gen=新的Random();
整数计数=0;
同时(计数<100){
int i1=gen.nextInt(4);
int j1=第二代(4);
如果(isValidSwap(board.getBoardValues()[i1][j1],board.getEmptyLoc(board))){
board.swapTile(board.getBoardValues()[i1][j1],board.getEmptyLoc(board));
计数++;
}
}
}
这就是我现在面临的问题:我在MainActivity.java中使用的GameBoard类的实例正在被正确地洗牌。在我的游戏中,根据实际底层GameBoard实例的洗牌方式来交换分片。问题;但是,代表我的GameBoard类实例的实际按钮根本没有以正确的顺序显示。这是我调用shuffleGameBoard()后该板的外观图像。看起来好像所有的按钮都在1-15之间按顺序排列,但实际上它们被视为不按顺序排列,即使它们看起来像这样。例如,假设棋盘被洗牌,这样“两个”磁贴就在“空白”磁贴的旁边。我可以点击“两个”磁贴,它仍然会与空磁贴交换。将交换磁贴的位置,但磁贴一开始不在正确的位置,因此无法正常工作

澄清一下:当我将视图(图像按钮)添加回GridLayout时,它们没有以正确的顺序显示。如何将ImageButtons以正确的顺序添加到GridLayout中,正确的顺序表示我在MainActivity.java类中使用的无序GameBoard类实例中的数字顺序


我希望我的问题是清楚的,如果有什么不清楚的,请要求更多的信息或澄清,我会很乐意提供。感谢您提供的任何帮助。

尝试为每个孩子使用
GridLayout.LayoutParams
,而不是索引。类似于(1,3)中的项目:
.addView(,new GridLayout.LayoutParams(GridLayout.spec(1),GridLayout.spec(3))
@Valentin:谢谢你的提示,但是,我刚刚尝试了你的解决方案,我仍然遇到了同样的行为问题。然后我只能建议使用绘图项目,而不是使用视图框架。我在这方面有很多不好的经验,尤其是涉及动态内容。
public static void scrambleBoard(GameBoard board){
    Random gen = new Random();
    int count = 0;

    while (count < 100){
        int i1 = gen.nextInt(4);

        int j1 = gen.nextInt(4);


        if (isValidSwap(board.getBoardValues()[i1][j1], board.getEmptyLoc(board))) {
            board.swapTile(board.getBoardValues()[i1][j1], board.getEmptyLoc(board));
            count++;
        }
    }
}