関数を中断したい

by enecre
ゲームのAIを作りたいのですが、制限時間があるとします。
選択時間内に_thinkが終わらなかった場合
とりあえずその時点でのselectionが参照されるようになっていますが、
もう考え続けないでいいのに考え続けてしまいます。
40行目の位置から_think関数を止めたいのですが、可能でしょうか?
♥0 | Line 39 | Modified 2010-06-24 16:56:44 | MIT License
play

ActionScript3 source code

/**
 * Copyright enecre ( http://wonderfl.net/user/enecre )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/4N8L
 */

/*
    ゲームのAIを作りたいのですが、制限時間があるとします。
    選択時間内に_thinkが終わらなかった場合
    とりあえずその時点でのselectionが参照されるようになっていますが、
    もう考え続けないでいいのに考え続けてしまいます。
    40行目の位置から_think関数を止めたいのですが、可能でしょうか?
*/

package {
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            var tf:TextField = new TextField();
            addChild(tf);

            var moja:Ai = new Ai();
            moja.addEventListener("complete",function():void{
              tf.text = String(moja.selection);  
            });
            moja.think();
        }
    }
}
import flash.events.EventDispatcher;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
class Ai extends EventDispatcher{
    private var _timer:Timer;
    private var _selection:int;
    public function get selection():int{return _selection;}
    function Ai(){}
    public function think():void{
        _timer = new Timer(5000,1);
        _timer.addEventListener(TimerEvent.TIMER,function():void{
            dispatchEvent(new Event("complete"));
            // ここで_think関数を止めたい
        });
        _timer.start();
        _think();
    }
    private function _think():void{
        /*
            ここで考える、時間がかかるかもしれない
        */
        _selection = 3;
        _timer.stop();
        dispatchEvent(new Event("complete"));
    }
}

Forked