Just for the record, I had the same problem of breakout getting "laggy" after running (in the appliance) for a few seconds. Staff's implementation would run properly, so it wasn't strictly a hardware (or a VM) issue.
I found this useful answer in /r/cs50, that, basically, states that the
pause() statement is mandatory for the program to run properly.
As @delipity (and tutor @Gary) explains, the
pause() statement is needed because, on a lower level, the OS (which is actually administering CPU computations) is trying to solve multitasking by allocating some CPU cycles to each loaded program (the OS itself, services / daemons, the VM player, the guest OS, gedit...).
If you don't
pause, you're going to try to consume every single CPU cycle for your
breakout, which the OS will not allow you to do. So, after a few seconds of doing that, it will, forcibly, start to skimp cycles at you and shuffle them among other running programs.
If you had solved ball movement with a small value in
velocity without any
pause, what will happen, in practice, is that you'll have a ball that will move at a very slow rate and a certain pause, imposed by the OS. Which you'll perceive as laggines
I also gained some improvement in the moves of my paddle by applying the "advice" given here: allow some events during program execution to bypass the