From the time on when I first got my hands on networking in general, Ethernet and especially the Java Net API I was really fascinated by the fact that this technology connects devices and allows for a hughe pile of use cases. My first experience with networking and »social-networking« was the good old
net send command on a Windows 2000 network. It was a huge fun to hound my classmates.
When I got introduced to Java I really wanted to create my own network protocol like SMTP or POP3 and send messages over the network. The only missing thing was a rather interesting scenario. I eventually selected the famous SameGame and thought it would be a nice experiment to create a variant which consists of a speed run between participants which can thus compete against each other.
The architecture of Neptune is fairly simple: a server allows users to register or login into. The connected clients can then participate at a game. But only between two and four clients (players) can play a game. As soon as all clients are ready the game starts. The game is finished if no further draw is possible. The player with the highest point count wins - every removed set of blocks yields a specific amount of points (see
com.neptune.model.DefaultGameCounter class for details).
During development of Neptune I spend special attention to the architectural design of the application. I used a modified MVC design pattern along with interfaces and abstract classes to organize the code in a neat and orderly way. The source code repository of Neptune provides also the protocol specification.
Recapitulating I can say that I learned a lot about structuring source code back then (2009). It was a fun project but the most satisfying part was the fact that my computer science teacher dedicated a lesson to this project and all my classmates »tested« Neptune. That was a fun lesson for everyone.