Code in frame 1 layer 1

//flame
//demonstrates typical missile

init();

function init(){
  //initialization

  //direction constants
  _root.NORTH = 0;
  _root.NORTHWEST = 1;
  _root.WEST = 2;
  _root.SOUTHWEST = 3;
  _root.SOUTH = 4;
  _root.SOUTHWEST = 5;
  _root.WEST = 6;
  _root.NORTHWEST = 7;

  //randomly position cars

  reset(car1);
  reset(car2);
  reset(car3);

  //set monster initial values
  monster.dx = 0;
  monster.dy = 0;
  monster.speed = 0;
  monster.dir = _root.NORTH;

  //set flame initial values
  flame.dx = 0;
  flame.dy = 0;
  flame.speed = 0;
  flame.dir = _root.NORTH;


} // end init

monster.onEnterFrame = function(){
  checkKeys();
  turn(monster);
  move(monster);

  //move the cars, too
  move(car1);
  move(car2);
  move(car3);

  //and the flame, if it's visible
  moveFlame();
  
  //check for collisions
  checkCollisions();

} // end monster enterFrame

function checkKeys(){
  //check keyboard to move monster
  if (Key.isDown(Key.UP)){
    monster.speed++;
    if (monster.speed > 8){
      monster.speed = 8;
    } // end if
  } // end if

  if (Key.isDown(Key.DOWN)){
    monster.speed--;
    if (monster.speed < -3){
      monster.speed = -3;
    } // end if
  } // end if

  if (Key.isDown(Key.RIGHT)){
    monster.dir++;
    if (monster.dir > 7){
      monster.dir = 0;
    } // end if
  } // end if

  if (Key.isDown(Key.LEFT)){
    monster.dir--;
    if (monster.dir < 0){
      monster.dir = 7;
    } // end if
  } // end if

  if (Key.isDown(Key.SPACE)){
    //shoot flame
    flame._x = monster._x;
    flame._y = monster._y;
    flame.dir = monster.dir;
    flame.speed = monster.speed + 20;
    turn(flame);
  } // end if

} // end checkKeys

function reset(sprite){
  //given a car sprite, resets its parameters
  sprite._x = Math.random() * Stage.width;
  sprite._y = Math.random() * Stage.height;
  sprite.dir = Math.random() * 8;
  sprite.dir = Math.floor(sprite.dir);
  sprite._rotation = sprite.dir * 45;
  sprite.speed = Math.random() * 10;
  turn(sprite);
} // end reset

function move(sprite){
  //moves any sprite, wrapping around boundaries

  //move
  sprite._x += sprite.dx;
  sprite._y += sprite.dy;

  //rotate
  sprite._rotation = sprite.dir * 45;
  
  //check boundaries - wrap all directions
  if (sprite._x > Stage.width){
    sprite._x = 0;
  } // end if

  if (sprite._x < 0){
    sprite._x = Stage.width;
  } // end if

  if (sprite._y > Stage.height){
    sprite._y = 0;
  } // end if

  if (sprite._y < 0){
    sprite._y = Stage.height;
  } // end if
} // end move

function moveFlame(){
  //the flame has different behavior on borders, so give it its own
  // movement function
  //move
  flame._x += flame.dx;
  flame._y += flame.dy;

  //rotate not needed
  //flame._rotation = flame.dir * 45;
  
  //hide on all boundaries
  if ((flame._x > Stage.width) ||
      (flame._x < 0) ||
      (flame._y > Stage.height) ||
      (flame._y < 0)){
 
    //move off screen and stop
    flame._x = - 200;
    flame._y = - 200; 

    flame.speed = 0;
  } // end if

} // end moveFlame

function turn(sprite){
  //given a sprite with a dir and speed, calculates dx and dy values
  switch (sprite.dir){
    case 0:
      sprite.dx = 0 * sprite.speed;
      sprite.dy = -1 * sprite.speed;
      break;
    case 1:
      sprite.dx = .7 * sprite.speed;
      sprite.dy = -.7 * sprite.speed;
      break;
    case 2:
      sprite.dx = 1 * sprite.speed;
      sprite.dy = 0 * sprite.speed;
      break;
    case 3:
      sprite.dx = .7 * sprite.speed;
      sprite.dy = .7 * sprite.speed;
      break;
    case 4:
      sprite.dx = 0 * sprite.speed;
      sprite.dy = 1 * sprite.speed;
      break;
    case 5:
      sprite.dx = -.7 * sprite.speed;
      sprite.dy = .7 * sprite.speed;
      break;
    case 6:
      sprite.dx = -1 * sprite.speed;
      sprite.dy = 0 * sprite.speed;
      break;
    case 7:
      sprite.dx = -.7 * sprite.speed;
      sprite.dy = -.7 * sprite.speed;
      break;
    default:
      trace ("Something went wrong here...");
      break;
  } // end switch
} // end turn