Questions about networking and programming language

Started by
2 comments, last by hplus0603 10 years, 6 months ago

I'm building a online, multiplayer, 2d, turn-based, CCG (collectible card game). The game itself is already designed, including artwork, over 600 cards, game board, etc, and now I just have to write the code. I'm providing a little background about my programming experience below.

MY FIRST ATTEMPT

I attempted to build this game many years ago using Java. At the time, I was just doing it as a fun recreational project and it was my first real introduction to object oriented programming. It took me a little while to understand Java since I was teaching myself, but I think I did pretty well, not great, but I was definitely learning. I had over 25,000 lines of code (i know that's not a lot, but it was several hundred hours of coding) and had built a chat room, the deck building gui, and the game board.

At that point, I started to think that I might actually get the game built (eventually) and so I stopped and figured I better learn how to make it multiplayer. That's where I kind of hit a snag. I believe I used TCP(?) and was able to connect directly to my other computer and chat back and forth between the two computers in the chat room, but didn't get much further and never got it working over the internet. I ended up setting the project aside when my father became sick and eventually passed away.

I can't remember, but I think I thought I might have been better off starting with the networking first instead of building the game and then trying to figure out how to get it to talk across a network/internet.

QUESTIONS

The part I'm most concerned about is the networking and having a random player or friend login/play via the internet.

1) Which language would be best for creating an online, multiplayer, 2d, turn-based, PC/Mac, CCG?

2) Would it be easier/better to make it a browser game or stand-alone?

3) I've done a bit or reading and was thinking about using VASSAL, Flash or maybe Unity3D. Are these good choices? I'm definitely leaning towards Flash right now.

4) When starting out, should I get the game built and then work on the networking? Should I start with the networking and then build the game? or both together?

MY EXPERIENCE

I'm 42 years old and have used a few programming languages in the past, including C++, MATLAB and Java. I wasn't that big of a fan of Java at the time and remember a few people asking me why I built it in Java instead of another programming language, like Flash. I don't mind learning a new programming language at all since it will take me some time to relearn them anyways since it's been over 5 years since I've really done any programming.

Advertisement
1) The easiest language is probably one you are already comfortable with. No matter what language you end up using, know that your project will probably require several hundred hours of work. There are several CCG engines out there already, you might also consider launching from one of those. Looks like Vassal might have enough existing material to reduce it to the <100 mark, but still it is a significant chunk of work.

2) Determining "easier" and "better" are both subjective. Without knowing all about you and about your background and about your designs, it would be difficult to tell. I think that if you were using an existing engine that would be the easiest path; but I don't know if that is the better path for you. If your engine supports browser-based games then go for it. I wouldn't particularly like to start with nothing and build html5 + JavaScript game from scratch, especially when existing engines can do heavy lifting for you.

3) Flash can make a 2D game fairly easily, and it has networking components, so that is certainly an option. Unity's model is not an ideal fit but people have made card games using it in the past, and it has networking components, so that is also an option. And the vassal engine supports CCG-style games and has networking components, so that is also a good option. None are bad options, and all of them have the capability to do what you describe. It looks like vassal might be the easiest to get going quickly, so you might prefer it.

4) It is easiest if the networking is put in by design. If you attempt to put together networking first you may discover networking implementation choices make the game implementation difficult, and if you put together the game and backfill the networking tasks you may discover implementation choices that make networking difficult. It is better (but more mental work) to do multiplayer and networked play interleaved as tasks as you grow your software.


My guess is that Vassal would be the better path of those mentioned because it is an engine designed to do exactly what you described, and has already been used by other people to do it, and there are tutorials and examples to do what you want. That means less work and learning and experimenting for you, which is generally a good thing.

Thanks frob!!!

I was leaning towards Flash, but what you said about Vassal makes a lot of sense, so I'm going to spend the next couple days or so experimenting with both Flash and Vassal and see which one I feel more comfortable with. Based on what you said, I think you might be right about Vassal being easier and require less experimenting.

Thanks again for your input and quick response!!!

1) Which language would be best for creating an online, multiplayer, 2d, turn-based, PC/Mac, CCG?


Whatever server-side language you are most comfortable with. If you mainly know Java and C++, I would probably choose Java for that.
One alternative is node.js with JavaScript, because it makes for a very efficient start, and sharing code with the web browser for game logic, if needed.

2) Would it be easier/better to make it a browser game or stand-alone?


If you are more comfortable with HTML/JavaScript, then a web version is easier. If you are more comfortable with Qt or MFC or whatever desktop application framework, then that version would be easier.
Personally, I'd probably choose a web version, because it makes your market possibly a lot bigger.

3) I've done a bit or reading and was thinking about using VASSAL, Flash or maybe Unity3D. Are these good choices? I'm definitely leaning towards Flash right now.


If you want to be on the desktop, those are bad choices. Unity3D is a bad choice for 2D GUI-heavy games in general, because its focus is not 2D GUIs.
If you want to be in a browser, use HTML5 + JavaScript, with libraries like jQuery and Underscore.
Flash is being dropped like a hot potato. iOS devices have not supported it for a long time; other browser vendors are stopping support by default because of security concerns.

4) When starting out, should I get the game built and then work on the networking? Should I start with the networking and then build the game? or both together?


If your game is not built with networking baked in from the beginning, you will very likely have to re-build the game when you add networking.
Given that it's turn-based, two-player, and possibly browser-based, I would build the back-end first as a set of HTTP services. You can then "play" the game by posting ugly forms to the back end. Once that playing works, you can put a nice front-end on those services using whatever toolkit you want, probably starting with HTML5 + JavaScript.

For a hobby scale game, you can use something like socket.io (native to Node.js) for telling players that "it's their turn" so they don't have to poll through HTTP all the time.
enum Bool { True, False, FileNotFound };

This topic is closed to new replies.

Advertisement