BU-CS673/bubolo — pull request #313 by ChristopherCanfield (2014-04-08 18:25:39+00:00)
Title: Canfield-Staging -> production

This set of commits primarily relates to the network:
- >2 players can now connect to the game
- Clients no longer start instantly: they now wait for a start game command from the server
- The server no longer blocks while waiting for players to join, which allows GUI events to be accepted and processed
- Multiplayer games now start when the server player calls the Network.startGame method. In the NetServerTestApplication, this is called when the player clicks a button in a popup box.
- Dead reckoning implemented for tanks controlled by the network (i.e., movement interpolation)
- The game map is synchronized over the network at game start, which is necessary to ensure that all UUIDs match. This process is instantaneous over LAN, since only a few bytes are sent per map square, and should be nearly instantaneous over the Internet. A side-effect of this is that clients no longer require the map to be installed locally.
- Added 11 unit tests, and fixed integration tests that broke due to interface changes

Graphics related:
- Bullets now cause a small visual-only explosion when they reach the end of their range, like in the original Bolo. This is an example of how a sprite can launch another sprite, as well as how a sprite can exist with no underlying entity. This currently uses the 3-frame explosion animation from spritelib.

Other:
- AbstractGameApplication abstract class implemented. Integration tests and the game can inherit from this to reduce the amount of boilerplate code that must be written.

The Start Game popup in the NetServerTestApplication has a tendency to go behind the game window, even though it is set to always be on top. This is because Swing doesn't know about our LWJGL window. So if you can't find the Start Game dialog box when running the Server integration test, please check behind the window.

Resolves or partially resolves #265, #266, #250, #243