Introduction: Where to start? (by Core)
First of all, you have to understand that game programming is a very challenging, but rewarding activity. It is not as easy as it may seem for a beginner, so I will provide some advice on this topic. I want to mention, that there is no universal recipe on getting good at game development and this guide may not be suitable for everyone, but some advice will always give a boost.
1. Decide if you really want to do it
Think about the way you think. Do you like math? What about physics? Unless you are just a graphics designer you will have to operate with lots of math and physics during your development. And this is not limited on elementary understanding of physics or/and math. You will have to work with vectors, different physical formulas for velocity and acceleration and of course trigonometry.
2. Decide on the programming language
Obviously, there is no ‘game programming’ language. Theoretically, any programming language can be adapted for game development; however, it’s all about the tool you can operate better with. Are you good with Java? Try creating some games in Java and see how it works. Same applies to other programming languages. However, there are languages that are better for game development from a specific point of view – how efficient will be the development process. C++ is considered the industry standard for game development, mostly because it offers better performance/optimization and is available on multiple platforms (which is basically not a problem for the majority of the programming languages today). You will also have to operate with specific libraries, like OpenGL or DirectX. These libraries are practically essential for game development, so you will have to check if your language of choice has a decent support at least for one of these libraries. Just for a side note, there is also XNA from Microsoft, if you work with C#, which itself is a wrapper over DirectX, so it makes game development easier.
3. Start with the basics
Many beginners are eager to start game development and plan to develop the next AAA title from the very beginning. Unfortunately, this is not going to happen. Major projects are created by big teams of experienced developers and artists. The development may take several years for such teams, so it is practically impossible for a beginner to accomplish this task by himself/herself. Start with the basics. Find a game algorithm that seems interesting to you (do something you would enjoy playing), but at the same time is not very complicated. Here are some ideas:
- Pac-Man Similar Game
- Simple Space Shooter
- Simple Tanks Game
4. Developing for next-generation consoles
Developing for such consoles, like Xbox 360, Playstation 3 or Wii shouldn’t be the initial focus when you start developing games. Platform-specific development requires specific tools that are provided by the console manufacturer to professional development teams only at a high price and extensive knowledge regarding that specific hardware. However, Microsoft offers XNA, which allows you to develop games for Xbox 360, but in a very limited environment. It can be a good start, but don’t focus on this at the beginning level.
The game industry does not stand in one place and there are new technologies, libraries, engines and practices appearing very fast. Be ready to learn every day and adapt to new technologies. Something you learned today can become outdated tomorrow, so be ready to adapt yourself to the new environment. This applies to general IT, not only game development.
6. Don't underestimate the power of books and online resources
There are plenty of books and resources available both online and in bookstores that are perfect for learning a new programming language or programming technique. Try avoiding titles that promise to teach you game development in 24 hours or a week – this is impossible. Learning to program takes a lot of time and no book will completely cover all the programming topics for a specific languages. Be ready to search for many things by yourself. Some links are listed above:
Bottom line - game programming requires specific skills and permanent work and learning. You should really like it to advance in it. Make sure you have lots of time to work on your development skills and enough enthusiasm to work on and finish game projects. You should not follow this short guide completely, as everyone has individual views on what is right and what is not, but take some beans out of it for yourself to think about.
Also, do not forget that there is always the Game Programming forum on Dream.In.Code, where you can ask your questions related to game development.
Game Programming Links (provided by Mrafcho001)
- http://msdn.microsoft.com/directx/ --Microsoft Official DX website--
- http://www.flipcode.com (also has some really good Win32 tuts)
- http://www.opengl.or..._1.0/index.html good
- http://www.grandgent...ace/vivace.html - really good..
- http://www.3dcafe.com/asp/meshes.asp 3D models for your games
Deciding on the language (provided by gabehabe)
The most common language used within the games industry is C++ which is even used for console game programming. (Coupled together with a graphics library called OpenGL) Also, I have played a few games on the PS3 which were written in Lua.
Another less-common-but-coming-up-fast language is Java, which is mostly used for mobile phone games and applets. An applet is basically a program which can be embedded into a web page. A great example of what can be achieved with Java is RuneScape.
Now it's time to throw in this little wildcard. C# is an object oriented language, which is kind of a hybrid of C++ and Java. The original intention of C# was for software development. It's a very high level language, which means all of those tools that you're going to need will already be made. It's just your job to learn how to use them properly. XNA is a framework, developed for C# which is used for making games. However, I have no experience with XNA to be able to recommend it.
And lastly, I'd like to quote Bench from the C/C++ forum, for this excellent analogy:
In the Java world, you go down to Ikea and pick up some ready cut, ready drilled flatpack furniture, and all you need to do is screw it all together without needing to worry about the dimensions or the design of the individual pieces (Because someone else has already done all this hard work for you). You might find that the manufacturing process has some very slight anomalies, and doesn't fit together 100% perfectly, or maybe the design doesn't suit your needs exactly, but it does the job very well otherwise.
In the Low-level world, you start out with a solid tree trunk and a workshop full of powertools, where you will handcraft the furniture. You'll need to spend alot more time recreating bits which Ikea would have made for you, though you can finetune each minor detail, you need to understand the resilience of the material, and the way in which stresses and strains work at the joints (Though with handcrafted furniture you will probably have less joints), but you need a detailed understanding of precisely what you're doing so that the furniture you build at the end doesn't collapse.
Section 1: Game Designer (by Martyr2)
How Becoming a Video Game Designer Works
Of course this article isn't going to cover all of what you need to know, but it certainly offers great advice of where to start. Keep these additional tips in mind...
1) Making a game is a lot of work and work takes time.
2) The more you know about your language of choice the better you will be.
3) Read up on some material first before starting a game. These include books on game design as well as obtaining enough knowledge in programming to consider yourself an "intermediate" level. This means if you are a complete newbie, a game is not the greatest first time project for you!
4) Write out your entire project on paper first, making it as detailed as possible. The more detailed it is the easier it will be for you to program it using the plan as a road map.
5) Dedication is crucial to success. Work on your game regularly and enjoy what you are doing.
6) Keep it simple and grow it into a bigger project!
7) Lastly, visit DIC whenever you have a question and we can certainly do our best to get you unstuck and keep you moving forward.
Section 2: Game Team Leader (by SixOfEleven)
I have read many posts like this on many different web sites:
Please note, I'm not trying to discourage anybody that wants to create a team. I'm just trying to give you a path to follow to help you get started creating a team. I'm not a MBA so I don't know everything that goes into managing a team, these are just things I have learned over the years.
While this is not a bad idea, it is not always entirely practical, even for experienced game programmers. Being a team leader is much more different than being a part of a team or programming a game on your own. You must wear many different hats to be a team leader.
Also realize that many professional developers will not want to help out with the promise of profits when the game makes money. Very many start ups never finish their game and programmers and artists will have lost a lot of valuable time and effort that could have gone into their own projects
You should think about what you will bring to the project. Maybe you are not exactly a good programmer but you have good project management skills, finincial means or other such things that you can bring to the project. You could also be a great artist/modeler/sound effects expert who needs programmers to bring your visions to life.
If you are a programmer who wants to start out on the path of becoming a team leader, it would be a good idea to follow: The path to becoming a game programmer, if you are not a game programmer already, as you will more than likely need to get your hands dirty with the coding of the game.
Before you even think about starting a team, there are a few things that you will want to do. You will want to follow a software development process, to define the scope of the game and the functional requirements. When you are writing a game on your own you can change your mind on what you want to do. When you are leading a team, you should have a very solid plan ready for the game, and the ability to write those plans down, step by step. You really need to have good writing skills, or at least somebody who can help you formalize your plan. (Don't even think of design document until you have an idea of the scope of the project and the functional requirements.) Scope means what is your game about, in fairly precise terms. Such as, this game is going to be a isometric 2D real time strategy game that can be played either against the computer, over a local area network using TCP/IP, through our player matching web site or directly over the Internet. Functionality determines the functions of the game. You will want a tile rendering system for the above game, a peer-to-peer or client/server model.
Now would be a good time to start thinking about your design document. Get a basic document down but don't go into too much detail as when you bring your team together you will want their input as to how to go about designing the skills.
Now that you have a well thought out plan of what you want to do. It is time to start looking for your team. There are several other skills you should have and many things that you must learn.
First thing you will have to do is to learn how to gauge the skill level of the programmers, artists, sound effects engineers, etc that you want to be part of the project. This is where being a game programmer, or at least a good programmer, will be most important. If you are an artist or a project manager it will be helpful if you have an experienced programmer to turn to for advice on this step.
You will have to sift through resumes, cvs, query letters, portfolio sites, code samples, demos, etc to find applicants that you are interested in inviting to your team. Since you are more than likely going to be doing this over the internet, email is most likely they way this is gong to happen. It could also be done over instant messaging but there could be problems if you are looking at team members in different time zones. (eg. I have been talking with a game designer in Australia, GMT+10 and I'm in Eastern Canada GMT-5) It is hard to coordinate conversations as when it is 10:00am on Monday here it is 1:00am Tuesday there. This can be extremely hard to coordinate.
One of the most important skills you will need are excellent communication skills. You will be responsible for keeping the lines of communications going between the various members of the team. You will also be responsible for taking input from the team members, filtering out what they are trying to tell you and determine the course of action that needs to be followed. More than likely, since it is your idea that spawned the project, you will have to communicate with the team members what you expect from them clearly and concisely. This is where the software development process you did will be helpful.
You will also want to have excellent time management skills and tremendous perseverance. You will be responsible for each of the team members meeting their deadlines, scheduling team meetings (which can be incredibly difficult if you are working with team members from around the world.) You need to stick with the project, you can not get bored and stop working on the project. As a team leader, you have made a commitment to those you selected for your team to finish the project. You have invested a lot of time, and possibly money, in the project as well. If you don't stick with the project the team members may get angry and if asked about you, by others interested in starting a different project with you, that you are not reliable. You have to see it through to the end, that is either the finished game or everybody abandons ship on you. (Finishing programming the game is not the end of the project though.)
Invariably some team members might want to leave the project or disputes will arise between team members and you will be responsible for settling them. In these cases you need a little diplomacy, to try and keep the members of your team together and happy. Working with a team member that does not really want to be part of the team can cause all sorts of strife.
Other team members may have to quit the project or worse will have to be removed from the project because they can not fill the role that you assigned them. You will have to find replacements for these members and bring them up to speed on the project. You have to be prepared for that.
There are many other skills that you will need to develop but these are a few things you need to think about before you try and start a team.
Section 3: Game Programmer (by SixOfEleven)
I have seen too many posts like:
I want to bring a team together to make a new mmo mafia game
I want to make a game like Age of Empires
There is something that you have to understand about those games. Usually they were made by large companines with huge budgets and many programmers, designers, artists and other people that are involved in creating a game.
If you want to start making games here is some advice.
First, decide what language you want to write your games in. If you like C++, the learn all there is to know about C++. Same goes for other languages like C#, VB.NET, Java, any language. Knowing the language is very important. Even if you are just a game designer, who comes up with the ideas, you need to know what is possible and what the language can do. For example, if you want to make a cross-platform game that will run on Linux, Windows and Mac, you need to know that leaves out languages like C# and VB.NET.
Once you have learned the language, don't think that you are ready to make the next big MMO. That is still pretty unrealistic. There are still many steps that you need to follow.
You might have learned while you were learning your language of choice that it can take planning to make a large, complex program. You can't always just sit at the keyboard and through code at some problems. You need a plan on how you are going to go about everything, especially when you get to larger, more complex games.
Many people say to start with a Tetris clone to get started. That is actually a good starting point but I have one that you might want to try before that. Take a look at puzzle games like Bejeweled 2 and Alchemy. Both are very popular games and I think that they are a good place to get started.
Making a puzzle-type game like Bejeweled 2. That will introduce you to working with graphics and how the player will interact with your game. You can learn a lot from a puzzle game. If you think Bejeweled 2 might be a bit hard, then I would try Alchemy by Pop Cap Games. Both of these games are wildly popular and could easily be written by a single person. (If you are not a graphics artist, like me, there are many places on the web where you can find good free graphics to use, even if when you are finished your game you want to sell it.)
Now that you have the basic understanding of how a game works. A breakout, arkanoid or pong type game would be a good next step. These games add movement of sprites and collision detection. What is better is just about anybody can draw blocks and balls. There will also be an introduction to timing. Unlike the previous game, timing is not all that important. Unless of course you have a count down that the player must finish the game in time. You might also need to start thinking about drawing to a back buffer and presenting the back buffer to the screen/window.
Now would be a good time to make the Tetris clone. Tetris is still a simple game but it does add a few new complexities such as rotating the blocks, something that you hadn't done before.
After Tetris I would recommend a space shooter. And don't just have the enemy fly in straight lines. Have them follow curves. Give them a little intelligence for when they drop their bombs.
By now you will have a better idea of what goes into designing and writing a game. A good game to try now would be some sort of platform game that takes place on one screen. Like the old game Donkey Kong or Pac-Man. If you did Pac-Man how would you have the ghosts move? In the original Pac-Man each of the ghosts had their own goals. For example one of them tried to find the shortest path to Pac-Man. Another tried to block off the tunnels. Platform games will introduce you to a tiling system. Something that is used a lot.
With these games under your belt you would be ready to try something greater. I would suggest a side scroller like Super Mario Brothers for the NES. These types games will add more complexity to what you were working with before. You now have a scrolling screen. You will have levels. You will need to make a level designer. You will have to program how all of the characters in the game will work, especially any sub bosses and bosses.
Now would be a good time to think about multi-player games. First you could have two players taking turns on the same game like the side scroller like Mario and Luigi. Then you would want to have two players playing at the same time on the same computer in coop mode. Then, try making a game where the players compete against each other.
You might be able to do a single player RPG. In a role playing game there are probably many thing that go on that you will have done before. There is defining the character classes and possibly races. The enemies the player will fight will be more complex than any enemy you have programmed so far. You now have to worry about inventory management, buying and selling items, creating whole worlds, balancing the game so it is not too hard and the player gets frustrated or so easy that when the character reaches the top levels it is killing the most powerful enemies in your world with a flick of their finger. You will have to do a lot of planning for the RPG.
Instead of a RPG you might think of doing a strategy based game(turn or real-time). There will be a lot of things in common. You will need to make worlds for the player(s) to explore. Again, you can add mulitplayer supprot to the game.
If you haven't already, now might be the time to make the jump to the third dimension. A lot of what you learned up to now will help but moving to the third dimension is a very big leap. There are many complex topics and hard math to understand. But, don't get frustrated. Start by learning how to draw objects in 3D. Learn how to rotate and scale them. Learn how to model a small room and have the camera move through the room. There is a lot to learn in 3D. But, just like you did for 2D games, start small and build your way up.
Once you have a better understanding of how all the above games work, I think you are more than ready to create your team of people with similar interests and capabilities to create a good game. Just remember, some of the most popular games are extremely simple, like Tetris, Bejeweled 2, mahjong, even card games are popular (especially if you can play others over the internet).
I hope that helps all of you out there that want to make games. For those of you who are experts at making games, feel free to add anything that I have left out or any helpful advice for somebody wanting to learn how to program games.
Aww, why not, I'll put my two cents in, then I'll still only have -43 cents left.
Ok, now I can understand everyone's opinions here, I can see how they're all valid, and at the same time how they're crap. But then again, they are just opinions, just like what I'm about to dish out.
For a complete newbie to game development and programming, yes, I'd suggest GameMaker. Personally I don't really like the app, but I've used it and I can definately understand how it can help a newbie learn the basics behind game development. Granted that GM won't really teach proper coding techniques, it will give them a really good understanding of object oriented programming, as that's how it's visual interface is designed for the most part. As for it's scripting language, GML, it uses the generic C syntax for the most part, though it has it's quirks.
After "playing" with GM and GML for a while, then yes, I'd highly suggest they learn an actual programming language. The reason is simple, GM is slow because GML is a scripting language. If your going to build any *real* game application, you'll want it to run fast and smooth, which GM won't do. So for a first language I would definately suggest a C derivative such a C, C++, or C#.
Now that we know we want a C derived language, which one should we learn? The answer to this comes down to what you want. If you are only building your games to be run on Windows, and don't care about providing support for older systems, then go and learn C# and XNA. If however, you want your code to be portable so it recompiles easily on other systems, then your going to want to learn C or C++.
How to pick between C and C++? That's simple too. It depends largely upon your programming style, and your way of thinking. Sit down, and write out your game idea, if you can seperate pieces of your game into seperate objects, then you'll probably want C++. If however, you think in a linear sense, then you'll probably benefit more by learning C first.
Don't get me wrong though, once you do learn that first language, don't stop there! Then you'll want to learn about a library to interface with the language to make your game programming easier, perhaps even take the plunge and learn DirectX itself.
By this point, you've probably built tons of console and windows applications, and perhaps even got some game graphics working. Maybe you even have a small game built, but the learning doesn't stop there.
If your going to be working on the game yourself, then you may also want to get some skills in graphical arts and computer animation. You may also want to learn something about creating sound effects, and music.
Another thing to learn in game creation is advanced math. There are very few games that don't involve some form of Geometric or Tric calculations, some even use Calculas.
Let's not underestimate the value of English or foriegn language classes either. Granted you can build an entire game even if you have poor english, having good english skills will help you to keep your players interested in the game, especially if there is a lot of reading invovled in the game.(Like in RPGs) It doesn't matter how good the game is, if consistently uses poor english and grammar, I most likely won't enjoy the game.
Project management is another topic that you may want to learn about. Although it's entirely possible to build a really cool game without knowing anything about project management, it's the single one thing that could have prevented a lot of dead projects from dying. The problem is, that when a programmer is working on an unmanaged project, there may be so much to do that they don't know where to start and get overwhelmed. This causes a lot of programmers to feel like it's hopeless and they'll never finish, this feeling is the very reason they never finish. Even for a stand-alone developer, having a project plan helps them keep from feeling overwhelmed and hopeless. It provides goals and milestones so they can track thier progress.
Is game development easy? Heck no, but it's worth it, at least in my humble opinion anyways. There's a lot of work invovled in making a game, but the feeling of accomplishment you get when it's done can't be compared to anything else. The best thing of all that makes it all so worth it, is watching someone else having fun playing the game I created.
Now, realistically, how long should it take before your able to write your own games? That depends upon how fast you learn stuff. It's entirely possible for someone to learn a programming language and start writing thier own games within a few weeks. The chances of this happening are slim, but it's possible. If someone did this, then I'd expect to be answering a lot of thier questions in the forums here, cause they're going to have a lot more questions than someone who took months or years to fully learn how to program.
Another question I hear from newbie game developers is how do I setup code for my game? I want to head this one off by saying that there isn't a single person in the world that can give a 100% bona-fide answer to this question. Every game is different, just as every programmer is different. There is no right way to program anything, that's part of the joy of programming. Though computers operate on binary, 1 or 0, right or wrong, black or white, there is no such thing with programming, it's all grey area. If you asked 20 people to write you a program to perform a specific function, you'd end up with 20 different apps, each with entirely different source code. The chances that any two of them would be the exact same are so very slim it's mostly inconcievable.
This same "gray area" concept doesn't just apply to how you program, but to how you make games, or which language to learn first, heck it applies to virtually everything! There really is no right way to make a game, nor is there a right language to learn first.
Now that I've typed your eyes to tears, go and learn something. You decide what approach you want to take, and what language you want to learn. Decide these by researching your options, through the research you'll find "the right path for you".