• 11
• 14
• 13
• 10
• 11

# Is starting with gamedev too much?

## Recommended Posts

So i wanted to learn programming and got myself a nice C++ book because that seems to be the language where i can realize most of the things i wanted to do. (Things like emulation programming). I read the book, understood most of the concepts and got myself pretty comfortable in C++ (still a beginner though). So after finishing the book, i wanted to get really good with the language before i dive into reverse engineering/assembler and such things, so some people recommended to learn a nice framework as the next step. So i chose to learn SFML as my next step and make some games with it (also really interested in gamedevelopment). I read the rather short tutorials on their website and was able to make my first game within a day. Even though it was just a pong clone i had so much fun doing it so i bought myself a SFML book. This one to be precise https://www.amazon.com/SFML-Game-Development-Jan-Haller/dp/1849696845

The first chapter was still easy to understand but by the second chapter already, where the author talked about Resource Management, i couldnt follow it anymore. He used concepts i never heard of such as unique pointers for example.

So my question is, should i learn something else entirely to get better in C++, learn something even easier than SFML for game dev. or even a complete different laguage? I would like to stay at game development at first, because making games seems to be a really fun process where you learn alot.

##### Share on other sites

Hi, I don't know if I can offer the best answer, someone on these boards will no doubt be better educated to answer your question, but from my understanding c++ gives you tremendous power to develop software specific to a particular system.  So the pointers you've mentioned I think are more the nitty gritty of what C++ can do.  It's there if you really reeeally need it but isn't necessary to game development.  What do others think?  am I out to lunch on this one?

##### Share on other sites

Hi, I don't know if I can offer the best answer, someone on these boards will no doubt be better educated to answer your question, but from my understanding c++ gives you tremendous power to develop software specific to a particular system.  So the pointers you've mentioned I think are more the nitty gritty of what C++ can do.  It's there if you really reeeally need it but isn't necessary to game development.  What do others think?  am I out to lunch on this one?

I never looked at it like that, always thought everything i read in a book is super important

##### Share on other sites

std::unique_ptr allows you to create a pointer that will delete its contents when it leaves scope. It's found in the <memory> header.

One of the most common errors in C and C++ programming is called a "memory leak". This is a case where you allocate memory for an object and then forget to release the allocation after you're done using it. Apart from simple forgetfulness, there are a significant number of "gotcha" situations where it may seem like you're releasing the allocation, but the program's path of execution doesn't reach that point for one reason or another.

Rather than expending more and more resources trying to teach programmers to do something that's simply not easy for humans to do correctly, we have come to rely on design patterns that make common bugs like this either impossible to commit or else obvious and easily identified when they occur. In the case of memory leaks the answer is smart pointers.

std::unique_ptr is for sole ownership of an allocation. It can't be copied as it is not intended to be copied, so it defends its ownership. If you want shared ownership (note: this is usually a mistake) you can use std::shared_ptr<>, which allows itself to be copied and doesn't release its resource until all the copies for that resource are destroyed.

Here's an example for unique_ptr

#include <iostream>
#include <memory>

struct Derp {
Derp(int val) {
a = val;
b = a + 1;
c = b + 1;
}

int a, b, c;
};

int main() {
std::unique_ptr<Derp> derp; //this is a pointer to a Derp - the initial value is nullptr

derp = std::make_unique<Derp>(1); //use std::make_unique<>() to safely allocate and pass constructor arguments

std::cout << derp->a << ":" << derp->b << ":" << derp->c << "\n"; //you can dereference the smart pointer as if it were a raw pointer

} //when the object leaves scope it will delete the allocation automatically


It would be worth your while to check out http://en.cppreference.com/w/cpp/memory/unique_ptr.

You may also want to take a look at other common STL objects such as std::string and std::vector.

##### Share on other sites

Then I suggest you to move to a book talking about the C++ standard library. A recent one (which should cover C++ 11 at least). This one should cover all concepts/practices modern C++ programming should go along with, but which might not be covered by a book talking only about the language.

##### Share on other sites

Well, speaking from my own experience, the first thing I did with programming was decide "I want to make make games" so picked up some books focused on games programming in C++. Realistically, the very starter books were just intros to programming / programming concepts with a "game" theme.

I would say that jumping straight into C++ can be a great, and very fun experience, but it will require finding the right books / style of learning for you. There are some books I just dont get along with, so if you have the budget I would say buy a few different books to give yourself different writing styles / teaching methods.

And as mentioned above, make sure the books are up to date, most will state C++11 etc on them so you can see which ones will be using the newer features of the language. The only time this is slightly less relevant is when you have a decent amount of experience and are looking for books on certain topics where you would be able to easily adapt the code examples to use the newer features yourself.

##### Share on other sites

Oh I remember the days when I first learned c/c++ over a high school summer break. I also grabbed a book on making video game during that time. I had to learn how to make a c/c++ game using vga's modex. I still have that book on my book shelf, ripped in two down the spine, and I just paged through it after reading the original post. In my opinion; SFML is metaphorically like programming for dos. Make some system calls here and there to setup your graphics, sound, and input and then make some library calls to render some geometry after some processing in your main loop. My two cents here is to say go for it!

Since it was mentioned that emu programming is a driving aspiration to learn; I suggest my favorite starter book here, because the author really simplifies the explanation on how to build a computer literally from relays and transistors. I think that would guide you towards understanding how computers truly work.

##### Share on other sites

Since it was mentioned that emu programming is a driving aspiration to learn; I suggest my favorite starter book here, because the author really simplifies the explanation on how to build a computer literally from relays and transistors. I think that would guide you towards understanding how computers truly work.

Looks like a really interesting book, but im studying technical computer science so i have a bit of knowledge about that already :P

Yea the book is rather old, its was written in 2008/9 or something and i bought it when i was 14 or 15. Never really finished it until recently.

##### Share on other sites
C++ can be a rough road. I took two semesters of the language in college and foud it to be a fun challenge. When it comes to C or C++ I always tell people to look at their end goal and ask a question. Is there a more modern language I can use to achieve my goal? If the answer is yes then use that language. The biggest learning curve is on your first language if you have learned the basics of programming in C++ then interpreting those concepts in modern day languages isn't likely to pose the same challenge as your initial experience.

The simple fact is that you are the artist l. Languages, libraries and frameworks are tools. Always choose the most efficient tools that will allow you to express your vision.