0

私は現在、迷路の線を引くために、ブール配列(水平と垂直)のペアを使用して迷路を作成しています。

迷路は、一度にアレイから5つのブールを表示するだけです。次に、常に中央に配置されているユーザーがいて、迷路の中を移動すると、次の一連のブールが描画されます。これは正常に機能しています。

私が抱えている問題は、ユーザーが迷路の特定の部分に移動すると、線を描くforループがbool配列よりも高くなり、アプリがクラッシュすることです。以下にいくつかのコードスニペットを見つけてください。

onDraw:

protected void onDraw(Canvas canvas) {
    canvas.drawRect(0, 0, width, height, background);
    int currentX = maze.getCurrentX(),currentY = maze.getCurrentY();
    int drawSizeX = 6 + currentX;
    int drawSizeY = 6 + currentY;
    currentX = currentX - 2;
    currentY = currentY - 2;

    for(int i = 0; i < drawSizeX - 1; i++)  {
        for(int j = 0; j < drawSizeY - 1; j++)  {
            float x = j * totalCellWidth;
            float y = i * totalCellHeight;
            if(vLines[i + currentY][j + currentX])  {
                canvas.drawLine(x + cellWidth,   //start X
                                y,               //start Y
                                x + cellWidth,   //stop X
                                y + cellHeight,  //stop Y
                                line);
            }
            if(hLines[i + currentY][j + currentX]) {
                canvas.drawLine(x,               //startX 
                                y + cellHeight,  //startY 
                                x + cellWidth,   //stopX 
                                y + cellHeight,  //stopY 
                                line);
            }
        }
        //draw the user ball
        canvas.drawCircle((2 * totalCellWidth)+(cellWidth/2),   //x of center
                          (2 * totalCellHeight)+(cellWidth/2),  //y of center
                          (cellWidth*0.45f),                    //radius
                          ball);
    }

編集1-移動-

public boolean move(int direction) {
    boolean moved = false;
    if(direction == UP) {
        if(currentY != 0 && !horizontalLines[currentY-1][currentX]) {
            currentY--;
            moved = true;
        }
    }
    if(direction == DOWN) {
        if(currentY != sizeY-1 && !horizontalLines[currentY][currentX]) {
            currentY++;
            moved = true;
        }
    }
    if(direction == RIGHT) {
        if(currentX != sizeX-1 && !verticalLines[currentY][currentX]) {
            currentX++;
            moved = true;
        }
    }
    if(direction == LEFT) {
        if(currentX != 0 && !verticalLines[currentY][currentX-1]) {
            currentX--;
            moved = true;
        }
    }
    if(moved) {
        if(currentX == finalX && currentY == finalY) {
            gameComplete = true;
        }
    }
    return moved;
}

他に明確にする必要があることがあれば、私に知らせてください。

前もって感謝します。

4

1 に答える 1

1

currentX/Y が十分に大きい場合 (長さ-6)、配列の drawSizeX/Y インデックス

したがって、値を Math.min(current + 6, array.length) に制限します

于 2012-07-03T13:05:35.420 に答える