Android 在阵列中绘制棋盘游戏棋子

Android 在阵列中绘制棋盘游戏棋子,android,arrays,Android,Arrays,我无法让数组显示rooks或Bishop(r&b)。我需要它们显示在国王(k)、G、s、n、l前面的一排。 case语句应该贯穿并绘制棋盘上的所有棋子,但是它只会运行18次,然后崩溃,但我确定我声明数组有40个棋子(在shogi中,每个玩家从20个棋子开始)。 case语句目前也忽略了案例r和b private void setUpNewPieces(){ for (int i = 0; i < 2; i++){ //Sets back row.

我无法让数组显示rooks或Bishop(r&b)。我需要它们显示在国王(k)、G、s、n、l前面的一排。 case语句应该贯穿并绘制棋盘上的所有棋子,但是它只会运行18次,然后崩溃,但我确定我声明数组有40个棋子(在shogi中,每个玩家从20个棋子开始)。 case语句目前也忽略了案例r和b

    private void setUpNewPieces(){
    for (int i = 0; i < 2; i++){
        //Sets back row.
        pieces[20 * i] = new Piece ('K', i, 4, (8 * i));
        pieces[(20 * i) + 1] = new Piece('G', i, 3, (8 * i));
        pieces[(20 * i) + 2] = new Piece('s', i, 2, (8 * i));
        pieces[(20 * i) + 3] = new Piece('n', i, 1, (8 * i));
        pieces[(20 * i) + 4] = new Piece('l', i, 0, (8 * i));
        pieces[(20 * i) + 5] = new Piece('G', i, 5, (8 * i));
        pieces[(20 * i) + 6] = new Piece('s', i, 6, (8 * i));
        pieces[(20 * i) + 7] = new Piece('n', i, 7, (8 * i));
        pieces[(20 * i) + 8] = new Piece('l', i, 8, (8 * i));

        for (int i3 = 0; i3 < 2; i3++){
            pieces[(20 * i) + 9] = new Piece('b', i, i3, (7 * i));
            pieces[(20 * i) + 10] = new Piece('r', i, i3, (7 * 1));
        }
        //Set pawns.
        for (int i2 = 0; i2 < 9; i2++){
            pieces[(18 * i) + 9 + i2] = new Piece('p', i, i2,(6 * i));
        }
        Log.d("setUpNewPieces", "pawnDone");
    }
    Log.d("setUpNewPieces", "nonPawnDone");
}//END private void newPieces()



private void updateBoard(){
    Location field;
    int x, y;

    String theArray;
    for(int jkl=0;jkl < pieces.length;jkl++){
        theArray = jkl + ": " + String.valueOf(pieces[jkl].type) + "-" + String.valueOf(pieces[jkl].direction);
        Log.d("TheArray",theArray);
    }

    //Draw pieces.
    for (int i = 0; i < 40; i++){
        field = pieces [i].getLocation();
        Log.d("DrawPieces - i",String.valueOf(i));
        Log.d("DrawPieces - type",String.valueOf(pieces[i].type));
        Log.d("DrawPieces - direction",String.valueOf(pieces[i].direction));
        x = field.getX();
        y = field.getY();

        if(!field.isEmpty()){
            switch (pieces[i].direction){
            case 0:
                Log.d("pieces[i].d...","case0Start");
                switch (pieces[i].type){
                case 'K':
                    gameBoardView[x][y].setImageResource(R.drawable.king);
                    break;
                case 'G':
                    gameBoardView[x][y].setImageResource(R.drawable.gold);
                    break;
                case 's':
                    gameBoardView[x][y].setImageResource(R.drawable.silver);
                    break;
                case 'S':
                    gameBoardView[x][y].setImageResource(R.drawable.silver_p);
                    break;
                case 'n':
                    gameBoardView[x][y].setImageResource(R.drawable.knight);
                    break;
                case 'N':
                    gameBoardView[x][y].setImageResource(R.drawable.knight_p);
                    break;
                case 'l':
                    gameBoardView[x][y].setImageResource(R.drawable.lance);
                    break;
                case 'L':
                    gameBoardView[x][y].setImageResource(R.drawable.lance_p);
                    break;
                case 'b':
                    gameBoardView[x][y].setImageResource(R.drawable.bishop);
                    break;
                case 'B':
                    gameBoardView[x][y].setImageResource(R.drawable.bishop_p);
                    break;
                case 'r':
                    gameBoardView[x][y].setImageResource(R.drawable.rook);
                    break;
                case 'R':
                    gameBoardView[x][y].setImageResource(R.drawable.rook_p);
                    break;
                case 'p':
                    gameBoardView[x][y].setImageResource(R.drawable.pawn);
                    break;
                case 'P':
                    gameBoardView[x][y].setImageResource(R.drawable.pawn_p);
                    break;
                }//END switch (pieces[i].type) WITHIN case 0
                Log.d("pieces[i].d...","case0Finish");
                break;
            case 1:
                Log.d("pieces[i].d...","case1Start");
                switch (pieces[i].type){
                case 'K':
                    gameBoardView[x][y].setImageResource(R.drawable.king_rot);
                    break;
                case 'G':
                    gameBoardView[x][y].setImageResource(R.drawable.gold_rot);
                    break;
                case 's':
                    gameBoardView[x][y].setImageResource(R.drawable.silver_rot);
                    break;
                case 'S':
                    gameBoardView[x][y].setImageResource(R.drawable.silver_p_rot);
                    break;
                case 'n':
                    gameBoardView[x][y].setImageResource(R.drawable.knight_rot);
                    break;
                case 'N':
                    gameBoardView[x][y].setImageResource(R.drawable.knight_p_rot);
                    break;
                case 'l':
                    gameBoardView[x][y].setImageResource(R.drawable.lance_rot);
                    break;
                case 'L':
                    gameBoardView[x][y].setImageResource(R.drawable.lance_p_rot);
                    break;
                case 'b':
                    gameBoardView[x][y].setImageResource(R.drawable.bishop_rot);
                    break;
                case 'B':
                    gameBoardView[x][y].setImageResource(R.drawable.bishop_p_rot);
                    break;
                case 'r':
                    gameBoardView[x][y].setImageResource(R.drawable.rook_rot);
                    break;
                case 'R':
                    gameBoardView[x][y].setImageResource(R.drawable.rook_p_rot);
                    break;
                case 'p':
                    gameBoardView[x][y].setImageResource(R.drawable.pawn_rot);
                    break;
                case 'P':
                    gameBoardView[x][y].setImageResource(R.drawable.pawn_p_rot);
                    break;
                }//END switch (pieces[i].type) WITHIN case 1
                Log.d("pieces[i].d...","case1Finish");
                break;

            }//END switch (pieces[i].direction)
            Log.d("updateBoardDrawPieces", "drawDone");
        }//END if(!field.isEmpty())
    }//END for (int i = 0; i < 40; i++)

}//END updateBoard{
如果:

pieces[(20 * i) + 10] = new Piece('r', i, i3, (7 * 1));
是这样的:

pieces[(20 * i) + 10] = new Piece('r', i, i3, (7 * i));

此外,第0到第10个棋子被安装在
棋子中
,但是你用棋子覆盖了第9和第10个棋子(你的b和r棋子)


建议,为什么不创建一个int-pieceNum,然后使用:

pieces[pieceNum++] = ...
而不是计算偏移量


我甚至没有看你的构造函数参数,因为你没有发布那个类。在计算
片段
数组中的偏移量时存在足够多的问题

在第一次执行此代码时(外部i变量为=1),请查看偏移量(在注释中):

pieces[20*i]=新作品('K',i,4,(8*i));//偏移量=0
作品[(20*i)+1]=新作品('G',i,3,(8*i));//偏移量=1
作品[(20*i)+2]=新作品('s',i,2,(8*i));//偏移量=2
作品[(20*i)+3]=新作品('n',i,1,(8*i));//偏移量=3
碎片[(20*i)+4]=新碎片('l',i,0,(8*i));//偏移量=4
作品[(20*i)+5]=新作品('G',i,5,(8*i));//偏移量=5
作品[(20*i)+6]=新作品('s',i,6,(8*i));//偏移量=6
作品[(20*i)+7]=新作品('n',i,7,(8*i));//偏移量=7
作品[(20*i)+8]=新作品('l',i,8,(8*i));//偏移量=8
对于(inti3=0;i3<2;i3++){
片段[(20*i)+9]=新片段('b',i,i3,(7*i));//偏移量=9对于两位主教,第二个覆盖第一个
碎片[(20*i)+10]=新碎片('r',i,i3,(7*1));//偏移量=10对于两辆车,第二辆车覆盖第一辆车
}         
对于(inti2=0;i2<9;i2++){
工件[(18*i)+9+i2]=新工件('p',i,i2,(6*i));//偏移量=9到16,覆盖上面的bishop和rook集
} 

错误日志将非常受欢迎。在我发布错误日志时,是否有方法格式化错误日志?目前它只是排成一行,很难阅读@slayton我重新编写了代码,并尝试更改了一些值,但我尝试的似乎没有任何效果复制并粘贴整个堆栈跟踪到一个代码块中我的模拟器位于另一台计算机上,因此我需要将其复制到文档中,然后将其粘贴到可以访问Internet的计算机上;它将正确显示,但它很长,很难阅读。我要指出我认为重要的一点,尽管我可能错了……谢谢,我自己也注意到了这一点。虽然我不知道它是如何变成1的…我以为b和r的(7*I)会显示在棋子上方的行中,或者我需要用i3移动for循环的结束括号吗?谢谢你的偏移注释。我将把主教和主教的循环改为'for(int i3=0;i3<1;i3++){',这样我就不会让他们互相覆盖。但是,我不明白如何让主教和主教在后排和有兵的那排之间显示一行。这不是由(n*I)设置的吗。第一个循环将显示在第8行,第二个循环显示在第7行,棋子显示在第6行?如果有帮助,我可以发布我制作的棋子的类。是的,请发布。请注意,在您的设置NewPieces中,棋子也覆盖了您的Bishop和Rook,即+9应该是+13。此外,您还添加了9个棋子(i2从0到8),我认为这是不正确的。
pieces[(20 * i) + 10] = new Piece('r', i, i3, (7 * i));
pieces[pieceNum++] = ...
pieces[20 * i] = new Piece ('K', i, 4, (8 * i)); // OFFSET = 0
pieces[(20 * i) + 1] = new Piece('G', i, 3, (8 * i)); // OFFSET = 1
pieces[(20 * i) + 2] = new Piece('s', i, 2, (8 * i)); // OFFSET = 2
pieces[(20 * i) + 3] = new Piece('n', i, 1, (8 * i)); // OFFSET = 3
pieces[(20 * i) + 4] = new Piece('l', i, 0, (8 * i)); // OFFSET = 4
pieces[(20 * i) + 5] = new Piece('G', i, 5, (8 * i)); // OFFSET = 5
pieces[(20 * i) + 6] = new Piece('s', i, 6, (8 * i)); // OFFSET = 6
pieces[(20 * i) + 7] = new Piece('n', i, 7, (8 * i)); // OFFSET = 7
pieces[(20 * i) + 8] = new Piece('l', i, 8, (8 * i)); // OFFSET = 8

for (int i3 = 0; i3 < 2; i3++){             
   pieces[(20 * i) + 9] = new Piece('b', i, i3, (7 * i)); // OFFSET = 9 for both bishops, the 2nd overwrites the 1st
   pieces[(20 * i) + 10] = new Piece('r', i, i3, (7 * 1)); // OFFSET = 10 for both rooks, the 2nd overwrites the 1st
}         

for (int i2 = 0; i2 < 9; i2++){             
   pieces[(18 * i) + 9 + i2] = new Piece('p', i, i2,(6 * i)); // OFFSET = 9 thru 16, overwriting the bishop and rook set above
}