My first golf also, and not warnings safe.
Followed some of belg4mit's conventions. 174 chars.
($h,$f,@F)=(5,.3,qw'@ + O %');sub x{printf"%+${h}s\n",$_[0]};x('*');
sub f{my$x;for(1..$_[0]){$x.=(rand()<$f)?$F[rand$#F+1]:'='}$x}
for(1..($h-1)){$h++;x(f(1+(($_)*2)));}