Getting Started with Game Development?
Knight2K writes "Recent articles about casual gaming have given me the itch to try my hand at writing some games. I haven't written any since my college projects, and they never followed any formal game design practice or patterns (unless it was unconsciously). I'd like to start just by writing simple board games and card games that my family liked to play that have no digital counterparts as far as I know. Eventually I might want to branch out and do 3D work. I mostly work in Java right now, but I'd re-learn C++, if needed. My question: what books would you recommend to a beginning game developer? Good introductions to game theory would be welcome, but also language or platform-specific suggestions are useful as well: OpenGL, Symbian, C++, Java, J2ME, etc."
Well, this isn't a book, but just as good. The Game Programming Wiki is a great resource for game programming in several major languages. There's also a very active message board that is extremely helpful.
My #1 suggestion would to get yourself a copy of Flass MX or something simular.
You number one roadblock will be graphics.
Flash is an excellent way to quickly prototype game ideas. And the more you use it the faster you can prototype ideas.
I think game design NEEDS to be fluid. You need to get something working play it, find out whats fun about it and whats not fun. Determine what works and doesn't work.
Prototype everything first. Then when you have a solid design of the game play and mechanics, you can start something a bit more serious.
And more than likely your prototypes will be acceptable flash versions, and you might actually have a finished product in Flash.
Now I've seen Everything
Possibly the best way to get started with OpenGL is the NeHe Tutorials. The articles are often written in a C or C++ style but most of them have been ported to tons of other languages and platforms. Check the ends of the articles for links to source for whatever platform you want to work with.
Hexy - a strategy game for iPhone/iPod Touch
There's also pygame which is a python interface to the SDL/OpenGL stack.
:)
Makes it easy to write some cool little games
I've written a small game that some folks find addictive:
.png and .ogg files directly... it just feels all warm and fuzzy :^)
http://www.nongnu.org/tong
It's from an old idea I had and was looking for an excuse to teach myself SDL, which some buddies and I had chosen for a much more ambitious game we're still working on.
We chose SDL primarily because it is cross-platform. I use and develop under GNU/Linux myself, but I want all my windows-running buddies to be able to play my games. OSX and even DreamCast porting is trivial, as SDL happily runs on those platforms and many more.
http://www.libsdl.org/
SDL is very well documented and very slick to use, even to a newcomer (so long as you do have some programming experience). I'm a C and C++ guy, and SDL works with those natively, but if you wish to stick with Java or any other such language there are appropriate bindings. I highly recommend the libraries SDL_image and SDL_mixer as well, for boosting image and sound loading support. (I love being able to have my game just load up
I subscribe to master Miyamoto's game design theories, which basically amount to making your game into its own little playground, running on its own rules and rewarding the player for being clever. Keep the controls simple; a person should be able to pick up and play. Now, my game Tong is pretty rough at first, so I maybe don't follow this thinking very well in practice, but the philosophy is an implementation of the old "Keep It Simple, Stupid" that you've heard so often and I think it's very sensible. Especially for budding game developers.
Even with a well-documented API and a clear idea of what you want your game to be, it's going to take a while. Get a demo of "stuff happening on-screen" with mock-up graphics to get a feel for how you're going to render things, then trash the whole thing and start building up all the pieces you need. If your strengths are with object-oriented design, figure out all your game entities in terms of objects that all inherit things like how to draw themselves. If you're more of a procedural programmer, and even if not, figure out your main game loop, what needs to happen every cycle and what can be called out in special cases.
Take your time, let it be a pet project. The last thing you'd want is to extinguish your interest by making it a serious commitment. Starting small and building up is an obvious and good approach.
Best wishes! Long live the independant game developer!
Against some people's ideas, books can be a great way to learn (especially because you don't have to keep switching between programs, just keep the book on your lap). I like the OpenGL Superbible (ISBN 0672326019 or linky) despite the name pissing me off.
of course then I go and screw up #3. I should have said always switch, since you had a 1/3rd chance of being right when you chose your original guess, leaving a 2/3rds chance that you were wrong. Now the problem is reduced to two choices.. so you'd think that you'd have 1/2 chance of being right, but you don't.. the 2/3rds never went away, it just compressed down on to one door, so you should pick that.
this site explains it better than I can.
Start Here. Go there, read and do what it says.
And FYI, I'm resisting the urge to make snide remarks about the naivety of your comments. You state that you're ernestly going to try "making some games" (if you manage ONE coherent game I'll be impressed), and that you enthusiastically want to make 3D games (but appear to be scared of C++).
In the words of Yoda: Try not. Do. Or in this case, "after asking on Slashdot, try some of the suggestions".
Learn from games you play. You've obviously played a computer game before. Take one that's similar to the game you think you want to make. Write down all the things that you do in that game and what you think the game has to do to support that action.
(ie: you click "new game", the board re-initializes and sets up the game state. You try and move a piece, the game checks to see if it's a valid move. You win the game, the game somehow detected that condition. You've got a high score, the game knows this and stores it somewhere).
Write this down for a game that you know, then try to change it into the game that you want to make. Then expand each section with detail and keep adding more and more game features while keeping everything coherent. You'll soon figure out how complex (or simple) your game will probably be.
Great program design begins on paper. A great implementation can come later when you've got the broad strokes figured out. (Unless it's an organic design (which is often unavoidable in live projects where you can't afford to break something) - in which case, welcome to hell).
One of the first things that is beaten into 1st year computer science college students is that you should not cling to any one language. You should grow to the point where you can easily pick up any language thrown at you (the specific advanced knowledge later coming with experience).
FYI, there are decent free C++ tools and libraries available for Windows, you don't have to use whatever Microsoft tries to push on you.
With your Java background you might want to try messing around with Proce55ing (a very good prototyping tool) to solidify some of your ideas.
And of course, break the rules when it suits you.
If you're not already used to programming in 3D, it can take way too much time to ramp up, find an engine that works how you want, understand it, and so on and so forth. Writing a 3D engine is also a massive task, and will probably kill your interest before you get around to actually writing a game.
2D is a nice way to go: it's a lot more fun getting so much more bang for your buck, without nearly as many content hassles either.
One cheaply available 2D engine that comes with source is from the good people at garage games, called Torque 2D. It's got a decent scripting language, and nice enough C++ code. If you don't want to re-learn C++ right away, you can accomplish quite a bit with only the scripting language.
There are probably some other nice 2D engines out there as well, so you can look before you buy. However, I'd recommend picking one and starting from there: it'll save you a ton of work, and you're much more likely to actually get something done.
One other possibility: I made a funnish GBA game in my spare time a while back. It just took a few weekends (and a flash linker from Lik-Sang), and the help of a couple friends. I never finished it, but it was a reasonable demo. GBA dev is slightly tougher than 2D dev with an existing engine, but the libraries out there make it really not too much worse.
Adventure Game Studio provides an extremely simple way of doing old-style adventures quickly and has an active community behind it, which is rather friendly.
> ActionScript has become o very powerful language
Right on, and with the addition of a good open source component framework, it's only getting better. MTASC + ActionStep == good times.
The Army reading list
The problem with using C# and DirectX is you're requiring the user to have the .NET Framework and (I believe, not 100% sure) DirectX 9 installed.
And if the user has dial-up, then expecting them to download a 20 MB+ pre-requisite will probably turn a significant percentage of your potential audience away.
Blah, while attempting to find some sort of estimate of how many PC's have the .NET Framework installed (no dice), I stumbled upon a possible solution to the .NET Framework problem: .NET Framework Linking, which basically includes all of the required .NET libraries in the executable itself. That example seems expensive ($5000 to $10000??), but there might be a free way of doing it somewhere.
Slashdot just posted another story about a great developer tool you can use to get started in your game programming career!
Modern copyright is theft of culture from everyone and it retards the progress of the useful arts and sciences.
Yes, it wouldn't do any harm to brush up on your C++ skills. If you don't have a C++ compiler yet, get Dev-C++ http://www.bloodshed.net/devcpp.html
Then try to finish at least one game. It doesn't matter how simple it is. If you then want to concentrate on design, instead of the nitty-gritty details, you might want to try http://www.cs.uu.nl/people/markov/gmaker/
For 3D, 3DGamestudio http://www.conitec.net/a4info.htm is a cheap, decent, all-around game authoring system. You can cobble together a quick FPS and if you put more time into it, a good RPG.
The two I just mentioned are for the windows platform, btw.
If you really want to start with a good (cross-platform) 3D engine, Irrlicht http://irrlicht.sourceforge.net/ is a good open-source one. It works with Dev-C++.
The important thing is to get one game out.
For a generic book on game programming, check out Andre LaMothe's book Tricks of the Windows Game Programming Guru's (assuming you're developing for windows...and if you're trying to find a decent sized audience, you really should be) That provides the technical introduction you'll need, from COM to DirectX. Note that you can skip a lot of it if you're a seasoned windows developer. If you're not though, this is the best book to start with IMO, since it has a great windows primer.
When it comes time for you to consider programming game AI, look no further than Programming Game AI By Example by Mat Buckland. He goes over a LOT of material in the book dealing with very practical game programming. He starts out with very basic examples of Finite State Machines (FSMs) and works his way into building a bot for a full blown FPS game called Raven. His website (http://ai-junkie.com/)also has a very nice introduction to Neural Networks and Genetic Algorithms--some of the more 'exotic' approaches to game AI.
He writes all his code in the book in C++, so obviously it would be helpful to know it. Also you will need to be slightly adept at math if you want to understand completely the physics code, but luckily he provides a very detailed and lengthy refresher chapter and references it constantly whenever introducing a math-intensive portion of code.
J2ME (I mean, provided you have some portable device to really use it on, instead of just a lame cell phone emulator or whatever) is rather fun to program in. When I did it for a class, I did not program a game, but my program was relatively similar in terms of what I used from the language (it was a baseball-game scorer). Doing the UI was a snap. J2ME offers graphical/ interface program that is not only ideal for a cell phone/ PDA, but because of those concessions, it's really easy and straightforward and cool, because the interfaces are flexible and they do what you'd expect them to- MUCH better than Swing/AWT. I don't feel like writing a book, but, let me tell you, the stuff inside J2ME (from the graphics to the internet stuff, etc) is very helpful for writing games. The only annoyance was losing random (non-UI related) libraries that you had in normal Java for no apparent reason. By and large, I liked programming in J2ME as much as I do in VS/#C/.NET, and I really enjoy doing that.
Insightful: 76, Off-Topic: 379, Flamebait: 24, Funny: 152, Interesting: 201, Underrated: 55, Troll: 9, Total: 896
From the site: [ http://realmforge.com/ ] """ The RealmForge GDK is the cross-platform game development platform for .NET. It is written entirely in C# to ensure portability and allow the productivity, flexibility, and dynamic nature of the .NET Framework to be leveraged in all aspects of game development. This middleware is architected with both power and ease of use in mind and is released under the LPGL so that it is the free and ideal solution for both commercial and hobbyist projects.
This game development kit is characterized by its productivity, ease of use, and highly flexible and intuitive component-oriented architecture. This game engine and development environment consists of a framework, rendering engine, run-time development toolset (In-Game Editor), script and media libraries, and a growing showcase of demo games and tutorials which assist in rapid prototyping.
"""
The framework itself is under lots of active development and has support for just about everything expected of a modern game dev kit. Also, the support is simply amazing, with forums, google group mailing lists, irc channels, great documentation, etc.
I agree with those who say that knowledge of OpenGL and/or DirectX is a must, (always know something about what goes on under the hood), but I'm also a big fan of short time-to-market once you actually start developing a concept. Here are some 2D engines that speed up development:
- Torque2D - GarageGame's upcoming 2D tiling engine SDK. This looks promising, but is in its early-adopter release. Not yet ready for primetime, according to GarageGames.
- Pygame - Python-based 2D engine. My feeling is that Python is a great language to start game development in.
- Orbforms Designer - Why limit yourself to the PC? PDA games can give you a greater return on your time than Windows games do. (Per man-hour, our PDA titles bring us more revenue than our PC titles do.)
- Game Editor - For those who want to go even higher-level than an SDK.
So you want to write a 3D game! Try one of these:- 3D Gamestudio - The engine of choice for our latest games. I love it, and hope they'll extend to the Xbox 360 platform when it comes out.
- Torque - Maybe the single most popular 3D engine among indies and hobbyists. Focuses, in part, on cross-platform compatibility (Windows/Linux/Mac).
- OGRE - An open-source package. Frequently updated. Some nice projects using the engine.
- DarkBASIC - A popular package among new developers and independents.
Also check out what kind of games independents are making now:- Game Tunnel - Previews, articles, and reviews of indie games.
- DIY Games - Covering the latest independent/shareware titles.
And ignore anyone who says that you should start off by developing something simple. It's good advice, but nobody ever listens to it.---
Inago Rage - Create and fight in your own FPS arenas.
---
We're indie. We're working on our 14th game.
Check out our 2D game framework and real game samples, available at http://developer.popcap.com/index.php. We've used and continue to use this framework for all our own games. Nearly all the hard technical issues you'd need to tackle have been solved here, so you can really put your focus on game design. There's a pretty active community of people on the Popcap Developer Forums who can help you out too. Best of all, it comes with one of the most free and open open-source licenses out there. Give it a shot!
Dave Haas
Chief Operating Officer
PopCap Games
Well I program games, and though books can give you a headstart in doing certain things in a certain way, they never go very far or very deep, and usually are just a colleciton of tricks and tips. They just sit on my desk for the rare occasion that I need to look up the peculiarities of an A* or something or how to build a Q-Hull.
The best way to learn how to make games, is to go out and do it. The best reasons for using this or that language, is the reason YOU have, not the reason someone else has. Each game is different. Each scope is different. The only way to preserve your idea is to work on the transformation yourself without others dictating 'how it should be'.
But what IS always good to read, are the postmortems and articles at Gamasutra.com. They give you an amazing list of resources that are definately worht checking out.
All the best!
With great power comes great electricity bills.
Many people have mentioned SDL. You should also check out Allegro. It's a multiplatform game programming library.
http://www.talula.demon.co.uk/allegro
Coder's Stone: The programming language quick ref for iPad
You CAN develop modern, well-performing games in Java. Since you already have a good Java skillset, try these:
Killer Game Programming in Java from O'Reilly, and Developing Games in Java by David Brackeen, from New Riders.
Brackeen's book (Developing...) is particularly well-written, and a great place to start. Killer Game Programming in Java is an *excellent* idea source/reference in the great O'Reilly tradition, but is a little more intimidating, since you could use a copy to beat an elephant to death. "Killer" is a more recent book, and covers some aspects of Java 5.0 game development that Brackeen's book necessarily omitted. Both books also point out various commercial games, and games in development, that were written with Java. You're probably not going to end up writing a screaming, graphically stunning FPS with self-shadowing objects, etc., but since you're not EA, you can't afford to do that in your own time anyway. So why throw out your current skill with Java and learn C++ all over?
Arr! The laws of physics be a harsh mistress!
Very few responses have actually answered this guy's first question: "What books would you recommend to a beginning game developer?"
Core Techniques and Algorithms in Game Programming. I own many game development tomes, and this one replaced 3 1/2 shelf feet of my reference material. This book contains everything the beginning competent programmer needs to get a quick start at programming any sort of game imaginable, and it covers topics from *useful* design patterns and data structures to shader programming.
Game Architecture and Design is another good book, but is a survey of information from design patterns, architecture, game design/ludology, project management, and business practices in games. Probably up your alley but not exactly what you asked for.
As for an introduction to game theory, none is better than Rules of Play. This book is the first extensive critique of the entire field of game theory as it is applied to game design that I have read. Lengthy, and it reads like a textbook (it was designed as one), but engaging.
Performing sanity checks on your own beliefs is vital in avoiding poisoned koolaid.