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 G
ood, B
ad and U
gly.
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]