home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / pi_climber.swf / scripts / Main.as < prev   
Encoding:
Text File  |  2008-09-24  |  22.3 KB  |  726 lines

  1. package
  2. {
  3.    import flash.display.Bitmap;
  4.    import flash.display.BitmapData;
  5.    import flash.display.MovieClip;
  6.    import flash.events.*;
  7.    import flash.geom.*;
  8.    import flash.text.TextField;
  9.    import flash.text.TextFormat;
  10.    import flash.utils.Timer;
  11.    import flash.utils.getTimer;
  12.    
  13.    public dynamic class Main extends MovieClip
  14.    {
  15.       
  16.       public static const FRAME_RATE:int = 20;
  17.        
  18.       
  19.       internal var lev:int = 1;
  20.       
  21.       internal var aMarkerImage:Array;
  22.       
  23.       internal var animationTimer:Timer;
  24.       
  25.       internal var goRight:* = false;
  26.       
  27.       internal var startH:int = 2;
  28.       
  29.       internal var failures:int;
  30.       
  31.       internal var ctr:int;
  32.       
  33.       internal var backgroundRect:Rectangle;
  34.       
  35.       internal var startW:int = 3;
  36.       
  37.       internal var pauseFrames:int = 0;
  38.       
  39.       internal var spacing:int = 2;
  40.       
  41.       internal var h:int;
  42.       
  43.       internal var gameTimer:Timer;
  44.       
  45.       internal var w:int;
  46.       
  47.       internal var gameCompleted:Boolean = false;
  48.       
  49.       internal var pixH:int = 560;
  50.       
  51.       internal var goodMessage:Boolean;
  52.       
  53.       internal var pixW:int = 700;
  54.       
  55.       internal var score:int;
  56.       
  57.       private var _beforeTime:int = 0;
  58.       
  59.       private var _excess:int = 0;
  60.       
  61.       internal var canvasBitmap:Bitmap;
  62.       
  63.       internal var xPos:int;
  64.       
  65.       private var _sleepTime:int = 0;
  66.       
  67.       internal var offX:int;
  68.       
  69.       internal var offY:int;
  70.       
  71.       internal var aTravel:Array;
  72.       
  73.       private var _period:Number = 50;
  74.       
  75.       internal var fps:String = "n/a";
  76.       
  77.       internal var backgroundSource:*;
  78.       
  79.       internal var backgroundPoint:Point;
  80.       
  81.       internal var aDigitImageCurrent:Array;
  82.       
  83.       internal var yPos:int;
  84.       
  85.       internal var goLeft:* = false;
  86.       
  87.       internal var total:int;
  88.       
  89.       internal var startMessage:String;
  90.       
  91.       private var _afterTime:int = 0;
  92.       
  93.       internal var onlyWidthNumber:int = 4;
  94.       
  95.       internal var endLevel:int = 16;
  96.       
  97.       internal var aDigitImage:Array;
  98.       
  99.       internal var targetScore:int;
  100.       
  101.       internal var level:int;
  102.       
  103.       internal var randInt:int;
  104.       
  105.       internal var pauseFramesMax:int = 200;
  106.       
  107.       internal var canvasBD:BitmapData;
  108.       
  109.       internal var firstTime:Boolean = true;
  110.       
  111.       internal var goDown:* = false;
  112.       
  113.       internal var goUp:* = false;
  114.       
  115.       internal var aDecimal:Array;
  116.       
  117.       internal var aDigitImageTraveled:Array;
  118.       
  119.       internal var tileSize:int = 32;
  120.       
  121.       private var _timeDiff:int = 0;
  122.       
  123.       internal var animationCounter:int;
  124.       
  125.       internal var targetTile:int;
  126.       
  127.       internal var randInt2:int;
  128.       
  129.       private var _overSleepTime:int = 0;
  130.       
  131.       internal var aDigitImageTarget:Array;
  132.       
  133.       internal var backgroundBD:BitmapData;
  134.       
  135.       internal var frameTimer:FrameTimer;
  136.       
  137.       public function Main()
  138.       {
  139.          tileSize = 32;
  140.          spacing = 2;
  141.          goLeft = false;
  142.          goRight = false;
  143.          goUp = false;
  144.          goDown = false;
  145.          fps = "n/a";
  146.          pixW = 700;
  147.          pixH = 560;
  148.          onlyWidthNumber = 4;
  149.          lev = 1;
  150.          startW = 3;
  151.          startH = 2;
  152.          endLevel = 16;
  153.          pauseFramesMax = 200;
  154.          pauseFrames = 0;
  155.          gameCompleted = false;
  156.          firstTime = true;
  157.          _period = 1000 / FRAME_RATE;
  158.          _beforeTime = 0;
  159.          _afterTime = 0;
  160.          _timeDiff = 0;
  161.          _sleepTime = 0;
  162.          _overSleepTime = 0;
  163.          _excess = 0;
  164.          super();
  165.          trace("main");
  166.          createObjects();
  167.          createDecimals();
  168.          resetGame();
  169.          startGame();
  170.       }
  171.       
  172.       private function createDecimals() : void
  173.       {
  174.          aDecimal = new Array(1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9,5,0,2,8,8,4,1,9,7,1,6,9,3,9,9,3,7,5,1,0,5,8,2,0,9,7,4,9,4,4,5,9,2,3,0,7,8,1,6,4,0,6,2,8,6,2,0,8,9,9,8,6,2,8,0,3,4,8,2,5,3,4,2,1,1,7,0,6,7,9,8,2,1,4,8,0,8,6,5,1,3,2,8,2,3,0,6,6,4,7,0,9,3,8,4,4,6,0,9,5,5,0,5,8,2,2,3,1,7,2,5,3,5,9,4,0,8,1,2,8,4,8,1,1,1,7,4,5,0,2,8,4,1,0,2,7,0,1,9,3,8,5,2,1,1,0,5,5,5,9,6,4,4,6,2,2,9,4,8,9,5,4,9,3,0,3,8,1,9,6,4,4,2,8,8,1,0,9,7,5,6,6,5,9,3,3,4,4,6,1,2,8,4,7,5,6,4,8,2,3,3,7,8,6,7,8,3,1,6,5,2,7,1,2,0,1,9,0,9,1,4,5,6,4,8,5,6,6,9,2,3,4,6,0,3,4,8,6,1,0,4,5,4,3,2,6,6,4,8,2,1,3,3,9,3,6,0,7,2,6,0,2,4,9,1,4,1,2,7,3,7,2,4,5,8,7,0,0,6,6,0,6,3,1,5,5,8,8,1,7,4,8,8,1,5,2,0,9,2,0,9,6,2,8,2,9,2,5,4,0,9,1,7,1,5,3,6,4,3,6,7,8,9,2,5,9,0,3,6,0,0,1,1,3,3,0,5,3,0,5,4,8,8,2,0,4,6,6,5,2,1,3,8,4,1,4,6,9,5,1,9,4,1,5,1,1,6,0,9,4,3,3,0,5,7,2,7,0,3,6,5,7,5,9,5,9,1,9,5,3,0,9,2,1,8,6,1,1,7,3,8,1,9,3,2,6,1,1,7,9,3,1,0,5,1,1,8,5,4,8,0,7,4,4,6,2,3,7,9,9,6,2,7,4,9,5,6,7,3,5,1,8,8,5,7,5,2,7,2,4,8,9,1,2,2,7,9,3,8,1,8,3,0,1,1,9,4,9,1,2,9,8,3,3,6,7,3,3,6,2,4,4,0,6,5,6,6,4,3,0,8,6,0,2,1,3,9,4,9,4,6,3,9,5,2,2,4,7,3,7,1,9,0,7,0,2,1,7,9,8,6,0,9,4,3,7,0,2,7,7,0,5,3,9,2,1,7,1,7,6,2,9,3,1,7,6,7,5,2,3,8,4,6,7,4,8,1,8,4,6,7,6,6,9,4,0,5,1,3,2,0,0,0,5,6,8,1,2,7,1,4,5,2,6,3,5,6,0,8,2,7,7,8,5,7,7);
  175.          trace("Decimals: " + aDecimal.length);
  176.       }
  177.       
  178.       private function checkScore() : *
  179.       {
  180.          newLevel(score != targetScore,false);
  181.       }
  182.       
  183.       private function createObjects() : void
  184.       {
  185.          var _loc1_:BitmapData = null;
  186.          var _loc2_:* = undefined;
  187.          var _loc3_:* = undefined;
  188.          var _loc4_:* = undefined;
  189.          var _loc5_:* = undefined;
  190.          var _loc6_:int = 0;
  191.          var _loc7_:int = 0;
  192.          var _loc8_:* = undefined;
  193.          var _loc9_:int = 0;
  194.          var _loc10_:int = 0;
  195.          canvasBD = new BitmapData(pixW,pixH,false,0);
  196.          canvasBitmap = new Bitmap(canvasBD);
  197.          addChild(canvasBitmap);
  198.          backgroundSource = new bg_original_blue(pixW,pixH);
  199.          backgroundBD = new BitmapData(pixW,pixH,false,0);
  200.          backgroundBD.draw(backgroundSource,new Matrix());
  201.          backgroundRect = new Rectangle(0,0,pixW,pixH);
  202.          backgroundPoint = new Point(0,0);
  203.          aDigitImage = [];
  204.          aDigitImageTraveled = [];
  205.          aDigitImageCurrent = [];
  206.          aDigitImageTarget = [];
  207.          _loc2_ = new digits_grad_blue(320,32);
  208.          _loc3_ = new digits_grad_pink(320,32);
  209.          _loc4_ = new digits_grad_blue(320,32);
  210.          _loc5_ = new digits_grad_red(320,32);
  211.          _loc6_ = 10;
  212.          _loc7_ = 32;
  213.          _loc8_ = 0;
  214.          while(_loc8_ < 10)
  215.          {
  216.             _loc9_ = _loc8_ % _loc6_ * _loc7_;
  217.             _loc10_ = int(_loc8_ / _loc6_) * _loc7_;
  218.             _loc1_ = new BitmapData(_loc7_,_loc7_,true,0);
  219.             _loc1_.copyPixels(_loc2_,new Rectangle(_loc9_,_loc10_,_loc7_,_loc7_),new Point(0,0));
  220.             aDigitImage.push(_loc1_);
  221.             _loc1_ = new BitmapData(_loc7_,_loc7_,true,0);
  222.             _loc1_.copyPixels(_loc3_,new Rectangle(_loc9_,_loc10_,_loc7_,_loc7_),new Point(0,0));
  223.             aDigitImageTraveled.push(_loc1_);
  224.             _loc1_ = new BitmapData(_loc7_,_loc7_,true,0);
  225.             _loc1_.copyPixels(_loc4_,new Rectangle(_loc9_,_loc10_,_loc7_,_loc7_),new Point(0,0));
  226.             aDigitImageCurrent.push(_loc1_);
  227.             _loc1_ = new BitmapData(_loc7_,_loc7_,true,0);
  228.             _loc1_.copyPixels(_loc5_,new Rectangle(_loc9_,_loc10_,_loc7_,_loc7_),new Point(0,0));
  229.             aDigitImageTarget.push(_loc1_);
  230.             _loc8_++;
  231.          }
  232.          aMarkerImage = [];
  233.          _loc1_ = new BitmapData(32,32,true,0);
  234.          _loc1_.copyPixels(new m_frame_red(32,32),new Rectangle(0,0,32,32),new Point(0,0));
  235.          aMarkerImage.push(_loc1_);
  236.          frameTimer = new FrameTimer(this,300,5,canvasBD);
  237.       }
  238.       
  239.       private function CalculateLeastPoint() : int
  240.       {
  241.          var _loc1_:* = undefined;
  242.          var _loc2_:int = 0;
  243.          var _loc3_:* = undefined;
  244.          var _loc4_:* = undefined;
  245.          var _loc5_:* = undefined;
  246.          var _loc6_:* = undefined;
  247.          var _loc7_:Array = null;
  248.          var _loc8_:* = undefined;
  249.          var _loc9_:* = undefined;
  250.          var _loc10_:* = undefined;
  251.          var _loc11_:* = undefined;
  252.          var _loc12_:* = undefined;
  253.          _loc1_ = new Array();
  254.          _loc2_ = 16;
  255.          _loc3_ = 0;
  256.          while(_loc3_ < h)
  257.          {
  258.             _loc5_ = 0;
  259.             while(_loc5_ < w)
  260.             {
  261.                _loc6_ = _loc5_ + _loc3_ * w;
  262.                _loc7_ = new Array(total);
  263.                _loc8_ = 0;
  264.                while(_loc8_ < total)
  265.                {
  266.                   _loc7_[_loc8_] = _loc2_;
  267.                   _loc8_++;
  268.                }
  269.                _loc7_[_loc6_] = 0;
  270.                _loc9_ = _loc6_ - w;
  271.                _loc10_ = _loc6_ + w;
  272.                _loc11_ = _loc6_ - 1;
  273.                _loc12_ = _loc6_ + 1;
  274.                if(_loc3_ > 0)
  275.                {
  276.                   _loc7_[_loc9_] = Math.abs(aDecimal[_loc6_] - aDecimal[_loc9_]);
  277.                }
  278.                if(_loc5_ > 0)
  279.                {
  280.                   _loc7_[_loc11_] = Math.abs(aDecimal[_loc6_] - aDecimal[_loc11_]);
  281.                }
  282.                if(_loc3_ < h - 1)
  283.                {
  284.                   _loc7_[_loc10_] = Math.abs(aDecimal[_loc6_] - aDecimal[_loc10_]);
  285.                }
  286.                if(_loc5_ < w - 1)
  287.                {
  288.                   _loc7_[_loc12_] = Math.abs(aDecimal[_loc6_] - aDecimal[_loc12_]);
  289.                }
  290.                _loc1_.push(_loc7_);
  291.                _loc5_++;
  292.             }
  293.             _loc3_++;
  294.          }
  295.          return (_loc4_ = new Dijkstra(aDecimal,w,h)).findShortestPath();
  296.       }
  297.       
  298.       private function endMessage() : *
  299.       {
  300.          var _loc1_:TextFormat = null;
  301.          var _loc2_:String = null;
  302.          var _loc3_:BitmapData = null;
  303.          var _loc4_:TextField = null;
  304.          var _loc5_:Point = null;
  305.          var _loc6_:Rectangle = null;
  306.          _loc1_ = new TextFormat();
  307.          _loc4_ = new TextField();
  308.          _loc1_.size = 32;
  309.          _loc1_.font = "Arial";
  310.          _loc1_.color = "0xffffff";
  311.          _loc1_.bold = true;
  312.          _loc4_.text = "    Congratulations you completed all " + endLevel + " levels!";
  313.          _loc4_.setTextFormat(_loc1_);
  314.          _loc4_.width = pixW;
  315.          _loc4_.height = 50;
  316.          _loc3_ = new BitmapData(_loc4_.width,_loc4_.height,true,4294901760);
  317.          _loc5_ = new Point(0,pixH / 2 - 25);
  318.          _loc6_ = new Rectangle(0,0,_loc4_.width,_loc4_.height);
  319.          _loc3_.fillRect(_loc6_,4278229248);
  320.          _loc3_.draw(_loc4_);
  321.          canvasBD.copyPixels(_loc3_,_loc6_,_loc5_);
  322.       }
  323.       
  324.       private function fullMessage() : *
  325.       {
  326.          var _loc1_:TextFormat = null;
  327.          var _loc2_:String = null;
  328.          var _loc3_:BitmapData = null;
  329.          var _loc4_:TextField = null;
  330.          var _loc5_:Point = null;
  331.          var _loc6_:Rectangle = null;
  332.          _loc1_ = new TextFormat();
  333.          _loc4_ = new TextField();
  334.          _loc1_.size = 24;
  335.          _loc1_.font = "Hobo Std";
  336.          _loc1_.color = "0x000000";
  337.          _loc1_.bold = false;
  338.          _loc1_.align = "center";
  339.          _loc4_.text = startMessage;
  340.          _loc4_.setTextFormat(_loc1_);
  341.          _loc4_.width = pixW;
  342.          _loc4_.height = 50;
  343.          _loc3_ = new BitmapData(_loc4_.width,_loc4_.height,true,4294901760);
  344.          _loc5_ = new Point(0,0);
  345.          _loc6_ = new Rectangle(0,0,_loc4_.width,_loc4_.height);
  346.          if(goodMessage)
  347.          {
  348.             _loc3_.fillRect(_loc6_,4285125844);
  349.          }
  350.          else
  351.          {
  352.             _loc3_.fillRect(_loc6_,4293787648);
  353.          }
  354.          _loc3_.draw(_loc4_);
  355.          canvasBD.copyPixels(_loc3_,_loc6_,_loc5_);
  356.       }
  357.       
  358.       private function updateClimber() : void
  359.       {
  360.          var _loc1_:* = undefined;
  361.          var _loc2_:* = undefined;
  362.          var _loc3_:* = undefined;
  363.          var _loc4_:int = 0;
  364.          _loc1_ = xPos;
  365.          _loc2_ = yPos;
  366.          if(xPos == -1)
  367.          {
  368.             if(goRight)
  369.             {
  370.                ++xPos;
  371.                yPos = 0;
  372.             }
  373.          }
  374.          else if(goRight)
  375.          {
  376.             if(xPos < w - 1 && aTravel[xPos + 1 + yPos * w] == 0)
  377.             {
  378.                ++xPos;
  379.             }
  380.          }
  381.          else if(goLeft)
  382.          {
  383.             if(xPos > 0 && aTravel[xPos - 1 + yPos * w] == 0)
  384.             {
  385.                --xPos;
  386.             }
  387.          }
  388.          else if(goDown)
  389.          {
  390.             if(yPos < h - 1 && aTravel[xPos + (yPos + 1) * w] == 0)
  391.             {
  392.                ++yPos;
  393.             }
  394.          }
  395.          else if(goUp)
  396.          {
  397.             if(yPos > 0 && aTravel[xPos + (yPos - 1) * w] == 0)
  398.             {
  399.                --yPos;
  400.             }
  401.          }
  402.          if(xPos != -1)
  403.          {
  404.             aTravel[xPos + yPos * w] = 1;
  405.          }
  406.          if(_loc1_ != xPos || _loc2_ != yPos)
  407.          {
  408.             _loc3_ = aDecimal[xPos + yPos * w];
  409.             if(_loc1_ == -1)
  410.             {
  411.                _loc4_ = 3;
  412.             }
  413.             else
  414.             {
  415.                _loc4_ = int(aDecimal[_loc1_ + _loc2_ * w]);
  416.             }
  417.             score += Math.abs(_loc3_ - _loc4_);
  418.             _loc4_ = _loc3_;
  419.          }
  420.          goLeft = goRight = goUp = goDown = false;
  421.       }
  422.       
  423.       private function runGame(param1:TimerEvent) : *
  424.       {
  425.          var _loc2_:Boolean = false;
  426.          _loc2_ = false;
  427.          if(firstTime)
  428.          {
  429.             stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownListener);
  430.             firstTime = false;
  431.          }
  432.          _beforeTime = getTimer();
  433.          _overSleepTime = _beforeTime - _afterTime - _sleepTime;
  434.          if(gameCompleted)
  435.          {
  436.             canvasBD.lock();
  437.             endMessage();
  438.             canvasBD.unlock();
  439.          }
  440.          else if(pauseFrames == 0)
  441.          {
  442.             updateClimber();
  443.             canvasBD.lock();
  444.             drawBackground();
  445.             drawDigits();
  446.             canvasBD.unlock();
  447.          }
  448.          else
  449.          {
  450.             canvasBD.lock();
  451.             fullMessage();
  452.             canvasBD.unlock();
  453.             --pauseFrames;
  454.          }
  455.          _afterTime = getTimer();
  456.          _timeDiff = _afterTime - _beforeTime;
  457.          _sleepTime = _period - _timeDiff - _overSleepTime;
  458.          if(_sleepTime <= 0)
  459.          {
  460.             _excess -= _sleepTime;
  461.             _sleepTime = 2;
  462.          }
  463.          gameTimer.reset();
  464.          gameTimer.delay = _sleepTime;
  465.          gameTimer.start();
  466.          while(_excess > _period)
  467.          {
  468.             _excess -= _period;
  469.          }
  470.          fps = frameTimer.countFrames();
  471.          param1.updateAfterEvent();
  472.          if(!gameCompleted)
  473.          {
  474.             checkGameFinished();
  475.          }
  476.       }
  477.       
  478.       private function keyDownListener(param1:KeyboardEvent) : *
  479.       {
  480.          switch(param1.keyCode)
  481.          {
  482.             case 38:
  483.                goUp = true;
  484.                goDown = goLeft = goRight = false;
  485.                break;
  486.             case 37:
  487.                goLeft = true;
  488.                goDown = goRight = goUp = false;
  489.                break;
  490.             case 39:
  491.                goRight = true;
  492.                goDown = goLeft = goUp = false;
  493.                break;
  494.             case 40:
  495.                goDown = true;
  496.                goLeft = goRight = goUp = false;
  497.                break;
  498.             default:
  499.                trace(param1.keyCode);
  500.          }
  501.       }
  502.       
  503.       private function drawDigits() : void
  504.       {
  505.          var _loc1_:Rectangle = null;
  506.          var _loc2_:Point = null;
  507.          var _loc3_:int = 0;
  508.          var _loc4_:TextFormat = null;
  509.          var _loc5_:String = null;
  510.          var _loc6_:BitmapData = null;
  511.          var _loc7_:TextField = null;
  512.          var _loc8_:Point = null;
  513.          var _loc9_:Rectangle = null;
  514.          _loc1_ = new Rectangle(0,0,32,32);
  515.          _loc2_ = new Point(offX - (tileSize + spacing),offY);
  516.          if(xPos == -1)
  517.          {
  518.             canvasBD.copyPixels(aDigitImageCurrent[3],_loc1_,_loc2_);
  519.             canvasBD.copyPixels(aMarkerImage[0],_loc1_,_loc2_);
  520.          }
  521.          else
  522.          {
  523.             canvasBD.copyPixels(aDigitImageTraveled[3],_loc1_,_loc2_);
  524.          }
  525.          _loc3_ = 0;
  526.          while(_loc3_ < total)
  527.          {
  528.             _loc2_ = new Point(offX + _loc3_ % w * (tileSize + spacing),offY + Math.floor(_loc3_ / w) * (tileSize + spacing));
  529.             canvasBD.copyPixels(aDigitImage[aDecimal[_loc3_]],_loc1_,_loc2_);
  530.             if(aTravel[_loc3_] == 1)
  531.             {
  532.                if(xPos != -1 && xPos + yPos * w == _loc3_)
  533.                {
  534.                   canvasBD.copyPixels(aDigitImageCurrent[aDecimal[_loc3_]],_loc1_,_loc2_);
  535.                   canvasBD.copyPixels(aMarkerImage[0],_loc1_,_loc2_);
  536.                }
  537.                else
  538.                {
  539.                   canvasBD.copyPixels(aDigitImageTraveled[aDecimal[_loc3_]],_loc1_,_loc2_);
  540.                }
  541.             }
  542.             else
  543.             {
  544.                canvasBD.copyPixels(aDigitImage[aDecimal[_loc3_]],_loc1_,_loc2_);
  545.             }
  546.             if(_loc3_ == targetTile)
  547.             {
  548.                if(xPos + yPos * w != targetTile)
  549.                {
  550.                   canvasBD.copyPixels(aDigitImageTarget[aDecimal[targetTile]],_loc1_,_loc2_);
  551.                }
  552.                else
  553.                {
  554.                   canvasBD.copyPixels(aDigitImageTraveled[aDecimal[targetTile]],_loc1_,_loc2_);
  555.                }
  556.             }
  557.             _loc3_++;
  558.          }
  559.          _loc4_ = new TextFormat();
  560.          _loc7_ = new TextField();
  561.          _loc4_.size = 24;
  562.          _loc4_.font = "Hobo Std";
  563.          _loc4_.color = "0x69d4d4";
  564.          _loc4_.bold = false;
  565.          _loc7_.text = " Level: " + level + " of " + endLevel + "    Score: " + score + " of " + targetScore + "     Failures: " + failures;
  566.          _loc7_.setTextFormat(_loc4_);
  567.          _loc7_.width = pixW;
  568.          _loc7_.height = 30;
  569.          _loc6_ = new BitmapData(_loc7_.width,_loc7_.height,true,4278190080);
  570.          _loc8_ = new Point(0,0);
  571.          _loc9_ = new Rectangle(0,0,_loc7_.width,_loc7_.height);
  572.          _loc6_.draw(_loc7_);
  573.          canvasBD.copyPixels(_loc6_,_loc9_,_loc8_);
  574.       }
  575.       
  576.       public function startGame() : void
  577.       {
  578.          var _loc1_:int = 0;
  579.          gameTimer = new Timer(_period,1);
  580.          gameTimer.addEventListener(TimerEvent.TIMER,runGame);
  581.          gameTimer.start();
  582.          offX = (pixW - w * (tileSize + spacing)) / 2;
  583.          offY = (pixH - (h + 1) * (tileSize + spacing)) / 2;
  584.          _loc1_ = 1;
  585.          while(_loc1_ < lev)
  586.          {
  587.             newLevel(false,false);
  588.             _loc1_++;
  589.          }
  590.       }
  591.       
  592.       private function drawBackground() : void
  593.       {
  594.          canvasBD.copyPixels(backgroundBD,backgroundRect,backgroundPoint);
  595.       }
  596.       
  597.       private function stuck() : *
  598.       {
  599.          newLevel(true,true);
  600.       }
  601.       
  602.       private function checkGameFinished() : *
  603.       {
  604.          var _loc1_:int = 0;
  605.          var _loc2_:int = 0;
  606.          var _loc3_:int = 0;
  607.          var _loc4_:int = 0;
  608.          var _loc5_:int = 0;
  609.          _loc1_ = 0;
  610.          _loc2_ = -1;
  611.          _loc3_ = 1;
  612.          _loc4_ = -1;
  613.          _loc5_ = 1;
  614.          if(xPos == -1)
  615.          {
  616.             _loc1_ = 1;
  617.          }
  618.          else
  619.          {
  620.             _loc1_ = 0;
  621.             if(xPos > 0 && aTravel[xPos - 1 + yPos * w] == 0)
  622.             {
  623.                _loc1_++;
  624.             }
  625.             if(xPos < w - 1 && aTravel[xPos + 1 + yPos * w] == 0)
  626.             {
  627.                _loc1_++;
  628.             }
  629.             if(yPos > 0 && aTravel[xPos + yPos * w - w] == 0)
  630.             {
  631.                _loc1_++;
  632.             }
  633.             if(yPos < h - 1 && aTravel[xPos + yPos * w + w] == 0)
  634.             {
  635.                _loc1_++;
  636.             }
  637.          }
  638.          if(xPos + yPos * w == targetTile)
  639.          {
  640.             checkScore();
  641.          }
  642.          else if(_loc1_ == 0)
  643.          {
  644.             stuck();
  645.          }
  646.       }
  647.       
  648.       private function newLevel(param1:Boolean, param2:Boolean) : void
  649.       {
  650.          var _loc3_:* = undefined;
  651.          if(!(param1 || param2) && level == endLevel)
  652.          {
  653.             gameCompleted = true;
  654.             trace("GameEnded");
  655.             return;
  656.          }
  657.          if(!param1)
  658.          {
  659.             ++w;
  660.             ++h;
  661.             ++level;
  662.             if(level % onlyWidthNumber == 0)
  663.             {
  664.                --h;
  665.             }
  666.          }
  667.          else
  668.          {
  669.             ++failures;
  670.          }
  671.          total = w * h;
  672.          targetTile = total - 1;
  673.          aTravel = [];
  674.          _loc3_ = 0;
  675.          while(_loc3_ < total)
  676.          {
  677.             aTravel.push(0);
  678.             _loc3_++;
  679.          }
  680.          xPos = yPos = -1;
  681.          if(!param2)
  682.          {
  683.             offX = (pixW - w * (tileSize + spacing)) / 2;
  684.             offY = (pixH - (h + 1) * (tileSize + spacing)) / 2;
  685.             targetScore = 2 + CalculateLeastPoint();
  686.             trace("Target = " + targetScore);
  687.          }
  688.          goodMessage = !(param2 || param1);
  689.          if(param2)
  690.          {
  691.             startMessage = "So you got stuck on level " + level + ", eh?";
  692.          }
  693.          else if(level == 1)
  694.          {
  695.             if(param1)
  696.             {
  697.                startMessage = "Oh no! Failure on first level! :p";
  698.             }
  699.             else
  700.             {
  701.                startMessage = "Welcome! You need to finish level 1 with " + targetScore + " points.";
  702.             }
  703.          }
  704.          else if(param1)
  705.          {
  706.             startMessage = "Too bad. Your score was " + score + " but you need to hit " + targetScore + ".";
  707.          }
  708.          else
  709.          {
  710.             startMessage = "Well done! Next level is " + level + " and target is " + targetScore + " points.";
  711.          }
  712.          score = 0;
  713.          pauseFrames = 4 * FRAME_RATE;
  714.       }
  715.       
  716.       public function resetGame() : void
  717.       {
  718.          level = 1 - 1;
  719.          w = startW - 1;
  720.          h = startH - 1;
  721.          failures = 0;
  722.          newLevel(false,false);
  723.       }
  724.    }
  725. }
  726.