View Full Version : Game Development 101
Hey everybody,
I know this is gonna sound like a whine, but I'll persevere in the hope it help me.
I'm a programmer who studied a N Dip IT and have been working in the field for a couple of years in C#. Recently I landed a job up in JHB in some other languages and I'm super eager to learn.
Enter game programming. I've been interested in game development for a long time, but never got the drive to just follow through. Seeing as I had a little experience at C# I dived in and bought a "Pro XNA 2.0 how to Program Games" and could never work through it.
So basically what I'm looking for now is a structured method to get into programming games and I'm completely open minded and eager for advice from the Game.Dev team. Where do I start and where do I go?
If you say Game Maker 7, I'm in, just point me to the forum post with some tutorials etc.
If it's XNA that's the recommended, I'm all GAME. I even have some C++ experience and would LOVE to get into DX10 programming one day, but understand it's probably not gonna happen quickly!
So any guidelines or a sort of course to follow would be much appreciated. I'll have quite a bit of free time now and this is one hobby I'd love to pursue!
Thanks in advance!
dammit
12-08-2009, 09:42 PM
You'll find this link (http://forums.tidemedia.co.za/nag/showthread.php?t=3452) super helpful ;)
Agrajag
12-08-2009, 10:14 PM
I second dammit.
Also, if you want to use Game Maker, there are some official Game Maker tutorials: http://www.yoyogames.com/make/tutorials/
Thank you for the replies. I've browsed that link to the nag forums already and I thought that Reimers tutorials looked really interesting. I'll be starting there.
If anybody has a suggestion of a sort of path to follow, (ie. Start with these tutorials and move on to these when you're done, then do this and that followed by this tutorial etc) please post it here!
Hopefully in a couple of months I'll be posting games in the comp section... always wanted to, just never had the time!
Fengol
13-08-2009, 11:07 AM
See GameMaker as your prototyping tool that you use to test the mechanics for your 3D game. So once you've gone through Riemer's tutorials, think about the game you want to make and make it in GM, share it on the forum so the community can help you with your idea and from there, make it in XNA.
Evolution
15-08-2009, 05:15 PM
If you already know how to program in c++, and have a decent understanding of visual studios, and know a little about game design structuring(which I've learned from experience), and if you new to the directx API you can probably get a basic game engine(2D games) running in 2 months if you really stick with it. You will probably run into tons of problems if you choose this root, but you learn from experience. You can download the directx sdk to get started. You might want to skip directx10 and jump straight into directx11, although directx9 works on XP. After you download the directx sdk you can go through the help files and tutorials that come with it. You will probably get frustrated with microsoft's help files(they like to leave important info out that will prevent you from running the code after going through the tutorial without changing and adding some stuff). I will try to post a list of classes that a basic c++ game engine has, will probably post it in the next 48hrs. Also you should use google allot if you get stuck. I can tell you these things from experience.
dislekcia
16-08-2009, 05:03 AM
If you already know how to program in c++, and have a decent understanding of visual studios, and know a little about game design structuring(which I've learned from experience), and if you new to the directx API you can probably get a basic game engine(2D games) running in 2 months if you really stick with it. You will probably run into tons of problems if you choose this root, but you learn from experience. You can download the directx sdk to get started. You might want to skip directx10 and jump straight into directx11, although directx9 works on XP. After you download the directx sdk you can go through the help files and tutorials that come with it. You will probably get frustrated with microsoft's help files(they like to leave important info out that will prevent you from running the code after going through the tutorial without changing and adding some stuff). I will try to post a list of classes that a basic c++ game engine has, will probably post it in the next 48hrs. Also you should use google allot if you get stuck. I can tell you these things from experience.
No offense, but that's horrible advice.
You're basically saying "Hey, do all this hard stuff for absolutely no reward! It's frustrating and annoying and I have experience which lets me tell you this but I'm not going to tell you how to get that experience at all. Woo!" to someone that's keen to learn. With no supporting information as to why they should listen to you in the first place...
Way to kill enthusiasm there.
Fruzz
16-08-2009, 08:46 PM
My experience is that its much better to start small. What Dislekcia says has proven true for me. You need to maximise the reward you get out of it or you just won't keep working on it.
Coming from a programmer's perspective I thought all I needed to do was learn some clever games programming techniques in order to make games but I've learnt that the game design aspect is very important. Starting with something like Game Maker helps you learn the bigger building blocks before you go into making a games engine and trying to create those building blocks from scratch.
At the moment I'm making some small protypes for an idea I'm working on in game maker to try and get some mechanics that work well together and that are fun. I'm also reading up on c++ games programming. This (http://www.amazon.co.uk/Programmers-Charles-River-Media-Development/dp/1584504528/ref=sr_1_1?ie=UTF8&s=books&qid=1250443528&sr=8-1) is the book I'm reading on c++ games programming. Its really excellent.
I'm finding that the relatively small effort of getting some basic game ideas working in Game Maker coupled with the reward of seeing my ideas come to life is really helping me to keep enthusiastic about learning the concepts of games programming.
Necrolis
16-08-2009, 09:29 PM
If your going to recommend someone start game programming in c++, i'd say its best to point them to the easy frame works like SDL or Allegro, or completed engines like irrlicht, ogre or HGE(HGE is awesome), this way you can have something in a few hours to a few days(depending on your skills) instead of spending weeks to months, or more, building wrappers, systems, subsystems etc(unless your into that thing, like me). DirectX although powerful can be really discouraging for people who are new to C++ and game & graphic programing, thats why XNA is win(or GLUT if your and openGL fan, and i'd actually recommend OGL over directx as its 'simpler' to grasp imo, till you need the power/features/e-peen etc of dx)
Thank you for the replies.
I've seen the talk about starting small, and I'm all for it because I tried starting big before and it didn't work. What I AM beginning to realise is that game DESIGN is a lot more difficult than game PROGRAMMING.
I have to design a simple game in JAVA for my final JAVA year, and it's been a lot of work doing the sprites etc. The actual programming has been easy, it's trying to get ideas that I CAN implement that are fun that are difficult.
For me it's still the pinnacle of programming. I hope one day I can be specialised in AI using neural networks, but at this stage still not grasping them.
In the mean time I think I'm gonna be trying game maker to get some rewards fast! I love programming, and I love games, if game maker is a step on the road to where I want to go, I'm all for it.
I have looked at the SDK and some engines, but also never had time... For now I think I'm going to try making a prototype in game maker for my java project just to see how it works.
Once again, thanks for all the advice!
PS: I started implementing the A* pathfinding algorithm in my java game. Still amazed at how quickly PC's can do stuff like that...
Fengol
17-08-2009, 09:34 AM
I had to make a Java, mobile, networked game for my Masters in 6 weeks and my team and I had never worked in Java (or a lot mobile, let alone Bluetooth) before. What really helped us was prototyping the game in GameMaker and learning what interface, objects and interactions we had to do; seperating having to learn the toolset from having to figure out what to do.
I don't have six weeks, I have two. And it's not masters, it's a N DIP course!? AND it's networked...
At least it doesn't have to be 3D. And in the lecturers defence it wasn't a two week project, it was four and I started late. IT's all the ideas that are difficult, I'm used to problem solving with programming, so implementing them is way easier than thinking of them, or at least more entertaining for me. But I think I have a few cool game mechanics for what is essentially a pacman remake...
Evolution
17-08-2009, 02:17 PM
No offense, but that's horrible advice.
You're basically saying "Hey, do all this hard stuff for absolutely no reward! It's frustrating and annoying and I have experience which lets me tell you this but I'm not going to tell you how to get that experience at all. Woo!" to someone that's keen to learn. With no supporting information as to why they should listen to you in the first place...
Way to kill enthusiasm there.
I'm very raw when I reply to a post, I take it straight out of my mind and onto the forum.
There is no secret to gaining the experience, just hard work. If you really want to do something you will find a way.
It's not hard to program a game in c++, it just takes time and patience. If you stick to it you will improve and it will become easier.
To give you a more clearer picture of what to expect I came up with this...
Basics of 2D game development with C++ / DirectX SDK.
The best way to learn is to go through the tutorial that come with the sdk, or get a book. If you not prepared to build a game from scratch there are many other free game engines out there. There are allot of books out there, some focused on specific engine and some teaching you how to write your own.
Top 20 most important classes for building a 2D game from scratch.
1. Game
2. Vector2
3. Resource
4. ResourceManager
5. Font
6. Text
7. GraphicsComponent
8. Colour
9. GraphicsComponentManager
10. Screen
11. ScreenManager
12. Texture
13. Sprite
14. MathHelper
15. AudioEngine
16. InputManager
17. KeyState
18. Keyboard
19. Mouse
20. BinaryStream
You still need to add allot more classes depending on what type of game you are making.
You also need to choose your naming method, each with their own pros and cons.
1. Prefix eg. EngineVector2 , ENGINEvector2 , cVector2
2. Namespace eg. Engine::Vector2 , Engine::Enum::ScreenType , Engine::Graphics::Sprite
Tips:
- Make sure that variables that are needed throughout the program are static. (very important)
- You can use the Sprite and Text class to make a Button class.
- Put all your engine header files into a single main header that is used by your program, but do not include the main header into a class that belongs to the engine.
- You will need to know how to use #define efficiently.
- Good knowledge of project properties is also a must.
- Be very careful when using pointers, and make sure you release all resources when the program closes.
- Make the engine a separate library from the actual game so you can easily bring it into a future game.
- The Vector2 class will need ALLOT of operators to make it easy to use.
- Textures that are not of a power of 2 will be stretched
- Jumping from C# to C++ is going to take time if you have no prior knowledge of C++.
There are tons of stuff that you should know but they are too much to write down in this post.
These are a lot of helpful tips that should be useful to all developers that are interested in game engine development.
But if you want to do it as a hobby then go with Game Maker or XNA.
Nandrew
17-08-2009, 04:49 PM
I'm surprised that you'd recommend XNA as a purely hobbyist tool. ;)
In fact, I'm surprised that you say that of Game Maker too.
Both of these tools are more accessible for newcomers, but there's a bunch of people out there who actually earn money from working *just* with Game Maker or XNA. In fact, I'd say that anybody going into the "business side" of game development would do themselves a service by starting with these: it's a faster way to get your finished product on the market, and it buffs your portfolio when you're applying for a job. I think Dis has mentioned quite often just how much it impresses an employer when you can show them that you make good games using ANY tool.
My internet is a bit cripply at the moment, so I can't go hunting down the GameCareerGuide article that goes over this, but really all you need to become a professional programmer is:
- a MODERATE knowledge of one of the "core" languages (C++, C#, etc)
- game development experience in ANY language
There's a good reason for this, and I'm going to elaborate using xcal's experience as an example.
Xcal is literate with C++ and C#. Given that he's studied a formal course, certain core concepts such as object-oriented programming and efficient structuring should have been drilled into his noggin already. With this as a base, it's not difficult to pick up another language and learn it very quickly.
But he still has to learn to put these lessons into practice with game development. Universally. Here's a scenario: you've created a "player" object and several different "enemy" objects to shoot at. A poor game programmer will write in the event code for a bullet hitting every individual enemy. A good game programmer, on the other hand, will create something along the lines of an "AllEnemy" class and make this a parent of all enemy subclasses, then write a single event for when a bullet hits AllEnemy. Waaaaay more efficient. And whether you're working in Game Maker or C++, you're going to learn the same good practice: create that parent and use it.
The only difference when you try to move back to something like C++ from Game Maker is that you suddenly have to lay down a lot of the ground work before you can do anything. Instead of being provided with a prefabricated class, you'll have to combine several more rudimentary classes to create it yourself. And if you're already a skilled programmer, this can come across as a waste of your time: because seriously, this task isn't DIFFICULT for anybody who knows how to code already, it's just ANNOYING. It doesn't challenge your "skills" at all: it just provides filler for something that could otherwise be done more easily.
Back in high school, I experimented a lot with hard coding. I used Delphi/Pascal, C++, OpenGL, Python, Java, you name it. I coded a lot of stuff in raw assembler. I pushed individual pixels with interrupt codes, then realised that they were inefficient and switched to directly ****ing around with video card memory. I coded 3D maths from the ground up and used it to create a landscape editor for my Matric project. But with all of this knowledge, I still couldn't code a decent game. At all.
Then I picked up Game Maker, and here's the thing: it didn't just help me become a better designer, it made me into a better coder. I could stop sweating the small stuff for a moment and look at the bigger picture. I realised that the basic way I looked at object structures was inefficient. I realised that I could use scope and recursion better. Et cetera et cetera. With every game I hacked out in GM, I learned where my loose ends in coding were and I started tying them up properly. Instead of poring over the minutae, I started looking at efficiency on a broader scale and had a better overview of how all my coded game elements could work together. I started addressing real problems where, in the past, I would have been caught up with the proper use of pointers or some other malarkey instead.
Coincidentally, I decided to be a bit nostalgic not too long ago and looked over some of my high school coding projects. And I chuckled to myself knowing that after everything I've done in Game Maker, I could go and clear that all up and make a far superior batch of programs (in those languages) if I wanted to.
Remember: somebody who knows programming doesn't magically get worse when working with an easier tool. If you've been coding in an environment like XNA for a while and suddenly want to access Mode 13h in another tool, then you'll look up a tutorial that explains it and get it working in a few minutes. Because that's just what good programmers do. It's nothing arcane, it's just an extra bit of baggage on the skills that you've already developed. One that starts to look like a remarkable waste of your productivity if you're doing it just for the sake of, well, itself.
My advice to serious coders: take a break and try Game Maker for a change. You'll learn the stuff that you should have learned when you were trying
mov ax,0013h
int 10h
instead.
Evil_Toaster
17-08-2009, 05:29 PM
It's fairly simple... If you want to go work in a big game studio which makes AAA games, it's likely they'll be working in c++, and by all means, go learn it. For anything else, you're probably better off working in a language which allows more rapid development. Computer speeds being what they are these days, you can make money building games in pretty much anything (Game Maker, XNA, Blitz, Java, Delphi, PyGame, Flash, Visual Basic, C++, HTML+ASP/PHP, whatever). What's important is that you make a good game.
Your target platform is the main thing that influences what language you use. For Cellphones there's Java and Flash, for XBOX, XNA is a good choice. For web based, Flash or DHTML+ASP/PHP. For the iPhone, Objective C I think?, for Wii, all your money+Fabled Nintendo Dev Kit of wallet rapage, etc.
As a general rule, the faster/lower level the language is, the more work you'll do to get results. In Flash, you can pretty much go stage.addChild(new NameOfImageClass()); and you have an image rendering onscreen. If you wanted to do the same thing in plain C++ and DirectX, you're looking at a LOT of supporting code to get you into graphics mode, load the image from a file, clearing the screen, drawing the image to the screen, etc, etc.
If you're just starting out, it's better to work at the highest level you can and learn the general concepts. When you start hitting limits in terms of speed or flexability, that's when you might consider going to something a bit lower level.
Summary: High Level = Fast Development, Less Control/Speed. Low Level = Slow Development, More Control/Speed.
Nandrew
17-08-2009, 07:35 PM
for Wii, all your money+Fabled Nintendo Dev Kit of wallet rapage, etc.
Rumours abound that this artifact doesn't actually exist. They just pretend that it does so as to annoy you better.
AndrewJ
19-08-2009, 01:38 PM
Your target platform is the main thing that influences what language you use. For Cellphones there's Java and Flash, for XBOX, XNA is a good choice. For web based, Flash or DHTML+ASP/PHP. For the iPhone, Objective C I think?, for Wii, all your money+Fabled Nintendo Dev Kit of wallet rapage, etc.And the .NET Compact Framework for Windows Mobile powered devices.
for Wii, all your money+Fabled Nintendo Dev Kit of wallet rapage, etc.*Announcer's voice*
Congratulations!!! You just won this round of Epic! Please collect your prize at the door.
Powered by vBulletin® Version 4.2.4 Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.