Developing a board game

Started by
11 comments, last by Eyal Solnik 8 years, 8 months ago

I would like to create a board game for mobile devices.

I have no knowledge whatsoever on game development and what platform as well as engine is the best for these kind of things especially board games.

I don't have much details about the game itself and because of this I don't really know what engine fits the best to the game, I don't even know whether I want to make it 2D or 3D but I prefer 3D.

My programming knowledge is very rich.

I know the following languages: C#, JavaScript/TypeScript, Lua, Java, C++.

My comfort zone is C# because it was the language I used most for the last 12 years but my background goes back to Pascal and C++ so I can pick on any language and platform.

I want to start developing the game for Android and then gradually support more platforms/devices.

My questions are as follow:

  1. What is the best way to prototype games? what acceptable methods are used? what are your own methods to do that?
  2. I'm not a graphic designer or anything close so how do I create the graphic assets of the game like the board and all the different objects? is there a way to make this process "easier" for a programmer?
  3. I know about Unity but for a single developer that just starting is it a good choice?
  4. What are the benefits of using C++ in short-run and long-run? are there any challenges? my C++ is not that great but I definitely look for a fun project to improve it and this might be a good one to do it. :)
Advertisement

Hi there, good idea, just wub.png board games!
Will try to answer all of your questions, here it goes:

What is the best way to prototype games? what acceptable methods are used? what are your own methods to do that?

Usually I use my own tool-set (C# + XNA/Monogame), and of course do it in desktop environment, cause that is the most comfortable for me. I advise to choose a technology for prototyping in which you can crank out a simple game in a really really short time period, be it GameMaker, Unity or Construct2...
By short I mean really really short, in afternoon something functioning, in a few of afternoons, something playable representative of the core mechanic. We are talking about trying out the game idea, if takes much more, than something smells fishy with that!
In your case tough, I would advice to try a more traditional approach. A board game can be fully tested out by you, your friends and your family by using a pen and some paper, and I guess in this particular genre no technology beats those wink.png.

I'm not a graphic designer or anything close so how do I create the graphic assets of the game like the board and all the different objects? is there a way to make this process "easier" for a programmer?

You could consider buying assets from an asset store, or paying for an artist if you would like to have custom made high quality graphics. If you get some decent quality 3D models for example you can use them as the objects in the game. If it is a 2D game you can still render those 3D assets as sprites using a 3D package. Possibilities are endless here and money "speeds it up" smile.png. If money is something you would not like to spend on the project, you can still consider looking for open assets. Of course the quality and the variety you find on these sites are sub-par compared to what an artist creates for a contract...
The last solution is, that you yourself try to build the assets. Download a graphics package 3D or 2D and let your inner artist fly cool.png, but be prepared, this route takes an awful lot of time!

I know about Unity but for a single developer that just starting is it a good choice?

Yes, it is a good choice. The base package is free as I know, so you can go right now and try it out. It is a high level engine with high level tooling, so it is somewhat intended to people with a more "designer" mindset, but C# scripting is nice and you can build games in it in no time!
Also I've have to say, that if you prefer C# and one day you would like to output a game to multiple platforms, there aren't many options for that other than Unity, so it is a safe bet...
Maybe Xamarin + Monogame, but I think Unity is much easier in this regard.

What are the benefits of using C++ in short-run and long-run? are there any challenges? my C++ is not that great but I definitely look for a fun project to improve it and this might be a good one to do it.

I have to mention, that I'm in a similar situation like you in technology choice. I worked professionally in an armada of languages: C, C++, Lua, Perl, C#, Java, you name it, and I prefer so far C# as a language. But as a cross-platform solution compared to C/C++ it is a joke. So C/C++ is better in this, especially in the long-run, although Unity helps out C# in that a little but you become a bit tech dependent with it. Another thing many mention as the big power of C/C++ is control and performance. This is true to some extent, but as a hobbyist working alone I think, this is not a BIG win, maybe a long-run win if you are ready to write a LOT OF TECH. Some of my colleagues always mention a short-run advantage which is setup-time. If you have a unix-like system, a terminal + gcc and make you are good-to-go. No big project files to start, no big IDE-s required.
Personally I dislike working with C++ mostly due to it's complexity, I use it daily at my day-job, but for projects which I do for fun I usually avoid it, but as I mentioned it indeed has many advantages, so if you are planning for longer projects and ready for bigger development times especially at first, you should still consider it. For it I can suggest a really helpful cross-platform game.dev library: SDL2

Br, good luck!

Blog | Overburdened | KREEP | Memorynth | @blindmessiah777 Magic Item Tech+30% Enhanced GameDev

I forget one thing you could check out for prototyping:
Vassal

It is a game engine for building digital variants of board games. Actually I can not comment much on it, I only tried some games running on it, but the tech seems interesting, maybe you could take a look whether it helps you in prototyping!

Blog | Overburdened | KREEP | Memorynth | @blindmessiah777 Magic Item Tech+30% Enhanced GameDev

I know there are several good card game engines for PC, but don't know of any that are good on Android.


Google suggest Wagic and GCCG, if you're looking for existing engines on the platform that can handle cards, decks, UI, and graphics. No idea about their support on the platforms, but they seem to show up on search terms.

If you're looking to do it all yourself, probably cocos2d-x or libGDX could help speed you down the path for free, so could tools like GameMaker Studio or GameSalad for some money, but with any of those there will be a lot of blanks to fill in, they are not already oriented toward card games.

Wow! guys thank you so much for sharing, I'll try some of the things here and reply back when I'll have more questions to ask. ;)

BTW, I read about Cocos, can anyone share an opinion about that?

I join @Spidi with everything he has said.

In addition
-> If you are considering doing your own assets there are some nice free tools
- for 2D texturing: GIMP, Paint.net
- for 3D models: Blender


Also forget C++ on Android. It wont work, it never payed out, especially for hobby programmers.
Too many different devices from too many different manfuacturers. At the end you are going to have an application which runs on <1% of all devices as long as you don't have access to at least all currently popular android devices on the market.

If you like using C# I definitly would go for Unity (Java/C# scripting language) with the additional advantage of easy portability to iOS and with a little bit more work to Desktop as well.
It might be a little bit rough to use a game engine if you never had any gamedev experiences before without running into dead ends or problems because of missing knowledge how things work but I guess you are experienced enough with your "rich" programming knowledge that you know what you are doing.

Then there is another option: Java. Java is basically C# and vice versa, I don't get why people even try to differ but the important bit is that Android is a Java driven platform and the Android/Google developers did a lot of work making it so.
Java code is going to run definitly on (mostly) all Android devices and you nearly won't get around using Java at least a few times because all OS-interfaces are Java written so you have to at least bind them to your [other language here] code somehow.
For Java there is the 2D engine "AndEngine" which has everything pre-written and implemented you need to write a game.
Problem: The native Android code doesn't run on iOS if you choose to port later you have to rewrite everything.

Conclusions (only for Android):
>> Use Java if you want to develop a
- 2D game with or without the help of an engine
- 3D game without the help of a powerful engine like Unity
>> Use Unity if you want to
- develop a 3D game with the help of a powerful game engine
- want to port to iOS as well
>> Never ever even think about using C++, worst option ever.


- for 2D texturing: GIMP, Paint.net
- for 3D models: Blender

Yeah I know about these but I don't think that I can produce something useful, I'm not that creative when it comes down to graphics as opposed to programming. :)


Also forget C++ on Android. It wont work, it never payed out, especially for hobby programmers.
Too many different devices from too many different manfuacturers. At the end you are going to have an application which runs on <1% of all devices as long as you don't have access to at least all currently popular android devices on the market.
Can you be more specific about it? I'm certainly not a hobbyist, I'm a CS student.


If you like using C# I definitly would go for Unity (Java/C# scripting language) with the additional advantage of easy portability to iOS and with a little bit more work to Desktop as well.
It might be a little bit rough to use a game engine if you never had any gamedev experiences before without running into dead ends or problems because of missing knowledge how things work but I guess you are experienced enough with your "rich" programming knowledge that you know what you are doing.
Lack of knowledge is not a problem, I think I can handle most "problems" and if not I can always ask here. :)

My rich programming experience comes mostly from writing desktop and web applications on various platforms and many languages over many years of development, I don't know whether it's going to help me directly with designing and implementing the game but it's something.


Then there is another option: Java. Java is basically C# and vice versa, I don't get why people even try to differ but the important bit is that Android is a Java driven platform and the Android/Google developers did a lot of work making it so.
Well, I've been developing enough on both languages and in my opinion to say that they are basically the same is very wrong on many levels, yes they share some similarities in symtax but the way they work is different, the envrionment is different, their language philosophy is very different so I dunno why they "basically" the same but each person entitled to his own opinion. :)

Just to give an analogy here just because English uses Latin letters doesn't mean it's Latin.


Java code is going to run definitly on (mostly) all Android devices and you nearly won't get around using Java at least a few times because all OS-interfaces are Java written so you have to at least bind them to your [other language here] code somehow.
For Java there is the 2D engine "AndEngine" which has everything pre-written and implemented you need to write a game.
Problem: The native Android code doesn't run on iOS if you choose to port later you have to rewrite everything.
Can't I use C++ to write the core of the game and then use Java for the UI? does this work? are there any challenges with this approach on mobile or/and game development?


>> Never ever even think about using C++, worst option ever.
I think you're overreacting here, aren't you? you keep on saying that it's worst option, I get it but is it really that bad?

Bear in mind that as a student I don't have money to spend on Unity license and fancy tech but I have time that I can definitely invest! ;)

Unity is free for non-commercial but what if I want to go farther with this project? I'd have to pay them and lock myself to Unity.

Going back to C++ can be fun! so it's not really the worst option for me.


Can't I use C++ to write the core of the game and then use Java for the UI? does this work? are there any challenges with this approach on mobile or/and game development?

I've been working on an application which was ported to android this way. Since it had a huge C++ codebase (around/close-to 1M) at the time when android started to roll. Around 50k java code had to be written to connect it to the respective android api-s, but as you can guess it was a kind of complicated app using many many OS + device features (been working on Windows CE and iOS before mostly). So this is perfectly doable and I think this is the only way for the "most cross-platform" solution besides unity for developing games for example.

The downside: you can expect it to be a pretty tough job. Using more and more of your pre-exiting architecture will require more and more dirty hacks on java/android side, and working in two languages instead of one for some tasks requires serious juggling! Although as mentioned before some frameworks and engines take of the heavy lifting from your shoulder providing a similar or the same API on all platforms like Unity or SDL (they already have done the hacking part instead of you biggrin.png).
We have tried over the years minimising the java code-base, and that is also kind of possible. Google ships after a while all the api-s and classes in the NDK so you can use most of the OS/Device features from C/C++ too, so it is possible, but still not an easy route going full C/C++. Based on my experience, for going native you are going to have to invest much more energy into tech development! More code, more complex implementations, more debugging and usually harder maintainability, and this is not only android specific thing, but there it applies especially...

Blog | Overburdened | KREEP | Memorynth | @blindmessiah777 Magic Item Tech+30% Enhanced GameDev

Thank you for your valuable input mate. ;)

Well, I've been developing enough on both languages and in my opinion to say that they are basically the same is very wrong on many levels, yes they share some similarities in symtax but the way they work is different, the envrionment is different, their language philosophy is very different so I dunno why they "basically" the same but each person entitled to his own opinion. smile.png



Just to give an analogy here just because English uses Latin letters doesn't mean it's Latin.


Really? Okay, I guess this is really a matter of the viewpoint.
It doesn't really hits the topic now but:
I mean both are braced languages, pure object orientated, have the same syntax and most importantly even architecture, are class based and type safe both use a VM and a GC. Sure there are technical differences under the hood but (besides pointers in C#) I personally see no difference when developing in C# or in Java. I mean it is not just the same letters, it is more like both speak the same language but you speak to another person biggrin.png
Differences: Java is cross platform (besides iOS) <-> C# has access to all other .Net languages
When I was asked a year ago to use C# now instead of Java for the project (mostly because the new bureau doesn't had Eclipse back then but only VisualStudio) I just took the C# documentation and VisualStudio and began using C# without even learning me in as much as I did when I switched from C++ to Java but I can see that it is more difficult to switch from C# to Java as Java is a little bit more limited in its overall architectural design and it depends how specific you get.
For me as a developer it never made a difference. smile.png


>>> From the Unity FAQ <<<
Can I make commercial games/content with Unity Personal Edition?
Yes, if you meet the requirements to use Unity Personal Edition, mainly, that you did not earn/receive more than $100,000 in revenue/funding in the last fiscal year. Please refer to our Software License Agreement for further information.
https://unity3d.com/unity/faq


think you're overreacting here, aren't you? you keep on saying that it's worst option, I get it but is it really that bad?

I personally use C++ often for plain algorithms which mostly do not exceed the use of operators and bind those functions to my language of use which works totally fine. The reason for that is mostly RAM because RAM is very limited on Android and Java is RAM-heavy.
However there are some problems involved, it starts with getting into C++ development in the first place (Note: I haven't tested the new VisualStudio for Android development yet!) because you can't just start writing an app in C++ like you are used to on any other OS.
It starts with setting up an IDE.
> With Java you download the AndroidStudio package, install it and you are ready to go.
> AndroidStudio doesn't support C++ (/the Android NDK) so you have to download a capable Java IDE (you are going to need Java), the Java Dev Kit, the Android SDK and the Android NDK and install them manually. The Android NDK is not really supported by Google and setting the latter one up gets a bit frustrating

Before downloading the NDK, you should understand that the NDK will not benefit most apps. As a developer, you need to balance its benefits against its drawbacks. Notably, using native code on Android generally does not result in a noticable performance improvement, but it always increases your app complexity. In general, you should only use the NDK if it is essential to your app—never because you simply prefer to program in C/C++. When examining whether or not you should develop in native code, think about your requirements and see if the Android framework APIs provide the functionality that you need.

https://developer.android.com/tools/sdk/ndk/index.html
Which also explains why it is the very last point on the Android website just one point above deprecated methods.
Then the OS interfaces (not meant as Java/C# interfaces) are all written in Java. To write an app in C++ you need to either use the native platform OS-interfaces which are more limited in functionality and sometimes a little bit more difficult to use (mostly a C++ thing) then their Java counterparts or bind the Java files to C++ manually. Which is in generell more work because Android doesn't give you a lot of libraries and when using third party libraries you always have to check they are in no way platform dependent or you can forget it or that they work at all for the wierdest reasons you have ever seen.
And let's not forget that some manufacturers thought it would be a good idea to leave out some all-day basic functions. Remember that in the Android market there are a lot of cheap-devices with negligible support by the manfuacturer which will always cause trouble while on the iOS market there is just Apple and just a few different devices.

When thinking about this topic I remember an example in my office two weeks ago when one of the coworkers asked us for help with his bricked device (he used C++ with cocos2D-X). For some reason the phone started with a full RAM and crashed immeadiatly with a fatal error. I don't know how this is even possible, I mean the RAM should clear when it isn't powered anymore... I can only assume the manfuacturer used NVRAM in his phone?, seriously on the Android market a lot of terrible stuff is happening so I see no reason why they wouldn't.

That is why I consider C++ as a terrible language for Android development. It works and it can be done. Using engines like Unity or Cocos2D-X is your best bet then.

Here are some more perspectives about this topic Gamedev.net - Can you write mobile games in C++?

This topic is closed to new replies.

Advertisement