Search code examples
javamysqlwebservermultiplayer

Multiplayer turn based game architecture questions


I'm working on creating a 2D game for fun to learn some of the ins and outs of multiplayer gaming. The game itself will pit two players' armies against each other in a strategic turn based battle. I am developing it as a standalone desktop client (then maybe a phone app eventually).

I am writing the game in Java and I am not trusting the client, so I am taking security into account. The players will have an personal account with their army lists and stuff that will live on the server as well. Additionally, I plan on using mySQL to store this sort of data on the server.

I'm not really sure how to implement this, however. Do I use something like a webserver? This seems wrong, but I don't know what technologies to use for a Java front end and backend where the client is untrusted. Note that I'm not looking for a debate about the best way to do this, I just need to know the concepts, maybe some example technologies, and maybe a link to a tutorial.

Thanks for any help!


Solution

  • Unless you are planning for this to be a browser game, I don't think that using a webserver would be the best idea.

    Sockets may be the answer you are looking for, with them you could create your own communication protocol that doesn't trust the client.

    Your server will need to use a server socket and accept multiple clients.

    You can also use Swing for the client UI.

    Here is the default java Sockets tutorial.

    For example your protocol could include the following commands: (Client to Server) Move(UnitGroup, Point) - tells the server you want to move a group to a point, the server then performs the calculations to determine what time it will take for the units to arrive and start moving them there.

    (Server to Client) PositionUpdated(UnitGroup, Point) - tells the client that a group moved somewhere and may need to be updated in the display

    If you publish your protocol, players could even make their own clients to view the game as they wish. Your server would keep it fair by only giving the clients the things that they should 'see'.

    I have no idea how this might affect latency though.