Where to start

Started by
4 comments, last by Albion 16 years, 10 months ago
Hi all. I'll start off with the most obvious and probably the most commonly asked question: "I've got some programming experience and I've always wanted to get into game programming, but where do I start?". At college I did a lot of QuickBasic. Then, at uni, I did a year or two of C++. After that I was a web developer for about ten years (lots of VB and VB.net) and for the last year I've been working as a software developer using C#.net and SQL Server. So I've got a very good overall grounding in programming. But for as long as I can remember I've always wanted to pursue game programming as a career and I'm not entirely sure what I should be looking at. I've had a look back at C++ and realised I have some learning ahead of me, so I've got a few C++ books. I went through a basic Tetris tutorial on this site and although I can mostly follow the syntax, I can't get my head around how it's actually rendering the graphics etc - how the app is actually flowing. So I have some reading ahead of me there. I've also had a play with the Torque engine, and going through a tutorial I've created a very basic game collecting items around a landscape. But Tetris and an FPS style game using Torque are worlds apart and I'm not sure which direction I should be going from? How do most of you guys approach this stuff - do you build the apps from the ground up using a C++ editor and compiler and also 3d modelling and graphics apps? Or is it normal to use a standard game engine to do all the underlying work? I'm assuming that in the industry companies don't rely on third party game engines, but build their own for their own purposes - and then offer editors that they've built to the end user, if it's appropriate (the toolset in neverwinter nights, for example). I'm torn in half at the moment. I could easily dive into Torque and (from what I've seen) build a wonderfully rich environment, but in a way it almost seems like cheating. But then if I start from scratch, it really will take forever to achieve any kind of 3D game. So I guess at the end of the day my main question is: game engine or no game engine? Bury my head in C++ books, or dive into Torque? Sorry for asking a question that has likely been asked many times before, but if nothing else, I figured it would be a good way to start getting involved in the right community! :)
Advertisement
Most of us do the 2D route. Normally we build the 2D game (using a 2D API) from the ground up. With 3D games you can choose using an engine. Doing that will get your game off the ground quicker. When you get more comfortable with building 3D games and the maths behind it, then you can try building a 3D game from the ground up.

That's the most commonly travelled path.

For 2D however, we normally advise you do Pong, Tetris, Pac-Man, Super Mario Bros, in that order. Then whatever you want.

Someone more experienced with 3D could tell you in detail how to approach that.

Beginner in Game Development?  Read here. And read here.

 

Many thanks for the info - that's really helpful.

It looks like I'll need to bury myself in some C++ books for the next few weeks and see how I get on! :)
Albion,

Welcome to GDNet. If you're looking to become a hobbyist game programmer and eventually a career developer, you've come to the right place. Start by looking at the "For Beginners' Forum FAQ. It lists the basics.

If you've got a strong background in the semantics of your chosen programming languages, ie. loops, branching, variables, arrays, classes, etc...then your next step is to simply pick which language you want to use and get started.

Because you've got a lot of VB.NET I'd normally recommend going that route and using the MDX (Managed DirectX route), however, since you've also got C# experience I'd encourage you to use C# and check out the XNA Framework and the XNA Game Studio.

You'll find that with the XNA Framework it's much easier to wrap your head around how things are being rendered, and how the "app is actually flowing" because it's mostly a set of callbacks which you implement whenever you want to perform updates, and whenever you want to render the screen.

Tetris and an FPS style game are worlds apart. However, the principles easily extend from one to the other. You've got a world with objects which need to be updated based on user input and interaction with other game objects, and then you need to render that to the screen and play your sound effects. This process is the same regardless of which time of game you're making.

Different people approach the problem differently, and it all depends on what you enjoy doing most. Some choose to focus on the engine, attempting to write networking, rendering, UI, etc...code. These are essentially Engine Programmers, with an emphasis in a specific area. Most people today prefer to focus on graphics because they feel it's the most rewarding, I disagree. However, physics, audio, tools, etc...are all starting to get their day in the sun. So pick an area you enjoy and go with it...if you want to be an Tools/Engine Programmer.

Unfortunately, although engine developers may get the fundamental systems down, they rarely ever finish a complete game, often overwhelmed with finishing their engines. So if you're interested in game logic, rule systems, etc...you may consider becoming a Gameplay Programmer. In this case, it's almost always better to use an existing engine - Torque, Ogre3D, etc...and just focus on the things which are most important - the gameplay.

Now, I mentioned XNA above. XNA is somewhere between an engine and a set of libraries. It doesnt offer any "tools" per say, but it does have built in video, audio, and user input libraries which make it must easier to get started. As well, they have an application framework which makes it much easier to write FSM's and core game-play logic. I'm a big fan of the C#/XNA combination, and the website for XNA offers TONS of samples, tutorials, and even a few complete, commercial quality games to use as an example.

As to your assumption about companies, you're incorrect. Many smaller companies license 3rd party engines, because it's often more cost effective than paying 5-10 programmers to work for 2-3 years to recreate an already existing engine. Think about it...license a complete game engine for $100,000 - $250,000, or pay 6 programmers for 2 years (~$600,000).

You're correct, use Torque, etc...and you'll probably have a game sooner. And it's not cheating. You'll have completed demos to show game companies, etc...it's never a bad route to go. However, be careful not to become too dependent on an engine. Every company does something different.

So answer your questions specifically:

Use a game engine if you want to make games, dont use a game engine if you want to learn how engines are made.

Bury your head in C++ books if you want to master C++, dive into Torque if you want to make games now (with a little difficulty).

Again, my advice is to use C# and XNA, as you get a good mix of everything. You dont have to re-learn any more C++, you get a good basic framework for graphics, audio, and input - without having a complete engine provided for you. There's plenty of samples, tutorials, and examples...and C# and XNA is arguably easier to work with than C++ and DirectX 9 or 10.

Hope that helps.

Cheers!
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
Hi Jeromy

Thanks so much for the incredibly detailed and very useful reply!

Quote:Original post by jwalsh
Albion,

Welcome to GDNet. If you're looking to become a hobbyist game programmer and eventually a career developer, you've come to the right place. Start by looking at the "For Beginners' Forum FAQ. It lists the basics.

If you've got a strong background in the semantics of your chosen programming languages, ie. loops, branching, variables, arrays, classes, etc...then your next step is to simply pick which language you want to use and get started.

Because you've got a lot of VB.NET I'd normally recommend going that route and using the MDX (Managed DirectX route), however, since you've also got C# experience I'd encourage you to use C# and check out the XNA Framework and the XNA Game Studio.

You'll find that with the XNA Framework it's much easier to wrap your head around how things are being rendered, and how the "app is actually flowing" because it's mostly a set of callbacks which you implement whenever you want to perform updates, and whenever you want to render the screen.


Excellent - I'll certainly have a good look at the XNA Framework. I just had a read through of the FAQ, and I'm actually quite enthused by it. I'm a bit of an MS junkie at heart (I work for an MS gold partner), so I really like the idea of working with XNA with C#!

Quote:Original post by jwalsh
Tetris and an FPS style game are worlds apart. However, the principles easily extend from one to the other. You've got a world with objects which need to be updated based on user input and interaction with other game objects, and then you need to render that to the screen and play your sound effects. This process is the same regardless of which time of game you're making.


Very true! I think I'll definitely brush up on my C++ and recreate some classic games just so that I can get my head around the concept of game flow, as it's one of the important underlying concepts that needs to be understood. Once I understand the Tetris clone I've got running I'll move on to something like PacMan.

Quote:Original post by jwalsh
Different people approach the problem differently, and it all depends on what you enjoy doing most. Some choose to focus on the engine, attempting to write networking, rendering, UI, etc...code. These are essentially Engine Programmers, with an emphasis in a specific area. Most people today prefer to focus on graphics because they feel it's the most rewarding, I disagree. However, physics, audio, tools, etc...are all starting to get their day in the sun. So pick an area you enjoy and go with it...if you want to be an Tools/Engine Programmer.

Unfortunately, although engine developers may get the fundamental systems down, they rarely ever finish a complete game, often overwhelmed with finishing their engines. So if you're interested in game logic, rule systems, etc...you may consider becoming a Gameplay Programmer. In this case, it's almost always better to use an existing engine - Torque, Ogre3D, etc...and just focus on the things which are most important - the gameplay.


This is where I can't quite decide. Because of the development work I've done in the past, I don't need an instant graphical result to reward me for my work - I'm more than content when anything I've written works as it should - even if it's something that goes relatively unnoticed in the background. So maybe I'm destined to be an engine developer. What I don't want to do, though, is concentrate on this kind of approach and then find that there's not much call for engine developers, but more of a need for gameplay programmers. I guess for now I should have a play with both and see where it takes me.

Quote:Original post by jwalsh
Now, I mentioned XNA above. XNA is somewhere between an engine and a set of libraries. It doesnt offer any "tools" per say, but it does have built in video, audio, and user input libraries which make it must easier to get started. As well, they have an application framework which makes it much easier to write FSM's and core game-play logic. I'm a big fan of the C#/XNA combination, and the website for XNA offers TONS of samples, tutorials, and even a few complete, commercial quality games to use as an example.


Definitely going to look into this - the more I read about it, the more interesting it becomes. The fact that it's free and comes with lots of documentation and support helps a lot!

Quote:Original post by jwalsh
As to your assumption about companies, you're incorrect. Many smaller companies license 3rd party engines, because it's often more cost effective than paying 5-10 programmers to work for 2-3 years to recreate an already existing engine. Think about it...license a complete game engine for $100,000 - $250,000, or pay 6 programmers for 2 years (~$600,000).


I can understand this completely. It does make a lot of sense for companies that churn out a lot of games. I guess when I think of game development studios I tend to think of those who have really left their mark and stand out from the crowd, so people like Lionhead Studios spring to mind. I would absolutely love to work for a company like Lionhead. From what I've seen, I've assumed they develop their own engines from scratch? Maybe I'm wrong. But they certainly come up with some groundbreaking work.

Quote:Original post by jwalsh
You're correct, use Torque, etc...and you'll probably have a game sooner. And it's not cheating. You'll have completed demos to show game companies, etc...it's never a bad route to go. However, be careful not to become too dependent on an engine. Every company does something different.

So answer your questions specifically:

Use a game engine if you want to make games, dont use a game engine if you want to learn how engines are made.

Bury your head in C++ books if you want to master C++, dive into Torque if you want to make games now (with a little difficulty).

Again, my advice is to use C# and XNA, as you get a good mix of everything. You dont have to re-learn any more C++, you get a good basic framework for graphics, audio, and input - without having a complete engine provided for you. There's plenty of samples, tutorials, and examples...and C# and XNA is arguably easier to work with than C++ and DirectX 9 or 10.

Hope that helps.

Cheers!


Thanks again for all this info. It's all very useful. I'm going to read up on XNA now!! :)
Well I've just had a glance at the XNA FAQs and forums and also read through a very good tutorial (http://xna101.spaces.live.com/blog/cns!77EE4BD533D8ECAE!120.entry), and I'm really quite excited now. This is much closer to the tools I'm used to (C#.Net and VS 2005) than anything else, so I should be able to take to it fairly easily.

Thanks again for all your help!! :)

This topic is closed to new replies.

Advertisement