Looks interesting. It would be easier to work with if you added comments, and gave the variables more meaningful names. But I think I understand it for the most part.
I noticed that the keydown$ sections are mostly identical, with only slight differences. You should put the key-specific code into a SELECT CASE structure, and put the general stuff (collision detection, etc.) either before or after the SELECT CASE. That will make it more concise, efficient, and easy to work with.