Skip to main content
GameDev.net gamedev.net
🔒 Locked

What book to start from

Started by Myzz Battle May 14, 2016 at 4:49 AM 17 replies 4.3k views
Original Post
Myzz Battle
Myzz Battle
Hello. While I'm on summer break, I'd like to work on my game development skills. I want to create simple games using C++ language. I read an article on here that someone suggested. In it, the author suggested creating games like pong, snake, space invaders, etc. I'd love me to create these games, and hopefully more, this summer. B ut I don' t know of or have found a text that will guide me to properly do so. I was about to purchase the SDL C++ programming book (I recently learned the language throughout this school year).

So, I'm wondering if this text is the best to begin with; and will it help me create these games and then some? Thank you all for your feedback.
jjimenezg93
jjimenezg93
If you're about to start in game development and C++, I would begin with a game engine like Cocos2d-x (better) or UE4 (Unity is far better to begin with, but it doesn't use c++), so you can learn the general basics.

Once you do some simple things, you can get deeper in SDL, or directly OpenGL and create your own Input Manager, or your own Renderer or your own shaders.

I tell you that because, if you're not comfortable with C++, you must get used to it first, and you can do it at the same time you learn what's a sprite, how simple 2D math works, etc. But it will be harder if you're implementing something in such a low level.

There are plenty tutorials, documentation and forums about Cocos2d-x. I would begin with their official Programmer's Guide, and use their official forums too, which have a decently active community. It's also open-source so you could take a look at their code later, I think.

Good luck.
Alberth
Alberth

The 'current' problem with C++ is that it is moving so fast, that books cannot keep up. You want at least C++11 (5 years ago), which barely exists in book form. Anything before C++11 is obsolete. C++ itself is however already at C++14, and C++17 is on its way.

This makes buying a book a hazardous venture, as it's old before you have read it, so to say. You may want to rely more on online resources, eg

http://www.cplusplus.com/doc/tutorial/

and the reference site https://en.cppreference.com/w/ instead.

Books about SDL are mostly a waste of money, SDL is a C library, and it's pretty simple. A tutorial like http://lazyfoo.net/tutorials/SDL/index.php will work nicely.

Bregma
Bregma

The book you should start with is your netbook. By that, I mean start writing code. It doesn't have to be good code, it doesn't have to work perfectly, but it's gotta be code and you have to write it.

Passive learning from a paper book is not nearly as effective as JFDI and see what happens. Bits are cheap, use as many as you want.

Stephen M. Webb
Professional Free Software Developer
InferiorOlive
InferiorOlive

I agree with Bregma.

The internet is an awesome resource for tutorials, but if you're just copying code, you're not necessarily learning; you can, though, learn a lot about the general architecture of a game (gameloops, for example) as those can be a little less intuitive (or maybe I'm just slow).

Further, I'd recommend against using an engine for basic games like those you mentioned, as they can strip away a lot of valuable learning opportunities to a new game-programmer (and nothing you'll be making for a long time will actually need or seriously benefit from an engine like UE4).

Inspiration from my tea: "Never wish life were easier. Wish that you were better" -Jim Rohn   soundcloud.com/herwrathmustbedragons
Myzz Battle
Myzz Battle

The 'current' problem with C++ is that it is moving so fast, that books cannot keep up. You want at least C++11 (5 years ago), which barely exists in book form. Anything before C++11 is obsolete. C++ itself is however already at C++14, and C++17 is on its way.

This makes buying a book a hazardous venture, as it's old before you have read it, so to say. You may want to rely more on online resources, eg
http://www.cplusplus.com/doc/tutorial/
and the reference site https://en.cppreference.com/w/ instead.

Books about SDL are mostly a waste of money, SDL is a C library, and it's pretty simple. A tutorial like http://lazyfoo.net/tutorials/SDL/index.php will work nicely.







Thank you so much for sharing those links. I looked at the totorial site, and needles to say, I got excited. Again, thank you.
Myzz Battle
Myzz Battle

The book you should start with is your netbook. By that, I mean start writing code. It doesn't have to be good code, it doesn't have to work perfectly, but it's gotta be code and you have to write it.

Passive learning from a paper book is not nearly as effective as JFDI and see what happens. Bits are cheap, use as many as you want.


My thoughts exactly! Before classes were over, I was looking at some books. And most of them pretty much did that. Just had code for you to copy. Nothing like my textbooks, which forced you to learn the concept and then write your code.
WoopsASword
WoopsASword

Hello. While I'm on summer break, I'd like to work on my game development skills. I want to create simple games using C++ language. I read an article on here that someone suggested. In it, the author suggested creating games like pong, snake, space invaders, etc. I'd love me to create these games, and hopefully more, this summer. B ut I don' t know of or have found a text that will guide me to properly do so. I was about to purchase the SDL C++ programming book (I recently learned the language throughout this school year).

So, I'm wondering if this text is the best to begin with; and will it help me create these games and then some? Thank you all for your feedback.

From programming perspective,

First step is learning C++ properly, all advanced topics you don't know- Learn. Some of them: OOP, Multithreading, Networking, Graphics,etc..

Knowledge of the language is by far the most important skill- It's not mandatory to learn everything, if you feel you don't need it right now, don't learn it.

Secondly, choose your API/Tool, there are engines and libraries to work above the basic openGL api or directX api. Read about anything you can find and choose your favorite.

Lastely, Learn the API you chose.

From game development perspective,

You also need to learn how to edit sound, find and edit graphic images.

How you learn those is less important, it is your choice. If you feel you learn better using a book, find a book, if you find tutorials easier, take the tutorials.

Some topics I learned from books, some I learned from articles, The net has many sources for everything.

jjimenezg93
jjimenezg93

I agree with Bregma.

The internet is an awesome resource for tutorials, but if you're just copying code, you're not necessarily learning; you can, though, learn a lot about the general architecture of a game (gameloops, for example) as those can be a little less intuitive (or maybe I'm just slow).

Further, I'd recommend against using an engine for basic games like those you mentioned, as they can strip away a lot of valuable learning opportunities to a new game-programmer (and nothing you'll be making for a long time will actually need or seriously benefit from an engine like UE4).

So, you are pushing someone who is not even comfortable with C++ and knows nothing about games programming to develop their own rendering system (it doesn't matter how simple it is) or input management? I totally disagree with you in that point.

I think it's far easier to learn very high level stuff first, then go deeper and deeper to the lowest level.

BHXSpecter
BHXSpecter

Programming Principles and Practices Using C++ by Bjarne Stroustrup covers C++ 11 and C++ 14. The C++ Programming Language 4th Edition by Bjarne Stroustrup covers C++11 and makes a decent reference book. Beyond those books you could get SDL Game Development and SFML Game Development for learning to make games. Above all else, write code and learn as you go.

aeroKittens
aeroKittens

I agree with Bregma.

The internet is an awesome resource for tutorials, but if you're just copying code, you're not necessarily learning; you can, though, learn a lot about the general architecture of a game (gameloops, for example) as those can be a little less intuitive (or maybe I'm just slow).

Further, I'd recommend against using an engine for basic games like those you mentioned, as they can strip away a lot of valuable learning opportunities to a new game-programmer (and nothing you'll be making for a long time will actually need or seriously benefit from an engine like UE4).

So, you are pushing someone who is not even comfortable with C++ and knows nothing about games programming to develop their own rendering system (it doesn't matter how simple it is) or input management? I totally disagree with you in that point.

I think it's far easier to learn very high level stuff first, then go deeper and deeper to the lowest level.

Hmm.. at this rate its so easy to start a holy war on which is the best way to learn... and this holy war is not my aim, but just to state my opinion with reasons for the sake of not confusing the OP or anyone else seeking similar advice

I think NoAdmiral and Bregma are right because

1. I read and re-read the OP's post and I cannot see any indication where he stated he is not comfortable with C++. Instead his post indicates that he is not well vast in the language but wants to learn and willing to make the efforts

I'd like to work on my game development skills. I want to create simple games using C++ language.

2. The quote above also indicates he wants to be able to create games, which is ambitious enough in my view

3. The post you quoted or Bregma's did not suggest that OP should write a complicated rendering system but that he should learn and write code actively as against passive learning, or copying code, which is ineffective.

4. Learning without an engine doesn't mean you have to write a complex rendering system. It means for instance OP can learn about vectors maths, simple collision detection, simple game architecture and progress gradually. And also he should try to code these as much as he can and see how it affects games so that when he begins to use engines later he will have a proper knowledge of how things work at the lower level and that would make him a better game developer

can't help being grumpy... Just need to let some steam out, so my head doesn't explode... 
Myzz Battle
Myzz Battle

I agree with Bregma.

The internet is an awesome resource for tutorials, but if you're just copying code, you're not necessarily learning; you can, though, learn a lot about the general architecture of a game (gameloops, for example) as those can be a little less intuitive (or maybe I'm just slow).

Further, I'd recommend against using an engine for basic games like those you mentioned, as they can strip away a lot of valuable learning opportunities to a new game-programmer (and nothing you'll be making for a long time will actually need or seriously benefit from an engine like UE4).

So, you are pushing someone who is not even comfortable with C++ and knows nothing about games programming to develop their own rendering system (it doesn't matter how simple it is) or input management? I totally disagree with you in that point.

I think it's far easier to learn very high level stuff first, then go deeper and deeper to the lowest level.

Hmm.. at this rate its so easy to start a holy war on which is the best way to learn... and this holy war is not my aim, but just to state my opinion with reasons for the sake of not confusing the OP or anyone else seeking similar advice

I think NoAdmiral and Bregma are right because

1. I read and re-read the OP's post and I cannot see any indication where he stated he is not comfortable with C++. Instead his post indicates that he is not well vast in the language but wants to learn and willing to make the efforts

I'd like to work on my game development skills. I want to create simple games using C++ language.

2. The quote above also indicates he wants to be able to create games, which is ambitious enough in my view

3. The post you quoted or Bregma's did not suggest that OP should write a complicated rendering system but that he should learn and write code actively as against passive learning, or copying code, which is ineffective.

4. Learning without an engine doesn't mean you have to write a complex rendering system. It means for instance OP can learn about vectors maths, simple collision detection, simple game architecture and progress gradually. And also he should try to code these as much as he can and see how it affects games so that when he begins to use engines later he will have a proper knowledge of how things work at the lower level and that would make him a better game developer

Thank you for the interpretation. You were on target with everything, except my sex ;) . After reading and working in a book that illustrated the C++ language using UE4; I noticed that the engine did a lot of the heavy lifting- which wasn't what I wanted. After doing some research, I learned that learning game development through the use of an engine is still a good practice, but it's not the ideal practice. And since I want to apply the knowledge I've learned about the language and learn things that weren't taught in the classroom; I believe not using an engine (at first) would be best. Again, you were absolutely correct.

Myzz Battle
Myzz Battle

Thank you everyone, for sharing your advice. I deeply appreciate it.

Tanay Karnik
Tanay Karnik

After you become comfortable with C++, read Game Coding Complete, 4th Edition.

Take a look at the preview and you will be excited to read it afterwards. :)

jjimenezg93
jjimenezg93



I agree with Bregma.

The internet is an awesome resource for tutorials, but if you're just copying code, you're not necessarily learning; you can, though, learn a lot about the general architecture of a game (gameloops, for example) as those can be a little less intuitive (or maybe I'm just slow).

Further, I'd recommend against using an engine for basic games like those you mentioned, as they can strip away a lot of valuable learning opportunities to a new game-programmer (and nothing you'll be making for a long time will actually need or seriously benefit from an engine like UE4).


So, you are pushing someone who is not even comfortable with C++ and knows nothing about games programming to develop their own rendering system (it doesn't matter how simple it is) or input management? I totally disagree with you in that point.

I think it's far easier to learn very high level stuff first, then go deeper and deeper to the lowest level.
Hmm.. at this rate its so easy to start a holy war on which is the best way to learn... and this holy war is not my aim, but just to state my opinion with reasons for the sake of not confusing the OP or anyone else seeking similar advice

I think NoAdmiral and Bregma are right because

1. I read and re-read the OP's post and I cannot see any indication where he stated he is not comfortable with C++. Instead his post indicates that he is not well vast in the language but wants to learn and willing to make the efforts

I'd like to work on my game development skills. I want to create simple games using C++ language.


2. The quote above also indicates he wants to be able to create games, which is ambitious enough in my view
3. The post you quoted or Bregma's did not suggest that OP should write a complicated rendering system but that he should learn and write code actively as against passive learning, or copying code, which is ineffective.
4. Learning without an engine doesn't mean you have to write a complex rendering system. It means for instance OP can learn about vectors maths, simple collision detection, simple game architecture and progress gradually. And also he should try to code these as much as he can and see how it affects games so that when he begins to use engines later he will have a proper knowledge of how things work at the lower level and that would make him a better game developer

It's not a war, it's just that I think you're pushing him into the wrong direction.

First of all, he wrote in the original post:

"I was about to purchase the SDL C++ programming book (I recently learned the language throughout this school year)."

From here, what I understand is that he has done some C++, but he hasn't even faced a non-educational problem, so he can't be comfortable with the language.

Secondly, if he doesn't use some kind of framework to abstract some things, he will have to learn and implement really low-level things which will probably be too overwhelming and he will probably lose his motivation.

That's why I recommend him starting without having to worry about graphics implementation, as an example. Just to learn what the main loop is, how to manage and implement collisions, Entity-Component Systems...

As a conclusion, it's far easier to learn how things work before trying to make them from scratch, that simple.

Anyway, follow the path you prefer.

Best regards.

Note: I never said I did not agree with that about active learning
Spinningcubes
Spinningcubes

I found this website a while ago, http://www.learncpp.com. I have not checked it myself but it looks like it good resource to learn with.

It should not take to long for you to be able to play around with SDL and get something graphical showing. The SDL Tutorials at this website might be a good start. http://gamedevgeek.com/tutorials.

Don't worry to much about using the latest C++ magic, my code looks like it is written in 1992 ;). Do what you enjoy so that you stay motivated to keep learning. Have fun :).

Alberth
Alberth

The SDL Tutorials at this website might be a good start. http://gamedevgeek.com/tutorials.

That explains SDL1, not really worth learning, as SDL2 is the current version, which does things a little different, in particular in the video area.

[More stuff seems old, Lua tutorial uses 5.0, while we're at 5.3 currently, approach this site with caution :) ]

Chad Smith
Chad Smith

If you feel comfortable with C++ I do recommend this book: do highly recommend SFML. Though I do recommend a good knowledge of C++ and even some C++11 (this book gets a +1 from me just because it does use some of the C++11 features)

The reason I really like that book is because I feel it gives you a good idea of how a Game is actually put together and how all the pieces work and function together. It doesn't just go and have you copy and paste code all of your code in main.cpp, and have it work but scare you away from ever programming a game again. In a few places it does "over engineer" some code for how simple of a game you end up making, but it really gave me a lot of knowledge and helped me out a lot in seeing all the pieces of a game can fit together and left me with enough resources to go out and experiment and learn even more complicated things on my own.

Though in the end, the most important resource to learn it all: is you sitting down at your computer and doing it yourself. Just start doing something and don't quit. Just give yourself some really small goals of "get a ball on the screen." Then maybe "I wonder if I can move this ball?" That leads to "lets to try to get this ball bounce around" and next thing you know you have made yourself a Pong Game by just setting some really small goals

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.