Gốc > Thế giới Tin học > Lập trình > HTML >
Nguyễn Anh Tuấn
Lê Khắc Thành Đạt @ 06:31 22/09/2009
Số lượt xem: 716
(Test) code AS2 của bài toán tháp Hanoi (bản đơn giản)
var disk_count:Number = 4;
var column_pos:Array = [80, 235, 390];
var column:Array = [[], [], []];
var stack:Array = [];
var y_top:Number = 100;
var y_bottom:Number = 350;
var curr_step:Number = 0;
var itv:Number = 0;
function init():Void {
var disk_holder_mc:MovieClip = this.createEmptyMovieClip("holder", 0);
var dscale:Number = (30 + disk_count * 3) / (disk_count - 1);
for (var i:Number = 0; i < disk_count; ++i) {
var mc:MovieClip = disk_holder_mc.createEmptyMovieClip("disk" + i, i);
column[0][i] = mc;
mc.lineStyle(1, 0xFF6600);
mc.beginFill(0xFF0000);
mc.moveTo(-50, -5);
mc.lineTo(50, -5);
mc.lineTo(50, 5);
mc.lineTo(-50, 5);
mc.lineTo(-50, -5);
mc.endFill();
mc._xscale = 100 - i * dscale;
mc._x = column_pos[0];
mc._y = y_bottom - i * mc._height;
}
}
function calculate(count:Number, src:Number, target:Number, temp:Number):Void {
if (count <= 0) return;
calculate(count - 1, src, temp, target);
stack.push({s: src, t: target });
calculate(count - 1, temp, target, src);
}
function moveDisk(mc:MovieClip, src:Number, target:Number):Void {
clearInterval(itv);
var attr:Array = [null, "_y", "_x", "_y"];
var val:Array = [null, y_top, column_pos[target], y_bottom - column[target].length * mc._height];
if (++curr_step < 4) {
itv = setInterval(moveMc, 50, mc, attr[curr_step], val[curr_step], src, target);
} else {
column[target].push(column[src].pop());
startNewMovement();
}
}
function moveMc(mc:MovieClip, attr:String, destination:Number, src:Number, target:Number):Void {
mc[attr]+= (destination - mc[attr]) / 4;
if (Math.abs(mc[attr] - destination) < 2) {
mc[attr] = destination;
moveDisk(mc, src, target);
}
}
function startNewMovement():Void {
if (stack.length == 0) return;
var m:Object = stack.pop();
curr_step = 0;
moveDisk(column[m.s][column[m.s].length - 1], m.s, m.t);
}
function start():Void {
init();
calculate(disk_count, 0, 2, 1);
stack.reverse();
startNewMovement();
}
start();
var column_pos:Array = [80, 235, 390];
var column:Array = [[], [], []];
var stack:Array = [];
var y_top:Number = 100;
var y_bottom:Number = 350;
var curr_step:Number = 0;
var itv:Number = 0;
function init():Void {
var disk_holder_mc:MovieClip = this.createEmptyMovieClip("holder", 0);
var dscale:Number = (30 + disk_count * 3) / (disk_count - 1);
for (var i:Number = 0; i < disk_count; ++i) {
var mc:MovieClip = disk_holder_mc.createEmptyMovieClip("disk" + i, i);
column[0][i] = mc;
mc.lineStyle(1, 0xFF6600);
mc.beginFill(0xFF0000);
mc.moveTo(-50, -5);
mc.lineTo(50, -5);
mc.lineTo(50, 5);
mc.lineTo(-50, 5);
mc.lineTo(-50, -5);
mc.endFill();
mc._xscale = 100 - i * dscale;
mc._x = column_pos[0];
mc._y = y_bottom - i * mc._height;
}
}
function calculate(count:Number, src:Number, target:Number, temp:Number):Void {
if (count <= 0) return;
calculate(count - 1, src, temp, target);
stack.push({s: src, t: target });
calculate(count - 1, temp, target, src);
}
function moveDisk(mc:MovieClip, src:Number, target:Number):Void {
clearInterval(itv);
var attr:Array = [null, "_y", "_x", "_y"];
var val:Array = [null, y_top, column_pos[target], y_bottom - column[target].length * mc._height];
if (++curr_step < 4) {
itv = setInterval(moveMc, 50, mc, attr[curr_step], val[curr_step], src, target);
} else {
column[target].push(column[src].pop());
startNewMovement();
}
}
function moveMc(mc:MovieClip, attr:String, destination:Number, src:Number, target:Number):Void {
mc[attr]+= (destination - mc[attr]) / 4;
if (Math.abs(mc[attr] - destination) < 2) {
mc[attr] = destination;
moveDisk(mc, src, target);
}
}
function startNewMovement():Void {
if (stack.length == 0) return;
var m:Object = stack.pop();
curr_step = 0;
moveDisk(column[m.s][column[m.s].length - 1], m.s, m.t);
}
function start():Void {
init();
calculate(disk_count, 0, 2, 1);
stack.reverse();
startNewMovement();
}
start();
Copy & Paste -> Run
Nguyễn Anh Tuấn
Lê Khắc Thành Đạt @ 06:31 22/09/2009
Số lượt xem: 716
Số lượt thích:
0 người
 
- 7 Mẫu giao diện kiểu 1 (Nguyễn Hữu Nhân) (22/09/09)
- 8 Mẫu giao diện kiểu 2 (22/09/09)
- 6 MẪU GIAO DIỆN KIỂU 3 (Nguyễn Hữu Nhân) (22/09/09)
Các ý kiến mới nhất