Проблема с рисованием коробок с другими цветами, чем соседние - PullRequest
0 голосов
/ 27 июля 2011

Я делаю программу, которая рисует сетку из ящиков, и цвет ящика должен отличаться от цвета, примыкающего к ящику.

Мой код сравнивает цвет текущего поля с цветом слева и сверху. Если какой-либо из них совпадает, он выбирает другое случайное число (в качестве цвета). Для плиток в первой строке / столбце я делаю индексы массива моей сетки с отрицательными числами -1, чтобы они не совпадали.

Что у меня есть:

    private function fillArray():void {
        grid = new Array();
        grid[-1] = new Array(-1,-1,-1,-1,-1); //paddles the grid[-1][0 to 4] with -1
        for (var i = 0; i < HEIGHT; i++) {
            grid[i] = new Array();
            grid[i][-1] = -1; // paddles the -1 row with -1
            for (var j = 0; j < WIDTH; j++) {
                while (grid[i-1][j] == grid[i][j] || grid[i][-j] == grid[i][j]) { //while the current box is the same as those to the left or top
                    grid[i][j] = Math.floor(Math.random() * COLORS) + 1; //random number time!
                }
            }
        }
    }

Это ошибка тайм-аута, и сетка все -1. Я не знаю, что я делаю здесь не так. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 27 июля 2011

Если в этой строке читать:

while (grid[i-1][j] == grid[i][j] || grid[i][j-1] == grid[i][j])

Edit:

Я действительно не понимаю, зачем вам начинать с отрицательных индексов. Это просто сбивает с толку без причины. Я переписал ваш сценарий, изменив лишь несколько незначительных вещей, которые вы можете настроить самостоятельно (случайный цвет - это просто случайное изменение красного цвета вместо фактически случайного).

var randomNum:Number = 0;
var HEIGHT:Number = 10;
var WIDTH:Number = 10;
var grid:Array;

function fillArray():void {
grid = new Array();
for (var i = 0; i < HEIGHT; i++) {
    grid.push(new Array());
    for (var j = 0; j < WIDTH; j++) {
        var prevRow:Number = (i > 0) ? grid[i -1][j]: 0;
        var prevCol:Number = (j > 0) ? grid[i][j -1]: 0;

        if(prevRow != 0 && prevCol != 0){
            randomNum = Math.floor(Math.random() * 256) + 1;
            while(randomNum == prevRow || randomNum == prevCol){
                randomNum = Math.floor(Math.random() * 256) + 1;
            }

            this.graphics.beginFill(randomNum * 0xFF0000,1);
            this.graphics.drawRect(i*10,j*10,10,10);

        }
    }
}
}

fillArray();
...