public Maze() {
        createCellArray(map);
        setPreferredSize(new Dimension(CELL * tileWidth, CELL * tileHeight));
        pacman = new Pacman(pacmanInitialRow, pacmanInitialColumn, this, 3);
        inky   = new Ghost(ghostInitialRow, ghostInitialColumn, this, "inky.png");
        blinky = new Ghost(ghostInitialRow + 3, ghostInitialColumn, this, "blinky.png");
        pinky  = new Ghost(ghostInitialRow, ghostInitialColumn + 3, this, "pinky.png");
        clyde  = new Ghost(ghostInitialRow + 3, ghostInitialColumn + 3, this, "clyde.png");

        // Start ghosts first
        inky.start();
        blinky.start();
        pinky.start();
        clyde.start();
        pacman.start();

        /*
         * Key Listeners
         */
        this.setFocusable(true);
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent k) {
                switch (k.getKeyCode()) {
                case (KeyEvent.VK_KP_DOWN) :
                case (KeyEvent.VK_DOWN) :
                    pacman.setDirection('d');

                    break;

                case (KeyEvent.VK_KP_UP) :
                case (KeyEvent.VK_UP) :
                    pacman.setDirection('u');

                    break;

                case (KeyEvent.VK_KP_RIGHT) :
                case (KeyEvent.VK_RIGHT) :
                    pacman.setDirection('r');

                    break;

                case (KeyEvent.VK_KP_LEFT) :
                case (KeyEvent.VK_LEFT) :
                    pacman.setDirection('l');

                    break;
                }
            }
        });
        checkCollision();
        repaint();
    }