If you have any questions on programming, this is the place to ask them, whether you're a newbie or an experienced programmer. Discussion on programming in general is also welcome. We will help you with programming homework, but we will not do your work for you! Any porting requests must be made in Developmental Ideas.

First a small intro about myself and my company:
So I started a company some weeks ago called Terrafrost Entertainment. It's, obviously, a game development company. We are currently only 2 people. It's me and a friend of mine.
I'm supposed to be the game developer (the programmer) and he is the Creative Director. We do not have much experience in game development.

Our current goal:
We want to make a tower defense game. We want to make it in 3D, but since we haven't made any actual game before, we'll start out in 2D. It will be a platform game. The engine and graphic will be almost the same as in Terraria (If you've heard of it. If not, google is your friend!) We have not planned out much yet, but this is kind of what we have thought of so far.

So, we are both very eager to start.
However, we are not sure at all where we should begin. I do not have much experience in programming. I know some basic stuff, but nothing much. It would be nice if we could get some tips on how to start and what language I should start learning (I do not want to go through a online tutorial, since these are made by people that do work with other stuff. I want to learn by a book that is written by someone that gets paid to write the books about programming)

1. Language
Depending on what platform you want to reside your final product.
I think good choice would be a C++ or an Objective-C.
They are both high-level, objected oriented procedural languages, you can start from any of them.
Choice in favor of Objective-C сan be made on the basis that it supports by all I-Devices, like Macintosh, iPad, iPhone, etc.
C++ is more general, it supports by a wide variety of different platforms.
If you want your game to be runnin' on Android devices, you could look in the side of Java. It's an another high-level language too.
About knowledge, it depens on how difficult your game would be.
I recommend to look at the basics:
1. Books about generating computer graphics in general. They are both touching 2D and 3D issues, basic algorithms of drawing, you should look at them.
2. Matrix translations. No matter how many dimensional game are you building, you would need them anyway.
3. GDI, STL, patterns, sorting algorithms. You would probably need them anyway.
And GDI will give you a good imagination of how a drawing process is performed (including message quees, messages, etc.)
4. Classes. They are really good stuff, helps you to abstract your data from the rest of your program. So look at them too.

Well, you described that you have some experience with a programming language; so, what have you worked with in the past? For game development, the obvious choices are still C/C++ with C++ being useful if you use it with an object-oriented approach in mind and C being good for embedded platforms and areas where speed and size are a big factor.

You could move to even higher-level languages than C++ (C being a lower-level language) such as C# to develop on both Windows and the XBox 360 (licenses pending).

You could even use existing engines like Unity, which supports a form of Javascript they call UnityScript or a form of C# that also integrates with the engine.

It's up to you on how much digging you want to do. These days, you can find online tutorials to get started that are as good or better than most books; however, if you're absolutely set on finding some physical reading material, I can recommend a few books based on your choice. It's easier to get started in a higher-level language where quite a lot of the tasks are already done for you (data structure implementation, garbage collection, low-level threading, etc) and you're more likely to continue if you aren't bogged down by the technical knowledge needed. As for 3D, if you aren't comfortable with matrix/vector mathematics as well as the concepts revolving around vertex shaders, fragment shaders, etc, you probably want to use a high-level 3D library that will come with a standard suite of shaders as most games these days make heavy use of shaders to pull off a variety of graphical tricks without devouring the entire GPU.

I didn't understand much of what you guys was saying, but I'll give it a shot.

I'll go for C++, as both of you said it was a good language.

For my previous experience; I've only made stuff like a pacman game with Python. Nothing big. I've just followed some series on YouTube.

We kind of want to make a game from scratch. No engine, no nothing. I know that this requires a lot of work, but we are willing to do that. We want to learn as much as possible while making this game. (It's not going to be huge, just for us to start with something).

If you strongly disagree with doing it from scratch, please tell me, and tell me why! Eventualy what engines should I go with? I want to program as much as possible. I don't want to use something like Unity where I have to use a lot of time to learn how to use the engine/libary. I want to get to the programming.

For c++, what compiler should I be using? Should I be using Microsoft's Visual C++, or?

EDIT; We will make this game for Windows. we are not going to make anything for iOS or Android just yet. I want to learn how to make it for Windows first.

Well, choose of compiler depends only on your personal preference.
I'm not saying about differences in the compilers, for example, GCC is a leader in full-program flow optimization, and ICC is the best for mathematical applications (it utilizes all the resources of CPU it provides).
MVC is proprietary, but there's exist a free version of this compiler. So as a beginner you can start with it, anyway, at your stage, it's no big difference, which compiler to choose, so you can pick MVC, it's an easy-start.
As you decided to make your game for Windows, using C++, you should look at the books, describing basic architecture of the Windows desktop application.
Then you should look at classes (C++) and get understanding of what game flow is.
After that if u want a good graphics in your game, you should look at Direct2D or OpenGL.
That's all.

RyoDC wrote:Well, choose of compiler depends only on your personal preference.
I'm not saying about differences in the compilers, for example, GCC is a leader in full-program flow optimization, and ICC is the best for mathematical applications (it utilizes all the resources of CPU it provides).
MVC is proprietary, but there's exist a free version of this compiler. So as a beginner you can start with it, anyway, at your stage, it's no big difference, which compiler to choose, so you can pick MVC, it's an easy-start.
As you decided to make your game for Windows, using C++, you should look at the books, describing basic architecture of the Windows desktop application.
Then you should look at classes (C++) and get understanding of what game flow is.
After that if u want a good graphics in your game, you should look at Direct2D or OpenGL.
That's all.

Thank you for the nice reply!
I'll get those books and read them (in the order you listed - based on the titles of the books, that seemed to be a good order)
I'm sure I'll learn what Direct2D and OpenGL is in those books, and how to use it? =D

Ayla wrote:So you started a game development compagny, and you have nobody who know how to program? ...

I'd suggest to write a dead-simple 2D game in C using the SDL library, like a Pong game for instance.

We started a company that currently is doing game servers for games like Minecraft, Battlefield and Counter Strike. We are now starting to make small games.

I've been doing a bit of Flash, so I am able to make a game like that, just not in C++.
However, we need a system that allows me to do the coding, and my friend to do the drawing and graphic stuffs. How?

I think I will learn C++ programming form the book "C++ for Dummies" instead of the "Windows Programming" book that was linked earlier in this thread. I will buy the other books if that is necessary. Will I learn how to make a game engine from scratch, and how to add the graphics?
We are thinking about a long-term project for a game that is a bit more advanced then this: http://www.youtube.com/watch?v=B2XtgBCmJ_M
That got better graphics, and as said, is more advanced.

We will run short-term projects at the same time to learn more programming and how to actually make games.
How should my friend learn to make graphic that I can implement in the game?

You should learn, but firstly, I think, it would be rationally to start from more general tasks, like realisations of some classic algorithms and some ordinary objectives.
Then бцрут you got understanding of the language and how program works in the system, you can go to a windows programming.
2d graphics can be made in any 2d editor, name one, any that you like, Photoshop or GIMP for example. But take note that if u want a commercial success of your game, you must care about licensing issues, or your startup company, most likely, would fall into a troubles.
Well, no one dehort you from writing your own graphics painting software, so you can develop your skills by coding such a software.
Anyway, on that level, that you are, I personally admonish you from plunging into any advanced concepts, because you probably shouldn't unserstand anything.
Start from really mere tasks, and then gradually move to more complex.

RyoDC wrote:You should learn, but firstly, I think, it would be rationally to start from more general tasks, like realisations of some classic algorithms and some ordinary objectives.
Then бцрут you got understanding of the language and how program works in the system, you can go to a windows programming.
2d graphics can be made in any 2d editor, name one, any that you like, Photoshop or GIMP for example. But take note that if u want a commercial success of your game, you must care about licensing issues, or your startup company, most likely, would fall into a troubles.
Well, no one dehort you from writing your own graphics painting software, so you can develop your skills by coding such a software.
Anyway, on that level, that you are, I personally admonish you from plunging into any advanced concepts, because you probably shouldn't unserstand anything.
Start from really mere tasks, and then gradually move to more complex.

Would we get problems with licenses and such if we made the graphics in Gimp or Photoshop? o:

Could I change the "Windows Programming" book for the "C++ for Dummies" and still read the other books?

Would we get problems with licenses and such if we made the graphics in Gimp or Photoshop? o:

I think you wouldn't, really, so don't bother Gimp is a free software, you don't need to pay for it's copy, so with the usage of free software you don't get any troubles.
If you decided to use Photoshop, which is a commercial product, and it's copy cost money, well, there can be some. But really I don't think so. Such problems only have small, but officially registered companies, who had on their computers unlicensed software (serial or key received through keygens or cracks).

Could I change the "Windows Programming" book for the "C++ for Dummies" and still read the other books?

It's on upon your understanding of the topics. Well, "Windows programming" is, of course, for more advanced programmers. If u feel dummy in many questions, described in this book (for example, you don't understand examples, listed in C), you certainly should start from a books for dummies.

I think you wouldn't, really, so don't bother Gimp is a free software, you don't need to pay for it's copy, so with the usage of free software you don't get any troubles.
If you decided to use Photoshop, which is a commercial product, and it's copy cost money, well, there can be some. But really I don't think so. Such problems only have small, but officially registered companies, who had on their computers unlicensed software (serial or key received through keygens or cracks).

So if we purchase Photoshop, there won't be any problems there either?

It's on upon your understanding of the topics. Well, "Windows programming" is, of course, for more advanced programmers. If u feel dummy in many questions, described in this book (for example, you don't understand examples, listed in C), you certainly should start from a books for dummies.

I think I will start with the "C++ for Dummies" book since its 250$ cheaper

So if we purchase Photoshop, there won't be any problems there either?

Well even if you not, as I mentioned, I extremely doubt that there would be so, unless you're livin' in the country with a super-restrictive sets of laws and police, having direct control on the all aspects of private life of their citizens, which, of course, is a nonsense.
But, in anyways, and it would be just safer to you, if u purchase a licence.
So yeah, by purchasing a product you get rid of many potential problems that might fall on your head.

I think I will start with the "C++ for Dummies" book since its 250$ cheaper

No one prohibits you from buying a used books, they are much cheaper and contains almost the same.

RyoDC wrote:MVC is proprietary, but there's exist a free version of this compiler.

This is true for now, but MS has announced that the free compilers for Visual Studio 11 will only be allowed to build Metro apps. They have also removed the compilers from the Windows 8 SDK package. The reaction to this has been almost universally negative, so maybe they will eventually reverse this decision. Visual C++ Express 2010 and the Windows 7 SDK will probably be around for a while, but they will probably be removed eventually. Perhaps this should just be another motivation for writing well-organized and portable code so that no single tool vendor can lock you into their product.

Claryn wrote:So if we purchase Photoshop, there won't be any problems there either?

Using the program is not inherently a problem. However, there is stock content shipped with Photoshop whose copyright remains with Adobe (or its licensors); if you choose to use this material in your work, then you would be subject to additional restrictions as part of a copyright license (and IMO it's a questionable license that you should avoid unless a copyright lawyer clears it for your intended distribution/use model).

"You know, I have a great, wonderful, really original method of teaching antitrust law, and it kept 80 percent of the students awake. They learned things. It was fabulous." -- Justice Stephen Breyer

Also, keep in mind that many people tend to learn a lot better simply by looking at code and reading it (especially after learning the basics). I didn't pick up a single book on programming C or C++ before I taught myself those languages, mostly through looking at other people's code and learning from it.

Some people certainly learn more from books, of course. However, before investing large amounts of money on any sort of books, you may want to check out what resources you can find online for free. Chances are, you'll be able to find more than enough to get started.

Finally, in agreement with Ex-Cyber above, you should aim to make portable code that isn't locked into one single vendor. I wouldn't recommend buying any books on general Windows programming, as they probably aren't going to be the most helpful things for developing games. Note, I haven't looked at any of the resources suggested in here, other than briefly looking over the titles as I read through the topics, so I can't really comment one way or the other on any specific book selections (also, as mentioned, I didn't really learn programming from a book, so any comments I would have on them probably wouldn't be particularly helpful).

If you're just looking at getting into game development, I'd recommend looking at the NeHe tutorial programs for OpenGL. That way, you can still target Windows, but not be tied into one specific architecture. I'm specifically speaking about the "Legacy Tutorials" and "Legacy Articles" on that site. Mind you, they mostly cover OpenGL immediate mode, which isn't the recommended way to do things anymore, but it should still work in general. I learned quite a bit about OpenGL and graphical/game programming in general from reading the tutorials there, and I know a lot of other people who did as well.

One last thought I'd like to leave you with is to not expect to get a hold of everything overnight. Learning how to program in general is a thing that takes a lot of work and patience. Game programming adds more complexity on top of that, and requires thinking about things in a much different manner than desktop application programming. One thing I was told in the first CS class I ever took (in high school) was that it takes you 3 years to master your first programming language. It takes you three months to master the next one, three weeks the one after that, and three days the one after that. It certainly does get easier as you go along, but the initial learning curve can be quite steep (I don't necessarily agree with the 3 year figure, but I didn't want to change the quote ).

BlueCrab wrote:Also, keep in mind that many people tend to learn a lot better simply by looking at code and reading it (especially after learning the basics). I didn't pick up a single book on programming C or C++ before I taught myself those languages, mostly through looking at other people's code and learning from it.

Some people certainly learn more from books, of course. However, before investing large amounts of money on any sort of books, you may want to check out what resources you can find online for free. Chances are, you'll be able to find more than enough to get started.

Finally, in agreement with Ex-Cyber above, you should aim to make portable code that isn't locked into one single vendor. I wouldn't recommend buying any books on general Windows programming, as they probably aren't going to be the most helpful things for developing games. Note, I haven't looked at any of the resources suggested in here, other than briefly looking over the titles as I read through the topics, so I can't really comment one way or the other on any specific book selections (also, as mentioned, I didn't really learn programming from a book, so any comments I would have on them probably wouldn't be particularly helpful).

If you're just looking at getting into game development, I'd recommend looking at the NeHe tutorial programs for OpenGL. That way, you can still target Windows, but not be tied into one specific architecture. I'm specifically speaking about the "Legacy Tutorials" and "Legacy Articles" on that site. Mind you, they mostly cover OpenGL immediate mode, which isn't the recommended way to do things anymore, but it should still work in general. I learned quite a bit about OpenGL and graphical/game programming in general from reading the tutorials there, and I know a lot of other people who did as well.

One last thought I'd like to leave you with is to not expect to get a hold of everything overnight. Learning how to program in general is a thing that takes a lot of work and patience. Game programming adds more complexity on top of that, and requires thinking about things in a much different manner than desktop application programming. One thing I was told in the first CS class I ever took (in high school) was that it takes you 3 years to master your first programming language. It takes you three months to master the next one, three weeks the one after that, and three days the one after that. It certainly does get easier as you go along, but the initial learning curve can be quite steep (I don't necessarily agree with the 3 year figure, but I didn't want to change the quote ).

Thank you for a good reply!
I'll look into the OpenGL tutorial and other free-tutorials or codes to read so I can learn more.
The reason I don't want to learn from any free tutorial is because those people does not get paid for what they do. People that writes books and earns money on it, will put more effort in it which makes the quality way better!

I am totally aware of that learning programming is not something I do over night. I know that it takes months, maybe years to fully understand and master a language.

Claryn wrote:
The reason I don't want to learn from any free tutorial is because those people does not get paid for what they do. People that writes books and earns money on it, will put more effort in it which makes the quality way better!

That's not necessarily true. Just because you're getting paid to do something doesn't mean you'll do a better job. Very often, if you're writing a book, it means you're working under a deadline. The people who write tutorials for free are doing so because they have a genuine desire to help other people learn. Right now, I'm looking into learning how to build electric guitars. Sure, I could buy a book and build an electric guitar, and it would probably work. But instead of buying a book, I'm doing research on the internet. I now know of a bunch of different approaches to carving a neck profile, because there's more than one way to do it. Now when I go to make a neck, I can figure out the way that I think will work best for me. You'll also learn on the internet that there's more than one way to write code to do some particular thing, instead of the one way that the guy who wrote a book shows you in the chapter on how to do that thing. I hope that makes sense.