Tổng kho

Cho ý kiến chút nhé !

Bạn thấy trang này như thế nào?
Đẹp
Đơn điệu
Bình thường
Ý kiến khác

Thành viên trực tuyến

1 khách và 0 thành viên

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Gốc > Thế giới Tin học > Lập trình > HTML >

    (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();
     
    Copy & Paste -> Run

    Nguyễn Anh Tuấn

    Nhắn tin cho tác giả
    Lê Khắc Thành Đạt @ 06:31 22/09/2009
    Số lượt xem: 716
    Số lượt thích: 0 người
     
    Gửi ý kiến