• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

chalkos

Valor da variável em determinado momento.

3 mensagens neste tópico

Olá. Precisava de ajuda a determinar o valor de uma variável a determinada altura do código.

Apresento-vos o código:

package 
{
    import VGame.*;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.net.*;
    import flash.ui.*;
    import flash.utils.*;

    public class VGame extends Sprite
    {
        private var aonde:Array;
        private var found:String;
        private var layers:Object;
        private var resIconsFound:Bitmap;
        private var total:String;
        private var can_listen:Boolean;
        private var ae_mc:Object;
        private var allst:Boolean;
        private var to_choose:Array;
        private var resIcons:Bitmap;
        private var st_time:int;
        private var printRes:Function;
        private static var v:Number = 150;
        public static var lastgame:Object;
        private static var icons:Array;
        private static var m:Number = 60;
        private static var h:Number = 400;

        public function VGame(param1:Function = null, param2 = null)
        {
            printRes = param1;
            ae_mc = param2;
            if (icons == null)
            {
                initIcons();
            }
            init();
            return;
        }// end function

        public function added(fillLayer) : void
        {
            if (stage != null)
            {
                Def.addStageMouseListener(this);
                addEventListener(Event.REMOVED_FROM_STAGE, removed);
            }
            return;
        }// end function

        private function getVacant(flash.display:DisplayObject:Array, flash.display:DisplayObject:int, flash.display:DisplayObject:int) : Boolean
        {
            var _loc_4:int = 0;
            if (flash.display:DisplayObject[flash.display:DisplayObject][flash.display:DisplayObject] + "" != "undefined")
            {
                return false;
            }
            if (flash.display:DisplayObject > 0)
            {
                _loc_4 = flash.display:DisplayObject - 1;
                while (_loc_4 <= (flash.display:DisplayObject + 1))
                {
                    
                    if (_loc_4 >= 0 && _loc_4 < flash.display:DisplayObject.length)
                    {
                        if (flash.display:DisplayObject[_loc_4][(flash.display:DisplayObject - 1)] + "" != "undefined")
                        {
                            return false;
                        }
                    }
                    _loc_4++;
                }
            }
            if (flash.display:DisplayObject < (flash.display:DisplayObject[flash.display:DisplayObject].length - 1))
            {
                _loc_4 = flash.display:DisplayObject - 1;
                while (_loc_4 <= (flash.display:DisplayObject + 1))
                {
                    
                    if (_loc_4 >= 0 && _loc_4 < flash.display:DisplayObject.length)
                    {
                        if (flash.display:DisplayObject[_loc_4][(flash.display:DisplayObject + 1)] + "" != "undefined")
                        {
                            return false;
                        }
                    }
                    _loc_4++;
                }
            }
            if (flash.display:DisplayObject > 0)
            {
                if (flash.display:DisplayObject[(flash.display:DisplayObject - 1)][flash.display:DisplayObject] + "" != "undefined")
                {
                    return false;
                }
            }
            if (flash.display:DisplayObject < (flash.display:DisplayObject.length - 1))
            {
                if (flash.display:DisplayObject[(flash.display:DisplayObject + 1)][flash.display:DisplayObject] + "" != "undefined")
                {
                    return false;
                }
            }
            return true;
        }// end function

        private function beLost() : void
        {
            allst = true;
            return;
        }// end function

        private function mouseInsideRect(flash.display:DisplayObject:Object) : Boolean
        {
            return mouseX - layers.top.x > flash.display:DisplayObject.x && mouseX - layers.top.x < flash.display:DisplayObject.x + flash.display:DisplayObject.s && mouseY - layers.top.y > flash.display:DisplayObject.y && mouseY - layers.top.y < flash.display:DisplayObject.y + flash.display:DisplayObject.s;
        }// end function

        private function fillLayer(fillLayer:String, fillLayer:int, fillLayer:Boolean = false) : void
        {
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            var _loc_10:int = 0;
            var _loc_11:Matrix = null;
            var _loc_12:Number = NaN;
            var _loc_13:Number = NaN;
            var _loc_14:Number = NaN;
            var _loc_6:int = 0;
            var _loc_7:Number = 50;
            var _loc_8:* = new Array();
            var _loc_9:int = 0;
            while (_loc_9 < h * 2 / _loc_7)
            {
                
                _loc_8.push(new Array(int(v * 2 / _loc_7)));
                _loc_9++;
            }
            if (fillLayer)
            {
                aonde = new Array(3);
                _loc_9 = 0;
                while (_loc_9 < aonde.length)
                {
                    
                    aonde[_loc_9] = {z:int(29 + 10 * _loc_9)};
                    _loc_4 = Math.random() * (h * 2 / _loc_7);
                    _loc_5 = Math.random() * (v * 2 / _loc_7);
                    while (!getVacant(_loc_8, _loc_4, _loc_5))
                    {
                        
                        _loc_4 = Math.random() * (h * 2 / _loc_7);
                        _loc_5 = Math.random() * (v * 2 / _loc_7);
                    }
                    aonde[_loc_9].x = int(_loc_4);
                    aonde[_loc_9].y = int(_loc_5);
                    _loc_8[_loc_4][_loc_5] = aonde[_loc_9].z;
                    _loc_9++;
                }
                aonde.push({z:0, x:_loc_4, y:_loc_5});
            }
            _loc_9 = 0;
            while (_loc_9 < fillLayer)
            {
                
                _loc_10 = int(Math.random() * (icons.length - 1));
                while (to_choose.indexOf(_loc_10) != -1)
                {
                    
                    _loc_10++;
                    if (_loc_10 >= (icons.length - 1))
                    {
                        _loc_10 = 0;
                    }
                }
                _loc_11 = new Matrix();
                _loc_12 = 0.2 + Math.random() * 0.5;
                if (fillLayer)
                {
                    if (aonde[_loc_6].z == _loc_9)
                    {
                        while (_loc_12 < 0.3)
                        {
                            
                            _loc_12 = 0.2 + Math.random() * 0.5;
                        }
                        _loc_10 = to_choose[_loc_6];
                        _loc_4 = aonde[_loc_6].x;
                        _loc_5 = aonde[_loc_6].y;
                    }
                    else
                    {
                        _loc_4 = Math.random() * (h * 2 / _loc_7);
                        _loc_5 = Math.random() * (v * 2 / _loc_7);
                        while (_loc_8[_loc_4][_loc_5] + "" != "undefined")
                        {
                            
                            _loc_4 = Math.random() * (h * 2 / _loc_7);
                            _loc_5 = Math.random() * (v * 2 / _loc_7);
                        }
                        _loc_8[_loc_4][_loc_5] = _loc_9;
                    }
                    _loc_13 = _loc_4 * _loc_7 + m + (Math.random() - 0.5) * (_loc_7 / 2);
                    _loc_14 = _loc_5 * _loc_7 + m + (Math.random() - 0.5) * (_loc_7 / 2);
                    _loc_11.scale(_loc_12, _loc_12);
                    _loc_11.translate(_loc_13, _loc_14);
                    if (aonde[_loc_6].z == _loc_9)
                    {
                        aonde[_loc_6].x = int(_loc_13 - icons[_loc_10].width * _loc_12 / 2);
                        aonde[_loc_6].y = int(_loc_14 - icons[_loc_10].width * _loc_12 / 2);
                        aonde[_loc_6].s = int(icons[_loc_10].width * _loc_12);
                        _loc_6++;
                        layers["mira"].bitmapData.draw(icons[_loc_10], _loc_11, new ColorTransform(0.5, 0.5, 0.5));
                    }
                    else
                    {
                        layers["mira"].bitmapData.draw(icons[_loc_10], _loc_11);
                    }
                }
                else
                {
                    _loc_4 = Math.random() * (h * 2);
                    _loc_5 = Math.random() * (v * 2);
                    _loc_11.scale(_loc_12, _loc_12);
                    _loc_11.translate(_loc_4 + m, _loc_5 + m);
                }
                layers[fillLayer].bitmapData.draw(icons[_loc_10], _loc_11);
                _loc_9++;
            }
            if (fillLayer)
            {
                _loc_9 = 0;
                while (_loc_9 < (aonde.length - 1))
                {
                    
                    _loc_9++;
                }
            }
            return;
        }// end function

        private function completeGame(fillLayer = null) : void
        {
            var _loc_3:String = null;
            var _loc_4:URLVariables = null;
            var _loc_5:* = undefined;
            var _loc_6:Array = null;
            var _loc_2:* = new Date().valueOf();
            if (!allst && _loc_2 - st_time < 20000 && _loc_2 > st_time + 1500 || fillLayer != null)
            {
                _loc_3 = _loc_2 - st_time + "";
                Def.lastgame = {res:_loc_3};
                _loc_4 = new URLVariables();
                for (_loc_5 in Def.params)
                {
                    
                    _loc_4[_loc_5] = Def.params[_loc_5];
                }
                new Request("/get-time", _loc_4, {complete:getVoucher});
                VOverall.draw(new MovieClip());
            }
            else
            {
                _loc_6 = ((_loc_2 - int(st_time)) / 1000).toString().split(".");
                Def.err = {desc:"Tenta outra vez!", tit:"Demoraste " + _loc_6[0] + "," + _loc_6[1] + " segundos.", ret:Def.playGame};
                Vassets.err.init();
                VOverall.draw(Vassets.err);
            }
            return;
        }// end function

        public function init() : void
        {
            total = "nada";
            to_choose = generateResult();
            initLayers();
            setTimeout(createResIcons, 700);
            setTimeout(fillLayer, 1300, "bot", 80);
            setTimeout(fillLayer, 1800, "mid", 80);
            setTimeout(fillLayer, 2300, "top", 50, true);
            can_listen = true;
            var _loc_1:int = 0;
            Vassets.countdown.y = 0;
            Vassets.countdown.x = _loc_1;
            addChild(Vassets.countdown);
            Vassets.countdown.init(startGame);
            return;
        }// end function

        public function removed(fillLayer) : void
        {
            var _loc_2:* = undefined;
            Def.delStageMouseListener(this);
            removeEventListener(Event.REMOVED_FROM_STAGE, removed);
            for each (_loc_2 in layers)
            {
                
                _loc_2.bitmapData.dispose();
            }
            Diadia.delChildren(this);
            return;
        }// end function

        public function gotVoucher(fillLayer:String) : void
        {
            VOverall.remove();
            var _loc_2:* = fillLayer.split(",");
            Def.lastgame.id = _loc_2[0];
            Def.lastgame.voucher = _loc_2[1];
            setTimeout(Address.setA, 500, "jogo/win");
            return;
        }// end function

        private function makeTime() : int
        {
            return new Date().valueOf();
        }// end function

        public function clearImpedance() : void
        {
            Mouse.show();
            can_listen = true;
            return;
        }// end function

        private function initIcons() : void
        {
            var _loc_3:* = undefined;
            icons = new Array();
            var _loc_1:int = 0;
            while (_loc_1 < 29)
            {
                
                _loc_3 = new Vassets.icons.constructor();
                _loc_3.init(_loc_1, null);
                icons.push(_loc_3);
                _loc_1++;
            }
            var _loc_2:* = new Vassets.icons.constructor();
            _loc_2.red.gotoAndStop("vod");
            icons.push(_loc_2);
            return;
        }// end function

        private function initLayers() : void
        {
            var _loc_2:* = undefined;
            var _loc_3:BitmapData = null;
            var _loc_1:Array = ["bot", "mid", "top", "mira"];
            layers = new Object();
            for each (_loc_2 in _loc_1)
            {
                
                _loc_3 = new BitmapData(int((h + m) * 2), int((v + m) * 2), true, 0);
                layers[_loc_2] = new Bitmap(_loc_3);
                layers[_loc_2].x = -h - m;
                layers[_loc_2].y = -v - m;
            }
            return;
        }// end function

        public function stageMouseEvent(fillLayer) : void
        {
            var _loc_2:Boolean = false;
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_5:Rectangle = null;
            var _loc_6:Point = null;
            var _loc_7:Rectangle = null;
            var _loc_8:Point = null;
            var _loc_9:Array = null;
            if (can_listen && fillLayer.type == MouseEvent.MOUSE_DOWN && parent != null)
            {
                can_listen = false;
                Mouse.hide();
                _loc_3 = 0;
                while (_loc_3 < (aonde.length - 1) && !_loc_2)
                {
                    
                    if (aonde[_loc_3] != 0)
                    {
                        if (mouseInsideRect(aonde[_loc_3]))
                        {
                            _loc_2 = true;
                            _loc_4 = 3;
                            _loc_5 = new Rectangle(aonde[_loc_3].x - _loc_4, aonde[_loc_3].y - _loc_4, aonde[_loc_3].s + _loc_4 * 2, aonde[_loc_3].s + _loc_4 * 2);
                            _loc_6 = new Point(aonde[_loc_3].x - _loc_4, aonde[_loc_3].y - _loc_4);
                            layers["top"].bitmapData.copyPixels(layers["mira"].bitmapData, _loc_5, _loc_6);
                            _loc_7 = new Rectangle(_loc_3 * 42, 0, 42, 42);
                            _loc_8 = new Point(_loc_3 * 42, 0);
                            resIcons.bitmapData.copyPixels(resIconsFound.bitmapData, _loc_7, _loc_8);
                            _loc_9 = ["um", "dois", "tres"];
                            found = _loc_9[(_loc_9.indexOf(found) + 1)];
                            if (found == "tres")
                            {
                                completeGame();
                                Mouse.show();
                            }
                            aonde[_loc_3] = 0;
                            setTimeout(clearImpedance, 500);
                        }
                    }
                    _loc_3++;
                }
                if (!_loc_2)
                {
                    setTimeout(clearImpedance, 250);
                }
            }
            return;
        }// end function

        private function getVoucher(fillLayer:String) : void
        {
            var _loc_3:* = undefined;
            var _loc_2:* = new URLVariables();
            for (_loc_3 in Def.params)
            {
                
                _loc_2[_loc_3] = Def.params[_loc_3];
            }
            _loc_2["time"] = Def.lastgame.res;
            _loc_2["secret"] = SHA1.encrypt(fillLayer + "-" + Def.lastgame.res);
            new Request("/get-voucher", _loc_2, {complete:gotVoucher});
            return;
        }// end function

        private function generateResult() : Array
        {
            var _loc_4:int = 0;
            var _loc_1:* = new Array();
            var _loc_2:* = Math.floor(Math.random() * 3 - 1e-005);
            var _loc_3:int = 0;
            while (_loc_3 < 3)
            {
                
                _loc_4 = _loc_3 != _loc_2 ? (int(Math.random() * icons.length)) : ((icons.length - 1));
                while (_loc_1.indexOf(_loc_4) != -1)
                {
                    
                    _loc_4 = int(Math.random() * icons.length);
                }
                _loc_1.push(_loc_4);
                _loc_3++;
            }
            return _loc_1;
        }// end function

        public function startGame() : void
        {
            var _loc_2:* = undefined;
            added(null);
            var _loc_1:Array = ["bot", "mid", "top"];
            for each (_loc_2 in _loc_1)
            {
                
                if (_loc_2 != "mira")
                {
                    addChild(layers[_loc_2]);
                }
            }
            found = "zero";
            allst = false;
            st_time = new Date().valueOf();
            setTimeout(beLost, 20000);
            return;
        }// end function

        private function createResIcons() : void
        {
            var _loc_2:Matrix = null;
            resIcons = new Bitmap(new BitmapData(130, 42, true, 0));
            var _loc_3:* = h + m - 160;
            resIcons.x = h + m - 160;
            ae_mc.x = _loc_3;
            var _loc_3:* = -v - m - 40;
            resIcons.y = -v - m - 40;
            ae_mc.y = _loc_3;
            addChild(resIcons);
            addChild(ae_mc);
            resIconsFound = new Bitmap(new BitmapData(130, 42, true, 0));
            var _loc_1:int = 0;
            while (_loc_1 < 3)
            {
                
                _loc_2 = new Matrix();
                _loc_2.scale(38 / icons[0].width, 38 / icons[0].width);
                _loc_2.translate(_loc_1 * 42 + 19, 21);
                resIcons.bitmapData.draw(icons[to_choose[_loc_1]], _loc_2);
                resIconsFound.bitmapData.draw(icons[to_choose[_loc_1]], _loc_2, new ColorTransform(0.5, 0.5, 0.5));
                _loc_1++;
            }
            return;
        }// end function

    }
}

A dúvida principal:

na função getVoucher(fillLayer:String) gostria de saber como é gerado o fillLayer e qual é o seu valor nesta linha (que provavelmente nao será constante):

_loc_2["secret"] = SHA1.encrypt(fillLayer + "-" + Def.lastgame.res);

Não vale a pena tentar correr o código para fazer debug, pois dá erros (pelo menos em projectos AS 3.0) (pois foi "descompilado").

Outras dúvidas (sim, eu tentei descobrir esse valor e outros. este foi o unico que ainda nao consegui descobrir):

na função completeGame(fillLayer = null)

na linha

new Request("/get-time", _loc_4, {complete:getVoucher});

o que quer dizer o complete ?

e como vai funcionar o getVoucher, uma vez que não tem () nem argumentos da função?

e a função fillLayer(fillLayer:String, fillLayer:int, fillLayer:Boolean = false)

é a que me para mim é mais confusa. Recebe 3 argumentos, mas eu não vejo em lugar nenhum a invocação da função sequer (muito menos com esses argumentos todos).

Será que as varáveis fillLayer que ha ao longo da script são por vezes uma função disfarçada?

e como é que fica o filllayer no fim dessa função?

E é possível as variáveis terem os nomes iguais (a compilar dá erro, mas pode ser algum polimorfismo que desconheça... [e que o compilador desconheça...]) ?

Acho que é tudo...

Desde já obrigado  :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tentando responder as tuas questões...

"A dúvida principal:

na função getVoucher(fillLayer:String) gostria de saber como é gerado o fillLayer e qual é o seu valor nesta linha (que provavelmente nao será constante):"

fillLayer como podes ver é uma string passada por parâmetro quando é chamada a função.

O "complete" é o evento complete do Request, quando este termina executa o que está lá dentro, no teu caso a função "getVoucher"

Quanto à questão dos nomes...

Parece que utilizas-te um programa decompiler para extrair o source, por vezes, nem sempre temos a solução que procuramos recorrendo a este tipo de software...

Não vai ser fácil conseguires reaproveitar este source... Mas nada melhor que tentar para aprender ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora