Illustrate football team formations on a pitch
Python 2, 401 377 bytes
def g(x,o):
r=lambda r:["|"+" x"*5+" |","| x |","| x x |","| x x x |","| x x x x |"][r%5];d="+"+"-"*17+"+";h=[d,"| | x | |","| +-----+ |"]+map(r,x);b=map(lambda r:r.replace("x","o"),[s for s in h[:3]]+map(r,o))[::-1];e="|"+" "*17+"|"
if len(x)-4:h.insert(5,e)
if len(o)-4:b.insert(1,e)
print"\n".join(h+[d]+b)
Ungolfed version with test environment here!
Function that takes two lists of the format [defenders, midfielders, midfielders, attackers] while the one midfielder number is optional. Team X (top) comes first, team O (bottom) second.