Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Узор в виде кафельной плитки разного размера (http://www.flasher.ru/forum/showthread.php?t=87986)

wvxvw 15.11.2006 10:37

Узор в виде кафельной плитки разного размера
 
Здравствуйте.
Столкнулся с трудностями логического характера (технически вроде ничего сложного). Вот, собственно, описание задачи:
Нужно програмно нарисовать узор в виде прямоугольников произвольного размера расположенных вплотную друг к другу. Не могу придумать алгоритм, как бы это все организовать.
Вот выкладываю то, что уже сделал, просто чтобы было понятно, по какому принципу я думал это делать. Но кажется, это как-то не совсем в ту сторону, что нужно...
Код:

var _arr:Array = [];
for(i=0; i<40;i++){
        var tmp_arr:Array = [];
        for(j=0; j<40; j++){
                tmp_arr.push("");
        }
        _arr.push(tmp_arr);
}
var _map:Map = new Map(_arr);

Это код во флешке (главном файле) Строит массив и заполняет его квадратиками одного цвета.
Код:

class Cell extends MovieClip {
        var _cell:MovieClip;
        var _filled:Boolean = false;
        var XX:Number = 0;
        var YY:Number = 0;
        var W:Number = 10;
        var H:Number = 10;
        var n:String = "";
        function Cell(coord:Object) {
                this._cell = _root.createEmptyMovieClip("_cell"+coord.n, _root.getNextHighestDepth());
                with (this._cell) {
                        beginFill(0x777777, 100);
                        moveTo(0, 0);
                        lineTo(coord.W, 0);
                        lineTo(coord.W, coord.H);
                        lineTo(0, coord.H);
                        lineTo(0, 0);
                        endFill();
                        _x = coord.XX;
                        _y = coord.YY;
                }
                this.XX = coord.XX;
                this.YY = coord.YY;
                this.n = coord.n;
        }
}

Это отдельный квадратик
Код:

import flash.geom.ColorTransform;
import flash.geom.Transform;
class Map extends MovieClip {
        var _arr:Array = [];
        function Map(_arr:Array) {
                for (var i = 0; i<_arr.length; i++) {
                        var tmp_arr:Array = [];
                        for (var j = 0; j<_arr[i].length; j++) {
                                var _cell:Cell = new Cell({XX:j*10, YY:i*10, W:10, H:10, n:""+i+""+j});
                                tmp_arr.push(_cell);
                        }
                        this._arr.push(tmp_arr);
                }
                tile();
        }
        function arrayRandomiser():Number {
                return Math.floor(Math.random()*3-0.5);
        }
        function tile():Void {
                var tmp_h:Number = Math.round(Math.random()*6+1)*10;
                var tmp_w:Number = Math.round(Math.random()*6+1)*10;
                var m_x:Number = this._arr.length;
                var rnd_i:Number = Math.round(Math.random()*m_x);
                var rnd_j:Number = Math.round(Math.random()*m_x);
                var rnd_cell:Cell = this._arr[rnd_i][rnd_j];
                if (!rnd_cell._filled) {
                        var _ct:ColorTransform = new ColorTransform();
                        _ct.rgb = Math.random()*0xffffff;
                        var trans:Transform = new Transform(rnd_cell._cell);
                        trans.colorTransform = _ct;
                        var limit_i = rnd_i+tmp_w/10;
                        var limit_j = rnd_j+tmp_h/10;
                        for (rnd_i; rnd_i<=limit_i && rnd_i<this._arr.length; rnd_i++) {
                                for (var tmp_j = rnd_j; tmp_j<=limit_j && tmp_j<this._arr.length && !this._arr[rnd_i][tmp_j]._filled; tmp_j++) {
                                        var trans:Transform = new Transform(this._arr[rnd_i][tmp_j]._cell);
                                        trans.colorTransform = _ct;
                                        this._arr[rnd_i][tmp_j]._filled = true;
                                        trace(this._arr[rnd_i][tmp_j]._cell);
                                }
                        }
                }
        }
}

Это "карта" состоящая из 40х40 квадратиков, которую я и собираюсь перекрасить так, чтобы узор выглядел как прямоугольники произвольного размера лежащие вплотную друг к другу.

Код писать не обязательно, просто подскажите, если не сложно, идею, как бы это сделать =)
Заранее спасибо.


Часовой пояс GMT +4, время: 19:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.