Not so good roads in Rnccia

Python 2, 229 213 204 200 188 bytes

lambda n,l:"\n".join(["-"*l]+[i%2and"".join(j-i/2&1+2*(n>1)and"  "or x.append(1)or"H0000##"[len(x)%7]*2for j in range(l/2))or((i-n*2and"- "or"=")*l)[:l]for i in range(1,n*4)]+["-"*l])
x=[]

Try it online!


My longest codegolf answer so far


PHP, 160 186 178 173 170 168 163 bytes

for(;$y<=2*$h=2*$argv[2];$y+=print"
")for($x=0;$x++<$w=$argv[1];)echo$y%2?($x+$y+$h*$y)%($h+2)>1|$x>($w&~1)?" ":UBUGUBU[$n++%14/2]:" -="[$y%(2*$h)?$y-$h?$x&1:2:1];

takes input from command line; Run with -nr. The holes are Good, Bad and Ugly.

breakdown

for(;$y<=2*$h=2*$argv[2];$y+=print"\n") # loop throug lines and lanes, post-print newline
    for($x=0;$x++<$w=$argv[1];)echo         # loop from left to right and print ...
        $y%2
        ?                                       # lanes:
            ($x+$y+$h*$y)%($h+2)>1                  # if not the position for a hole
            |$x>($w&~1)                             # or too close to the end
            ?" "                                    # then space
            :UBUGUBU[$n++%14/2]                     # else hole
    :" -="[                                     # or lines:
        $y%(2*$h)                               # if neither top nor bottom line
            ?   $y-$h                               # if not middle line
                ?   $x&1                                # then "- "
                :   2                                   # else "=="
            :   1                                   # else "--"
    ]
    ;
  • ($x-$y)+$y*($h+2) --> ($x+$y+$h*$y)
  • $w<$x+1&&$w&1 --> $x>$w-($w&1) --> $x>($w&~1)
  • ($y%(2*$h)?$y-$h?" -"[$x&1]:"=":"-") -->
    ($y%(2*$h)?" -="[$y-$h?$x&1:2]:"-") (thanks @Christoph) -->
    " -="[$y%(2*$h)?$y-$h?$x&1:2:1]