Good and bad things.
I ended up finishing the project and e-mailing it to my teacher with about 12 seconds to spare before the deadline. Those last two days, when I wasn't sleeping or at school, were filled entirely with programming.
About 4 days before the deadline, I had finished writing all of the code, but I had wrote it all at once. I hadn't bothered to write it and test bits and pieces of it at a time (with the exception of the class that read textfiles). Naturally, there was a butt load of bugs and errors in it. The first non-menial one that I encountered was the usage of images. The program ran as a Java applet, and I had used images with it before. But this time, for some odd reason it wouldn't like the way I used ImageObserver. To this day, I don't understand how ImageObserever works or the way that I managed to make it magically work for me.
But anyway, the next major error that I had to contend with was the obvious error that people run into when creating their first real-time game: accepting player input while continuing to run the rest of the program. So I reorganized the main class and created a new thread.
The initial thread started off by creating the second thread, and then just sitting and waiting for input. When it received input, it would send the button information to a different class that would interpret the input based on what stage the other thread was at (ie, are you at a menu or are you actually playing the game) and it would modify a static object with the instruction, which would be read by the second thread and then reset to it's initial state.
The second thread, meanwhile, would simply be churning through the actual game. Every time it finished a single part of a loop, it would call a method from the main applet class, and that method would harvest all image data and compile it into a single image, which would then be displayed.
I actually finished re-organizing the code on the last day, and I added in the image buffering in the last hour; before that it just output each little image file onto the screen one by one. As for the rest of the code, I'll see if I can just post it for you guys if you want to peruse it. It'd take way to long for me to just summarize it.

As for grades, it was a bit unfortunate.
The project was a group thing, and there were two other people with me. The thing is, neither of them could program all that well. And by "not all that well" I mean when I told them to create a method that would check to see if to points on an x,y plane were within a certain distance of each other, they were at a total loss, and I somehow had to explain to them how return types, if statements, and for loops work. Hence, I programmed the entire thing myself, and as a result, it took me almost 3 times as long as it should have. When we had to present our projects to the class, this became quite evident, especially how they didn't know what synchronized methods were, much less anything about multi-threading. (Granted, I taught myself everything that I needed to know about multi-theading to make it work the day that I needed to hand in the code...) So we got some serious points off for that.
Past that, it was just stupid things. I don't think I had many points taken off for my supar-retardad programming skills - we had about 4 months with our teacher, the one that he replaced was totally incompetent as a teacher. Furthermore, he told me that it was clear that I knew how to program, and that a lot of the things that I used, namely the multi-threading, fileio, and the way I used textfiles was way beyond what was taught in the class. Unfortunately, I did not include many of the required methods or things. I didn't have any recursion, searching, or sorting. In fact, I think the only required thing that I had was the use of ArrayLists. On top of that there was still a lot of less major things here and there. For example, I didn't realize I could use PNGs with the applet, so my jpegs had big white blocks around them, and I didn't have time to implement half the things I wanted to do: like fire wait, ammunition, better hit detection, fewer glitches and bugs... The sad thing is, if I had another few days, I would've really polished it up and added a butt ton of features.
Anyway, as a result of the afore mentioned facepalm material, I got a solid B on the final. Fortunately, I retained my A in the class, thanks to a bunch of assignments and tests that I got >100% on.
Also, I got a 4 on the AP exam, which was surprising, because I took it in May, giving me only about a month and a half to learn the material and study.
Anyway, I really appreciate the help you guys gave me. Thanks!

Attached is the source code. I forgot where I saved all the other materials; this is what I e-mailed my teacher.
[attachment deleted by Tolwyn]