#JavaScript (ES7), <s> 216 </s> 212 bytes Takes input as `(block)(double)`, where _block_ is either \$1\$ (top right), \$2\$ (bottom right), \$3\$ (bottom left) or \$4\$ (top left) and _double_ is a Boolean value. <!-- language-all: lang-javascript --> b=>d=>(g=x=>y<31?` |-+=OTF `[X=(x-19)**2,Y=(y-15)**2,i=x*24%35<3|16>>Y%62%6&2,q=y>15^b/2&1,x<39?Y?x>19^y>15^b%2&&X||(d?Y>169:X>256)?0:i-3?X-1|Y-16|q?i:7:q*(d?X-256:Y-169)?6:3:x%38?4:5:8]+g(x<39?x+1:!++y):'')(y=0) [Try it online!](https://tio.run/##ZY3BToNAEIbvfYoxEdgFVrtQsKzsbmKMVy8eIMaGbpc2KOlaqwZSeHaE6s3TP/N9/2Re19/r4@ajev8ke6PLYcsHxYXmAu14w0WbhlQW0BGPPz49zIrnjKOG0AS7buDnHLWERue54o0bLKwwSsOOxkLkVhxYsR34B94KGq3UdWBTv0nDROayETRZ/WIrsO2s65CWuaBxwjIRRDGWc1aRUGaEdjmhcXeQFbthB3esZWQssIkmWMYsZI0VLuWCRWz54u3Q@UPjUXbheS1mjoNRy@d42JoPpIHD/BY0pBzomJ6HTzOASSk4IzWpxZh/CmBj9kdTl1e12aHirjabN7g8qd6He/Ol6pKNmwYJTlseHWDg7I3TF/jf6RYpjDSeRD/rhx8 "JavaScript (Node.js) – Try It Online") [Formatted version](https://tio.run/##jVNdU4JQEH3nV5xmUrgiJSgkJDjTNL320oNNH4P4NRYDmdXACL/ddpVMxT54uHd3z549d/denvof/fngdfrypkXxcLQcu8sArochL4oETOAiIYdMIEUHTR3dlQP4yDTVvb65uo/8uyIG9IihJNCg2wK1Goz6BrplKGXI3IemKx0KtVBB02QhZBuUP92C51GJCiyDF1S3@TPip/CoMh4R4BQG4fo3nnBFe3P09Wm6OwIJ022ib9WpcJ0qejuJWQZliC4VoDzLhkM9ezBMS@xVBBo7vrOHTmkUzRKHR0gjQkYCGredUXflJKKXYs6BrDPpr5wZzX3VEOtSG9TQWtkWB3Wtf@k2pZ/whK@4XSrd@nVWpnQIaRf2A9TCmihfV006Ko3RwZGqpkLapsqyJOghumiI5Th@pebJPKdX33Gh066qYkGpDNHvwKGAoRbtBQQM4mgeh6OTMJ4o/kUYD55xvAjyOi7j9yAcOeTxTOV0NJfpEHIUy7kvStSxEghlKBjIpXz5CQ) ###How? We iterate from \$y=0\$ to \$y=30\$ and from from \$x=0\$ to \$x=39\$ for each value of \$y\$. We define \$X=(x-19)^2\$ and \$Y=(y-15)^2\$ in order to test absolution positions within each quarter of the field. The expression `x * 24 % 35 < 3` yields _true_ if \$x\$ belongs to \$\{0, 3, 19, 35, 38\}\$ (the positions of the vertical lines) or _false_ otherwise. [Try it online!](https://tio.run/##y0osSyxOLsosKNHNy09J/f8/Lb9Io0LBVsHAWqFCwUbBBERra2sqVHMpKCTn5xXn56Tq5eSna1ToAOW1FIxMFFQVjE2BKo01rblq//8HAA "JavaScript (Node.js) – Try It Online") The expression `16 >> Y % 62 % 6 & 2` yields \$2\$ if \$y\$ belongs to \$\{0, 2, 12, 18, 28, 30\}\$ (the positions of the vertical lines, excluding the net) or \$0\$ otherwise. [Try it online!](https://tio.run/##FYrNCkBAGEX3nuJuyPjLjNgM3sNS/iL5hNQkzz4@m3Pr3LO0d3t2x7xf8Ub9YO1Ih29QIdUwKJFJ3jAUeBygYc9nDJkLBAGUZtnRdtI6JCtNvokgC9Q1ly4K9QMelNDOa@0H "JavaScript (Node.js) – Try It Online") The variable \$i\$ is defined as the result of a bitwise OR between the two above values, and is therefore interpreted as: - 0: space - 1: `|` - 2: `-` - 3: `+` The expressions `q = y > 15 ^ b / 2 & 1` and `x > 19 ^ y > 15 ^ b % 2 && X` are used to determine what do draw in each quarter according to the block \$b\$. The expression `d ? Y > 169 : X > 256` is used to crop the field according to the game type \$d\$ (single or double). The similar expression `d ? X - 256 : Y - 169` is used to draw the `T`'s at the appropriate positions.