17
\$\begingroup\$

I'm coming to the end of my first year of CS which has been primarily a Java based course. I'd like to get my feet wet with some game development but I'm not sure where to start.

Some people have suggested I start with game maker which has a C-styled scripting language(which should be easy to pick up) as it is probably the simplest and allows me to focus mainly on the game design and how the whole game fits together.

I see a lot people recommended XNA, as it has good abstraction of opengl and directX through its APIs. I also hear C# is very similar to Java.

I have also considered game programming in Java since I am quite comfortable with it and have been doing extra reading on multi-threading and the 2d graphics APIs.

Finally, a friend has recently shown me pygame which also sounds very good although I don't know all that much about it.

I don't know if C++ is a good starting point, a lot of the posts I've seen for beginner game devs don't recommend it for a first game project.

I'd appreciate any input, especially from those who got into game dev from a Java background

\$\endgroup\$
2
  • 5
    \$\begingroup\$ C++ is hard, damn hard, but it is easier in the long run if you try and wrap your mind around it before Java really sets it. It's definitely harder trying to learn C++ from a Java background than to learn Java from a C++ background. joelonsoftware.com/articles/ThePerilsofJavaSchools.html \$\endgroup\$ Oct 22, 2010 at 20:09
  • 1
    \$\begingroup\$ I'd have died trying to learn C++ after starting with Java, I started with older style C++ and then learned Java. If you're worried about making the jump to pointers, I recommend just learning straight C and Unix programming. It puts you in a whole new mindset so you're less likely to apply inapplicable Java concepts. \$\endgroup\$ Jun 8, 2011 at 4:23

14 Answers 14

14
\$\begingroup\$

There are lots of good choices. (I teach CS1 and CS2, as well as game programming.) First, of course, learn to think like a computer scientist. Don't get too tied up in the language, because the concepts truly are universal.

Java is a pretty good language, but building a game in Java is a bit tedious. There are some interesting engines out there that make the process a bit easier. Unfortunately, it can be kind of painful to attach a game engine to your editing tool.

I like the FANG engine (sadly I can't post hyperlinks yet, so look it up on Google.) One interesting part of this project is the online editor. This means you can start right away without having to mess with eclipse settings.

I'm really not a fan of Game Maker. The GUI is fine for people who don't want to learn how to program, and it's a decent (but not great) prototyping tool. However, there are two things about it I don't like. First, it's commercial. That isn't a bad thing, but if there are free open-source alternatives that are just as good (and there are) maybe you should look into them first. The bigger problem with Game Maker is the scripting language. Eventually you're going to outgrow the GUI, and you'll want to actually start writing code. The Scripting language in GM is pretty backwards-thinking. Since you're a CS major, you are (I hope) interested in code re-use, elegance, clarity, efficiency, and modularity. The GM language will disappoint you.

I love Python and Pygame. (In fact, I wrote a book about them. See all my notes and online videos on my site if you want. You're welcome to those resources whether you have the book or not.) Python is a nice elegant language that isn't too difficult to learn (especially if you already know how to program.) Pygame is a wrapper on the popular SDL 2D engine. In fact, I've added a second wrapper to pygame to make it about as easy to work with as Flash.

Speaking of Flash, I don't think that's worth it. (I know you didn't ask) It's a good platform, but the cost and uncertainty about how it will fare on mobile devices means it may not be that great a learning tool. (I wrote a book about game dev in Flash, too, but I don't teach Flash any more.)

Here's some other great things to try. Get a copy of scratch from MIT: scratch.mit.edu It's made for kids, but don't let that put you off. It is an absolutely incredible game and animation tool. The programming uses tiles, so it's easy to get started with. You'll be utterly amazed at what you can do with it.

You might also try Alice from Carnegie Melon www.alice.org The latest (3rd) edition is actually an extension to Java, which uses Sims2 Models.

Both Scratch and Alice are free.

One more great tool to look into is Blender www.blender.org

It's a 3D modeling tool, but many people don't know it's also a complete game engine with a drag-and-drop programming interface. Once you've outgrown the tiles, it has Python support built in.

Now I'm quite interested in HTML5 (Which is barely HTML - It's really HTML, CSS, and JavaScript.) It isn't quite there as a game development environment, but I believe it will be a big player. My next book will be on game development in HTML5.

Best of luck to you, and let me know if you have more questions.

\$\endgroup\$
6
  • \$\begingroup\$ Thanks for your input, I'm checking your site out as we speak. I'm sure it will be invaluable having someone with your experience contributing here \$\endgroup\$
    – kontrarian
    Oct 22, 2010 at 17:01
  • \$\begingroup\$ Pointer handling isn't universal =( curse my Java up bringing. \$\endgroup\$ Oct 22, 2010 at 20:11
  • \$\begingroup\$ I would like to know why you think building a game in Java is tedious. Also, it seems like you are suggesting Python is less tedious. With so many great Java game centric frameworks and libraries out there it seems like a very bold statement to make. \$\endgroup\$
    – zfedoran
    Oct 22, 2010 at 21:33
  • 1
    \$\begingroup\$ For a beginning programmer, everything in Java can be more tedious. Compare something like printf. In python it's part of the print statement: print "%s, your score is %d" % (student, score). In php, you have to cast all primitives to wrapper classes, cast those to objects, and build an anonymous object array. I like Java. (I've taught it for years, and wrote a book about it.) However, if the goal is to get somebody going in game programming, I want a language that gets out of the way as much as possible. \$\endgroup\$
    – Two pi
    Oct 22, 2010 at 22:31
  • \$\begingroup\$ Thank you for taking the time to comment. It has helped me understand where you are coming from. However, I am not quite sold on python being a better language for students just yet, similar to how the faculty at my University has been questioning their recent change to Python for first year students. Perhaps, the students are simply stuck on new issues. It used to be students making everything "public static", now they have a hard time understanding the difference between types. \$\endgroup\$
    – zfedoran
    Oct 23, 2010 at 1:31
5
\$\begingroup\$

It depends on what your goal is, and what part of game development you want to get into.

Are you more interested in the actual nuts and bolts of how game engines work and building something from the ground up or do you want to get into the game parts of development as quickly as possible.

Nuts and bolts: XNA is a nice way to dip your toes into that arena. The framework does a lot for you, but you can slowly replace each piece with your own code as you become more comfortable with C#. Learning C# is good for the future game development positions as tools are often built with C#.

Gameplay programing: Unity is a good option here. Free, and lets you code in multiple languages including JavaScript and C#. You'll be able to get things up and running quickly which is a nice motivation boost. Plus you can transition to another language and even mix languages to help you practice broadening your understanding.

The nice bit is that they are both free to play around with and can be connected to a variety of hardware for at pretty minimal cost.

\$\endgroup\$
0
4
\$\begingroup\$

Could always do some java based games, nothing wrong with those (http://zetcode.com/tutorials/javagamestutorial/)

XNA and AS3 are very close, and can create games as complicated or as simple as desired. (though same holds true with java)

One thing to remember is always practice, and just play around with the code.

\$\endgroup\$
3
\$\begingroup\$

Java Monkey Engine

If you are most comfortable with Java, you could use Java Monkey Engine for a framework to use while making games. It also has a decent amount of documentation/tutorials including instructions for integrating with Netbeans and Eclipse.

\$\endgroup\$
1
  • \$\begingroup\$ I must say that JMonkeyEngine does look good. I'll definitely check it out. Thanks for you input \$\endgroup\$
    – kontrarian
    Oct 22, 2010 at 17:03
2
\$\begingroup\$

Unity

I would say try Unity. They have a free version and you can get your feet wet in few hours to get the basic idea by following two tutorials provided by Unity:

The other cool thing about unity is that you can use JavaScript as a scripting language and you can publish your game on Windows, MacOS, Web, iPhone and now with the version 3 on Android devices as well.

Also they are using StackExchange engine for the Unity Answers and they have wonderful community for all your Unity related questions.

\$\endgroup\$
1
\$\begingroup\$

Any of those would be a good start, speaking as a dev whose initial CS education was in Java.

C# is very close to Java (I sometimes joke that it's limited-platform Java with better libraries), so XNA might be a good choice. Minecraft is developed in Java with the lwjgl game library, so if you want to stick with Java, that's a good method. Of course, 3D development is kind of complicated; depending on your knowledge, experience, and perseverance, you might want to wait on 3D (or even 2D in a 3D-based system) until you get more education under your belt.

For 2D solutions: Game Maker is very simple, and has been used to make some great games. You should be able to pick up its scripting language quite easily, but it might be too simple for someone with a year of Java experience. I develop in Flash using pure AS3 (tutorial), which is close enough to Java for your skills to easily translate.

\$\endgroup\$
1
\$\begingroup\$

I would strongly recommend going with XNA. It's a pretty capable and well-supported platform with a growing community. XNA is really starting to find its "place" in the ecosystem now that the framework is shipping on more platforms than ever (including Windows Phone 7). More importantly, however, using XNA will force you to learn C# and general .NET development. It would behoove you to gain experience with this platform regardless of whether you decide to go into game development, as .NET development is growing and has a very healthy job market. Java, on the other hand, has been slowly dying for some time now, and recent events have only served to hasten its demise. If your CS program, like the one I completed, is heavily Java-centric, then it would serve you well to learn C#/.NET on your own time.

Even if Java does live on, and you decide to pursue a career in Java development, you will likely end up having to integrate with .NET systems anyway. So, however things turn out, the experience would only help you in the long run.

\$\endgroup\$
2
  • \$\begingroup\$ indeed.com/jobtrends?q=java&l= and indeed.com/jobtrends?q=.net&l= are pretty representative of the market demand for both. Looks like Java is the one actually growing. \$\endgroup\$ Oct 22, 2010 at 20:07
  • \$\begingroup\$ I hadn't considered the influx of Java development being brought about by the success of the Android platform. That probably has a lot to do with the jump in related job openings in late 2008 and early 2009. It will be interesting to see how WP7 and the availability of MonoTouch for iOS and MonoDroid for Android impact Java's mobile presence. \$\endgroup\$ Oct 23, 2010 at 0:18
1
\$\begingroup\$

If you're interested in game design, why not start with making a card game, or something that requires no programming at all? That will allow you to focus on the design and mechanics of the game rather than fighting your way through APIs, languages and frameworks you're not familiar with.

\$\endgroup\$
0
\$\begingroup\$

A non programming related advice from me:

Create a neat project and show it off to your professors.

That's how I got summer-jobs as a programmer after the first and second year at school.

\$\endgroup\$
1
  • \$\begingroup\$ This may be useful, but it doesn't really tackle the language/API crisis the OP is coming to. \$\endgroup\$ Oct 22, 2010 at 15:04
0
\$\begingroup\$

If you're just looking for game development, why learn another language at the same time? I would stick with Java, unless you want to learn a new language.

Main options for Java I know about are jMonkeyEngine, which is a 3D graphics engine and generally considered pretty good.

And there's jOGL, which is a Java wrapper over OpenGL. This is naturally a lot lower level.

If you're just starting out and want to work with the logic more than dealing with buffers and shader binding and the like, go with jMonkeyEngine. If you want to get deep in to start, go with jOGL.

If you want to learn a new language, out of C# and Python I would probably say C#. The syntax is very similar to Java, and XNA and SlimDX are very good for graphics. XNA being higher level, and having done some things for you. However, this does come with a Windows-only restriction, without Mono.

Python is a very easy language to get (took me about a week at max with little attention from a book, coming from a year of C++). Pygame is a wrapper around the SDL libraries from C, so probably doesn't have the same amount of functionality as XNA.

\$\endgroup\$
0
\$\begingroup\$

You might also enjoy using http://Processing.org. It is a great environment for learning graphics programming. While not strictly a game-dev tool it has a lot to offer. It's language is an extension/simplification of java and it will be quick to learn.

\$\endgroup\$
0
\$\begingroup\$

Another vote for Unity. You will have plenty of time in your next few years of CS study to engage C++ and other languages. If your goal is to develop a game, getting tied up in what is essentially the work of developing an engine is going to take too much time. If you want to be an engine designer, definitely come back and try lower level implementation.

The Unity engine will allow you to abstract away most of the details so you can focus on gameplay programming. The community on the forums and the Stack Exchange based Unity Answers are incredibly helpful. You can program in either Javascript or C#. Coming from Java, I started with Javascript because a lot of the tutorials were written for it, but switched to C# (which was quite an easy switch).

I think XNA and Pygame could also be good (since they abstract some of the more tedious stuff away), but I don't have experience with them.

Finally, don't aim too big with your first game. It can be very easy to underestimate how time consuming it is to implement features into a game. Start with a core game mechanic that allows you to get the game in a playable state quickly. Then you can start adding other elements.

Have fun!

\$\endgroup\$
0
\$\begingroup\$

XNA is a great solution if you're coming off Java. C# will look and read almost IDENTICALLY to java for you, so you'll be able to jump in really fast without learning new syntax. The XNA framework provides tons of good APIs to work with, and there are lots of free "microsoft permissive licence" open code to get you started on some projects.

I wouldn't recommend you use Java, most of the graphics APIs are terrible, there's not a ton of 3d support, and generally Java just runs slow; not a big deal for most java apps, but videogames need LOTS of performance.

C++ is the way to make videogames, pretty much period. However, going from java -> C++ is going to be pretty jarring. Not to mention that most low-level hardcore graphics programming is really C style, not C++, so you're going to do a bunch of pointer arithmetic to try to squeeze out more performance. It can be interesting, but time consuming. It can also take alot to get you started.

There are lots of good game engines out there like Ogre, but then you have to spend tons of time learning how to do things with it first, it can feel overly complicated.

Be careful, as awesome as many of your gaming ideas may be, remember that video games are expensive, take a long development time, and have large development teams.

If you want to make a game and be the only person who works on it, you're almost going to HAVE to make it a 2D game (though you should start with 2D anyways) and you're going to have to start REALLY, REALLY simple.

Almost anything you can imagine that would be fun is likely too ambitious for right now.

My advice: Get the free visual studio 2010 express if you don't have it. Download the XNA game studio, and the .net framework 4. Download an XNA demo. Run the demo, then look through the code and see what does what. Try reading some documentation on how XNA does 2D games.

THEN, Pick your favorite, old school, super easy game. Pac-man? Pong? Asteroids? Space Invaders? Mario? Pick something STUPID, STUPID easy. Then just remake the game exactly as it was. You've got enough to worry about with programming and learning a new API that you DO NOT need to bother with game design; it will just distract you.

Then, once you've got your mario clone going or whatever you made, you can start to experiment with gameplay and try adding new things.

Start small, baby steps, and it'll be much more fun and you'll learn alot more.

Try to jump into modifying the Quake3 source code in C++ to make a game and you're going to get really frustrated, and even if you make it work, you're not going to learn alot from doing it.

JUST HAVE FUN :D

\$\endgroup\$
0
\$\begingroup\$

Flash

Flash's AS3 is a fantastic language for wrapping your head around important OOP concepts without having to worry about memory management and writing header files. It's also pretty much a complete 2D game engine, with a display tree, event system, and all kinds of other handy features.

There is a HUGE community of Flash game developers out there, and contrary to popular belief, you can develop Flash games using open source tools. If you're on Windows, I'd recommend FlashDevelop.

I would argue that Flash is even more cross platform friendly than Java or really any other technology except maybe Unity. 99% of people can view Flash stuff in their desktop browser, so it's easy to share your creations with the world. Most smartphones are slowly getting Flash support, and for iOS, the one platform that won't support Flash in-browser, you can create apps with Flash CS5 (although that does have a cost).

I think it'd be a shame for you to have to struggle with something more complex like C++ or even C# when you could start learning the basics of game creation right now with AS3. Once you understand AS3, it'll be easy to switch to other languages later. In my own case, I was a Flash developer, but I learned how to program with Objective-C and managed to make a hit iPhone game. Do yourself a favor and visit http://www.flashgamedojo.com/ - I don't think you'll be disappointed!

Unity

Unity has a lot of the same benefits of Flash, but in 3D.

With Unity, you can program in C# or in UnityScript (which is javascript-y). It's not open source, but it is free. It's very well supported and there's a great community. The problem with developing 3D games is that for most games you'll need lots of art and assets. This can also be an issue with 2D games, but generally, 3D art takes a lot longer and it's a lot harder to make "programmer art".

A note on open source

There is nothing wrong with using open source software, but you're shortchanging yourself if you're only using it because it's open source. Choose the best language and tools that'll help you learn the fastest with the least friction. Along the same lines, the mentality of "learn the hardest thing first" (ie. C++) is crazy. What you really should be learning is logic, not syntax, so learn whichever language has the least baggage and barriers to entry. In my opinion, that's AS3.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged .