Program listing on 48K Spectrum.
1 BORDER 3: POKE 23693,0: LET l=0: LET x=8: CLS : LET s=0: FOR d=-4 TO 0: FOR c=-7 TO 0: PRINT AT d+7,28+c*4; PAPER 1-c-d-6*(c+d<-5),: NEXT c: NEXT d: LET a=x+1: LET b=16: RESTORE : READ o$,o,q,k,g,x: PRINT AT 19,o;" " AND o-x; INK 7;AT 19,x;o$;o$;o$: READ e,f,p,c,z,c,d,t,a,b,h,w,s,u,l: PRINT AT f+d,4*INT ((e+c)/4);" " AND h;AT f,e;" "; INK 7;AT b,a;"o"; PAPER 2;AT 0,0;(l-u)*40+s,"L:";l+1,: BEEP w+(z OR p)/50,24*(h-w): POKE (w=0)*23620,14-9*u: DATA CHR$ 131,x,IN 61438-174,q-64*(q>17),(k=9)+2*(k=8)-(k<2)-(k=0),x+g*(x+g<30)*(x>=-g),a,b,(e=0)-(e=31),c+2*p,ATTR (b-d,a+c)>0,c-2*c*(f=18)*(e+c+c=x+1)*(p=0),d-d*2*(z+(f=18)*(e=x+1+c)),ATTR (b-d,a+c)=0,a+c*t,b-d*t,z*(f<9)*(f>1),b=21,s+h,s=40,l+u |
One other problem was collision detection with the bricks. In an earlier version of the game, sometimes two bricks could be destroyed in one iteration, but only one point would be added to the score in that case. This issue was resolved by Einar, in order to pave the way for a multi-level game.
Later, after more space had been freed up in the program listing, a side-bounce effect was added allowing the player to redirect the ball left or right if hit directly on the corner of the bat. Eventually the bat size was reduced from 4 to 3 to make this side-bounce effect symmetrical, and the game a little harder. Finally the PAPER colour for the status row was changed to red, so it actually looks like the ball is bouncing off something at the top of the screen, and the sound effects were slightly refined. The end result is a program listing that is one character short of the one-liner competition limits.