Oh man you had an extra _putimage in there around 330, take it out, looks good then at least for the few seconds I watched.
Man you let the red guys go right through the walls!
For candy and levers, you have to track what's not eaten and redraw or _putimage what remains after the cls of _putimage of the maze& same loop, do all processing in ypur GOSUBS but do all the drawing and _putimages in main loop.
arrays candyX, candyY, candyEaten, leverX, leverY, leverGone, MonsterX, MonsterY
do
_putimage , maze&, 0
for i = 1 to Ncandy
if candyEaten = 0 then drawcandy candyX(i), candyY(i) or _PutImage (CandyX(i), candyY(i)), candy&, 0
next
for i = 1 to Nlevers
if leverGone = 0 then drawlever leverX(i), leverY(i) or _PutImage (leverX(i), leverY(i)), lever&, 0
next
for i = 1 to nRedSquares
drawRedSquares MonsterX(i), monsterY(i) or _putimage ( MonsterX(i), MonsterY(i) ), Monster&, 0
next
drawYou youX, youY
'process all updates to characters
Display
limit
loop
There! all your drawing is done in main loop
Setup candy, lever and monster allot like you did with Maze& on different sizes and specify (x, y) locations for _putimage to know where to put them on screen.