Draw an ASCII house
Vim 122, 89 Keystrokes
"aDJ"bD9i-<esc>Y2pVr <C-v>jr|$.Y4p3l<C-v>jljlr-jR| |<esc>{l<C-v>}d@apjdG@bp}Vr-{YPVr r/$r\qqYPllxx|P@qq@qddr*
Try it online!
I've improved my vim-golfing skills significantly since I posted this answer, so I decided to go back and write this whole thing from scratch. Saved thirty-three bytes in the process!
Input is assumed to be on two separate lines, so that the buffer looks like this before you start typing:
3
4
I had a very detailed explanation, but I don't feel like writing it all over again from the beginning... >_< Check out the revision history if you still want to see it.
Python 3.6 (pre-release), 221 210 203 bytes
x,y=eval(input())
w=8*x+1;p='-'*w+'\n'
for v in['*',*[f'/{" "*i}\\'for i in range(1,w-1,2)],p+p.join([''.join(f'{"".join([f"|{(a*3)[:3]:^7}"]*x)}|\n'for a in(*' -','| |',*'- '))]*y)+p]:print(v.center(w))
Reads 2 integers (separated by comma) from stdin, prints the house to stdout.
Readable version:
x, y = eval(input())
w = 8 * x + 1 # total width (in characters)
p = '-' * w + '\n' # floors
for v in [
'*', # asterisk
*[f'/{" "*i}\\' for i in range(1, w-1, 2)], # roof
p + p.join([''.join(f'{"".join([f"|{(a*3)[:3]:^7}"]*x)}|\n' for a in (*' -','| |',*'- '))]*y) + p # rooms
]:
print(v.center(w))
Python 2, 190 181 bytes
w,h=input();W=w*4
for i in range(~W,h*6+1):print['-'[i%(h*6):]*(W-~W)or[' %s '%' -|- - - -|- '[~i%6::5],'-'*7][i%6<1].join('|'*-~w),' '*~i+['/%*c'%(w*8-~i*2,92),'*'][W<-i]][i<0]
Pretty sure there's much to golf, especially the windows, but here's something for now. Input width and height comma-separated, e.g. 1,2
.
Quick and rough explanation:
* <--- i = ~W = -w*4 - 1. <---\
/ \ <--\ i = -W = -w*4 | Preceding spaces
/ \ | | are calculated
/ \ | | the same way
/ \ <--/ i = -1 <---/
/---> --------- <--- i = 0
| | | <--\ i = 1 <---\
Check | --- | | | Calculate inner string
i%(h*6) | | | | | | and use to join '|'s
is zero | --- | | | (ditto with |-------|)
| | | <--/ i = h*6 - 1 <---/
\---> --------- <--- i = h*6
^ ^
\-------/
W-~W = w*8 + 1