addEventListener not working properly

Mouse.CLICK is not working properly when i click the movie clips.

I have generated a random grid from movie clips stored in timeline. When I click on the movie clips, it should show a trace statement, but it is not working properly. Sometimes it shows the trace message, sometimes it does not show.

My code is like this

package 
{
    import flash.display.*;
    import flash.events.*;
    
    public class Main extends MovieClip
    {
        static const numPieces:uint = 7;  
        static const spacing:Number = 45; 
        static const offsetX:Number = 10; 
        static const offsetY:Number = 10;  
        
        private var gameSprite:Sprite;
        private var grid:Array;
        private var newPiece:Piece;
        
        
        public function Main() 
        {
            grid = new Array();
            for (var gridrows:int=0; gridrows<8; gridrows++) {
                grid.push(new Array());
            }
            setupGrid();
        }
        
        public function setupGrid() 
        {
        gameSprite = new Sprite();
        
        for (var col:int=0; col<8; col++) 
        {
            for (var row:int=0; row<8; row++) {
                addPiece(col,row);
            }
        }
        addChild(gameSprite);
        }
        
        public function addPiece(col, row:int):Piece 
        {
            var newPiece:Piece = new Piece();
            newPiece.x = col*spacing+offsetX;
            newPiece.y = row*spacing+offsetY;
            newPiece.col = col;
            newPiece.row = row;
            newPiece.type = Math.ceil(Math.random()*7);
            newPiece.gotoAndStop(newPiece.type);
            gameSprite.addChild(newPiece);
            grid[col][row] = newPiece;
            newPiece.addEventListener(MouseEvent.CLICK,clickPiece);
            return newPiece;
        }
        
        public function clickPiece(e:Event) 
        {
            trace('hello');
        }
        
    }
    
}

and please someone tell me what this code does… I copied it from some tutorial site…

inside Main function

grid = new Array();
for (var gridrows:int=0; gridrows<8; gridrows++) {
grid.push(new Array());
}

inside addPiece function
grid[col][row] = newPiece;

Any help … much appreciated…