Take a peek at the fifth file. All that's been added is a new window title at line 191 ("Lincoln Versus Kitties"), creating a few sound objects starting at line 201, and few calls sprinkled around the file that play those sounds at the right time. I'll leave those for you to discover, but their placement should make sense at this point. Also, note how easy it is to add sound effects here in just a couple of lines!
And that is that... for making space invaders. But what about other games? Using other languages?
First off, the basics are always the same. Collect input. Make decisions. Wipe away the old drawings and paste on some new ones. Repeat.
Secondly, think about changing some of the rules, like what we've done in those update functions or with the collision detection.
What if the player moved around in a circle, instead of left and right? Not too hard to change the update function to do that.
What if, instead of destroying the enemy, the laser blasts bounced back? And then the player could bounce it back again? That's Pong.
What if the background scrolled down and the sprites looked like cars? That's Spy Hunter and just about every driving game.
What if, instead of bullets, geometric shapes came down from the top? And what if you assigned keys to control and position them? That's Tetris.
What if you used 3D instead of 2D? Pygame will do that, with a bit more patience. And you'd have Doom, Hexen, Quake, and on and on and on.
The basics will apply to most every situation you're in. The important bits are how you set up the controls, what rules the game follows, and how they get displayed on the screen. We've seen how we can control each of these. It's just Controller, Model, and View. The rest is up to you.
Wokka, wokka, wokka, wokka, wokka...