Есть такие задания - перестановки. Встречаются они в специальных программах-тестерах и т. д. Посколько я делаю свои тесты во flash, то решил реализовать и такое задание. Вот листинг того, что пока получилось:
Код AS1/AS2:
//////////////////////////////////Команды
var str0:String = 'Program upr_1;';
var str1:String = 'uses CRT;';
var str2:String = 'var a:integer;';
var str3:String = 'begin';
var str4:String = 'end.';
///////////////////////////массивы клипов
var arrMesto:Array = [];
//клипы-подложки
var arrKomand:Array = [];
//клипы с командами
var arrKomnew:Array = [];
//рандомно отсортированные клипы с командами
////////////////////организую рандомную расстановку индексов
var a:Array = [0, 1, 2, 3, 4];
var l:Number = a.length;
var t:Number = l;
while (t--) {
var r:Number = random(l);
a[r] += a[t]-(a[t]=a[r]);
}
trace(a);
var pusto:MovieClip;
////////////////заполение массива с клипами-подлжками и расстановка их на сцене
for (var i = 0; i<5; i++) {
_root.attachMovie('mesto', 'mesto'+i, i+10, {_x:50, _y:100+40*i});
arrMesto.push(_root['mesto'+i]);
}
trace(arrMesto);
////////////////заполение массива с клипами с командами и расстановка их на сцене
for (var d = 0; d<5; d++) {
var komand:MovieClip = _root.attachMovie('komanda', 'komanda'+d, d+30);
arrKomand.push(_root['komanda'+d]);
komand._x = 50;
komand._y = 100+a[d]*40;
komand.pole_txt.text = _root['str'+d];
}
trace(arrKomand);
//////////////////////////перетасока клипов с командами
for (var s = 0; s<5; s++) {
arrKomnew.push(arrKomand[a[s]]);
}
trace(arrKomnew);
///////////////// перетаскивание клипов-команд в заданных пределах
for (var m = 0; m<5; m++) {
arrKomnew[m].onPress = function() {
trace(this);
this.startDrag(false, 50, 100, 50, 100+40*m-40);
};
arrKomnew[m].onRelease = arrKomnew[m].onReleaseOutside=function () {
this.stopDrag();
};
}
Из библиотеки атачатся два клипа 'mesto'(прямоугольник в цвете) и 'komanda'(с текстовым полем), организовываются в массивы и расставляются на сцене. Все 'komanda' перетаскиваются.
Логика дальнейших действий такова: если при перетаскивании взятого 'komanda' с 'mesto' и 'komanda'(не перетаскиваемого) есть пересечение, то 'komanda'(не перетаскиваемого) переходит на освободившееся 'mesto'. Логика то понятна, а вот с реализацией программно запоролся. Прошу помочь в этом. Приложен мувик для визуализации.
лОГИКА \\\\