Terminar um jogo estilo Brick Breaker no Flash CC

Olá pessoal preciso de ajudar para terminar um jogo estilo Brick Breaker no Flash CC.
O professor pediu que alem de criar o jogo, ele tivesse as seguintes funções em seu código (os nomes das funções devem ser os mesmos que os contidos neste documento):

insertMoreBalls: inseri no palco aleatoriamente duas ou três bolas.

speedUpBall: acelera a velocidade em relação ao eixo x e y da bola que colidiu com o tijolo.

slowDownBall: desacelera a velocidade em relação ao eixo x e y da bola que colidiu com o tijolo.

getBiggerBalls: aumenta o tamanho da bola que colidiu com o tijolo.

getMoreLifes: aumenta em um o número de vidas do jogador.

increaseBrickResistance: aumenta a resistência do tijolo, isto é, quando ele for acertado por uma bola a sua resistência é diminuída em um. Quando for igual a zero, então o tijolo desaparece da tela.

O jogo está completo, só preciso fazer essas funções mas não estou conseguindo. O professor deu uma dica de como sortear o tijolo que vai possuir esses “powerups”. Segue o código dele abaixo:

Brick.as (PROFESSOR)

package {
import flash.display.MovieClip;
import flash.display.;
import flash.events.
;
public class Brick extends MovieClip {
private var _root:MovieClip;
private var _item:int;
public function Brick(){
//Code that will be run when the brick is added to the stage
addEventListener(Event.ADDED, beginClass);
//Enter frame code
addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
private function beginClass(event:Event):void{
_root = MovieClip(root);
_item = int(Math.random()*2);
}
private function enterFrameEvents(event:Event):void{
//hit testing with the ball
for(var i:int = 0;i<_root.ballsList.length;i++){
if(hitTestObject(_root.ballsList[i])){
//making the ball bounce off vertically
_root.ballsList[i].ballYSpeed *= -1;
//destroying this brick
_root.bricksCount–;
_root.removeChild(this);
//stop running this code
this.removeEventListener(Event.ENTER_FRAME, enterFrameEvents);
if(_item == 0){ // speed up the ball
speedUpBall(_root.ballsList[i]);

}
if(_item == 1 ){ // slow down the ball
slowDownBall(_root.ballsList[i]);
}
}
}
}
function speedUpBall(ball:MovieClip):void{
if(ball.ballXSpeed < 0){
ball.ballXSpeed -= 5;
}else{
ball.ballXSpeed += 5;
}
}
function slowDownBall(ball:MovieClip){
if(ball.ballXSpeed < 0){
ball.ballXSpeed += 5;
}else{
ball.ballXSpeed -= 5;
}
}
}
}

O meu código já é diferente, e eu tentei substituir o meu _root.mcball pelo _root.ballsList[i] dele e apliquei as funções de speedUpBall e slowDownBall mas aparece este erro quando faço isso:
…Brick.as, linha 1, coluna 1 5006: Um arquivo ActionScript não pode ter mais de uma definição externamente visível: Brick, speedUpBall

Brick.as (MEU CODIGO)

package {
import flash.display.;
import flash.events.
;
//extende a classe para que ela possua as mesmas
//propriedades do MovieClip
public class Brick extends MovieClip {
//a timeline principal
private var _root:MovieClip;
public function Brick(){
//o codigo vai rodar quando um tijolo e adicionado na tela
addEventListener(Event.ADDED, beginClass);
addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
private function beginClass(event:Event):void{
_root = MovieClip(root);
//incrementa a quantidade de tijolos na tela
_root.brickAmt ++;
}
private function enterFrameEvents(event:Event):void{
//verifica se o jogador perdeu
if(_root.gameOver){
//destroi this brick
this.parent.removeChild(this);
//o codigo para de rodar
removeEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
//teste de batida da bola
if(this.hitTestObject(_root.mcBall)){
//faz a bola bater verticalmente
_root.ballYSpeed *= -1;
//destroi this brick
this.parent.removeChild(this);
//o codigo para de rodar
removeEventListener(Event.ENTER_FRAME, enterFrameEvents);
//decrementa a quantidade de tijolos na tela
_root.brickAmt --;
//aumenta a pontuacao do jogador a cada tijolo quebrado
_root.score += 10;
}
}
}
}

Então pessoal, queria ter o código das funções pois não estou conseguindo pensar na logica e como sou leigo em java e actionscript ta difícil pra mim.
Outra duvida que tenho é como fazer as bolas extras aparecerem no palco quando a bola principal bate no tijolo que “esconde” essas bolas.

E caso precisem, essa é minha Main

stop();

var ballXSpeed:Number = 8; //velocidade no eixo X
var ballYSpeed:Number = 8; //velocidade no eixo Y
//quantos tijolos tem na tela
var brickAmt:int = 0;
//quantas vidas o jogador tem
var lives:int = 3;
//quando o jogo acabar
var gameOver:Boolean = false;
//a score do jogo
var score:int = 0;
//codigos para iniciar o jogo
function beginCode(event:MouseEvent):void{
//remove o listener com um click do mouse
stage.removeEventListener(MouseEvent.CLICK, beginCode);
mcPaddle.addEventListener(Event.ENTER_FRAME, movePaddle);
mcBall.addEventListener(Event.ENTER_FRAME, moveBall);
//adicionar um listener para ver se o level terminou
addEventListener(Event.ENTER_FRAME, checkLevel);
//remover o "Click to Start"
txtStart.text = ‘’;
addEventListener(Event.ENTER_FRAME, finishGame);

}

function movePaddle(event:Event):void{
//para o paddle seguir o mouse
mcPaddle.x = mouseX - mcPaddle.width / 2;
//caso o mouse vá demais para a esquerda
if(mouseX < mcPaddle.width / 2){
mcPaddle.x = 0;
}
//caso o mouse vá demais para a direita
if(mouseX > stage.stageWidth - mcPaddle.width / 2){
mcPaddle.x = stage.stageWidth - mcPaddle.width;
}
}

function moveBall(event:Event):void{
mcBall.x += ballXSpeed; //move a bola horizontalmente
mcBall.y += ballYSpeed; //move a bola verticalmente
//para bater a bolinha na parede
if(mcBall.x >= stage.stageWidth-mcBall.width){
//se bater no lado direito
ballXSpeed *= -1;
}
if(mcBall.x <= 0){
//se bater no lado esquerdo
ballXSpeed *= -1;
}
if(mcBall.y >= stage.stageHeight-mcBall.height){
//aqui a bolinha vai perder uma vida
//quando ela bater no chao
ballYSpeed *= -1;
lives --;
//se acabar as vidas
if(lives <= 0){
//jogo acaba
gameOver = true;
//remover listeners desnecessarios
mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);
mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);
removeEventListener(Event.ENTER_FRAME, checkLevel);
removeEventListener(Event.ENTER_FRAME, finishGame);
//acabar o jogo e ir para "You Lose!"
gotoAndStop(‘lose’);
}
}
if(mcBall.y <= 0){
//quando a bolinha bater no topo
//ela vai cair
ballYSpeed *= -1;
}
//Bater no paddle
if(mcBall.hitTestObject(mcPaddle)){
calcBallAngle();
}
}

function calcBallAngle():void{
//a posicao da bola vai mudar de acordo com a
//batida dela no paddle
var ballPosition:Number = mcBall.x - mcPaddle.x;
//vai converter a posicao da bola em uma porcentagem
//caminho pela esquerda -.5
//caminho pela direita .5
//o centro é 0
var hitPercent:Number = (ballPosition / (mcPaddle.width - mcBall.width)) - .5;
//vai calcular a porcentagem para que
//a bolinha aumente ou diminua a velocidade com a batida
ballXSpeed = hitPercent * 10;
ballYSpeed *= -1;
}

function makeLvl():void{
//ver se tem algum level sobrando
if(currentLvl > lvlArray.length){
//o jogo acaba
gameOver = true;
//remover os listeners desnecessarios
mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);
mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);
removeEventListener(Event.ENTER_FRAME, checkLevel);
removeEventListener(Event.ENTER_FRAME, finishGame);
//ir para "You win!"
gotoAndStop(“win”);
}
//achar o comprimento da array no codigo de level
//comeca no 0 e o primeiro level e 1
//o level "sempre estara 1 a frente"
var arrayLength:int = lvlArray[currentLvl-1].length;
//quantidade atual de tijolos
var brickRow:int = 0;
//cria um loop para colocar os tijolos em seus lugares
for(var i:int = 0;i<arrayLength;i++){
//verifica se deve colocar um tijolo
if(lvlArray[currentLvl-1][i] == 1){
var brick:Brick = new Brick();
//coloca as coordenadas dos tijolos pela variavel i e brickRow
brick.x = 15+(i-brickRow7)75;
brick.y = 10+brickRow
20;
//verifica uma se um os tijolos vao para uma nova linha
for(var c:int = 1;c<=10;c++){
if(i == c
7-1){
brickRow ++;
}
}
//adiciona os tijolos na tela
addChild(brick);
}
}
}

function checkLevel(event:Event):void{
//verifica se os tijolos acabaram
if(brickAmt == 0){
//reseta o level incrementando ele
currentLvl ++;
//roda a funcao makeLvl
//reseta o "Click to Begin"
txtStart.text = “Click To Begin”;
makeLvl();
//reseta a posicao da bola e do paddle
mcBall.x = 150;
mcBall.y = 265;
mcPaddle.x = 230;
//remove listeners desnecessarios
mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);
mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);
removeEventListener(Event.ENTER_FRAME, checkLevel);
//ativa o listener do click do mouse para comecar o jogo
stage.addEventListener(MouseEvent.CLICK, beginCode);
}
}

function finishGame(event:Event):void{
txtStats.text = "Level: “+currentLvl+” Lives: “+lives+” Score: "+score;
}
//se o jogador clicar, o jogo comeca
stage.addEventListener(MouseEvent.CLICK, beginCode);
//aparece o texto "Click to Begin"
txtStart.text = “Click To Begin”;

//chama a funcao para atualizar os textos de vida, score e level
addEventListener(Event.ENTER_FRAME, finishGame);
//constroi o level
makeLvl();