hi i've always wanted to make games. I've just watched indie game the movie and indie game the movie dlc and i feel really inspired. I already know c++ and the basics of python. I want to make 2d games and i'm thinking of learning a game programming library for c++ (considering i only know the basics of python) Can u give me some advice and give suggestions to which game programming library to use?
You should write most, if not all, of your game in C++. Python is probably fast enough for most 2D games, but if you intend to eventually move on to 3D it will probably be too slow, and there's a lot of cross-applicability between a 2D game engine and a 3D one so you may as well use C++ from the get-go. Java and C# are acceptable, though, even for 3D games, especially indie ones. As for libraries, I recommend either SFML or SDL. Personally I prefer SFML. Note that those aren't game engines, they're media libraries, but they provide almost everything one would need to make a game - graphics, networking, audio, threading.
It's also common to write things that aren't CPU intensive in an easier scripting language or make an interface for a scripting language. For instance, the Spring Engine interfaces to Lua (although they did certain things incorrectly such as doing pathing in a scripting language which is incredibly slow since you have a few dozen thousand units using different pathing).
Integrating scripting languages into your C++ game can be really interesting and make your game logic more flexible, but this has a high learning curve. It will take you quite a while to learn the native API for a language like Lua (I know because I worked on a wrapper for it a while ago).
You should get a library (use SDL) and get some basic form of real-time interaction working. From there just keep adding whatever seems cool at the time, writing the game logic directly in C++. You probably won't arrive at a solid game by doing this, but you really need to have some game development experience before you can design a game properly, and when you feel you're ready you can start fresh (but pull bits of code from your first project) knowing exactly what you want your game to be.
Indie Game: The Movie isn't exactly inspiring, by the way. We see Phil Phish acting like his normal self, Team Meat barely scraping by, and Jonathan Blow actually being awesome but only with lots of previous experience.
Indie Game: The Movie isn't exactly inspiring, by the way.
It may not have been inspiring to you two, but I know quite a few beginners and experienced programmers that were inspired by it, myself included. Also, I should note that,you don't have to be a success at all to be in the indie game scene.
Personally I feel the complete opposite as most people here do. When people are just beginning game programming I believe it would be much easier to learn to do it in a higher level language like C#, Java or even higher like Python. With the higher level languages it is much easier in my opinion to concentrate on the fundamental aspects of game development (Like Physics, Event management, particle systems, game state management, ect ect.) and not have to bother with all the glue that holds them together.
Yes there is a speed difference with higher level languages but lets be honest for almost any 2D game and even 3D games they will be creating the performance won't be a issue. It might be on commercial level games but for your purposes it won't be. Would you rather actually finish a game or spend 9 months making everything preform perfectly and maybe just eventually give up on it?
So my advice would be forget about speed for right now just learn the basics of game development first. Once you get that down you can start learning about optimizing what you know.
Though since you don't seem to have much experience in any other language other then C++ I will agree with the rest it might be a better idea to start out with C++ so you don't have to juggle learning a new language and learning about game programming all at once. So you might wanna look into one of the easier game libraries out there and definitely stick to 2D.
Whatever way you choose just remember to take it slow and start small. Here is a small list of libraries for the two languages you listed.
Pyglet - A 2d library for Python that uses openGL as its backend. This library is very well designed and there are some good tutorials out there for it. The documentation is a bit lacking but isn't nearly as bad as some libraries out there. It is also faster then its main competitor Py game in my opinion and also uses more of a OOP approach. This is my number 1 library to use when doing python game dev.
Cocos2D - This is probably one of the newest 2D libraries for Python. It was built on top of Pyglet and includes a good amount of features right of the bat (Like a basic particle engine, a decent way to manage different scenes (Levels, Menus, Loading Screens, ect), support for tile maps and even works with Tiled Map Editor, a basic collision manage for tilemap games and non tilemap games and other things). The only thing I don't like about this library is they have some of the worst tutorials out there and their documentation is really bad in my opinion. Other then that I would definitely use this library if I could figure it out. It has also been ported to many languages specifically Objective C where it is the go to game library for IOS game development it seems.
Pygame - This is probably the most known Python game library. Has a huge following and you can find a huge number of tutorials about it online. They also have pretty good documentation. Not really my favorite just because how the library is organized and how you use it, but that is just me.
Panda3D - Probably one of the most known 3D libraries for Python. I can't say much about it since I have never used it but have heard it gets pretty damn good performance.
pySFML - Basically a port of C++'s SFML for python. Haven't tried it out much but if you already know SFML this might be a good choice for when you use Python.
SFML - My all time favorite library for C++. Has a very good design and is constantly being updated (Checkout the nightly builds) and improved. Good documentation and tutorials (Even a book out on it) and great community so you should be able to get help with most of your questions. Definitely check this one out if you go for C++.
SDL - I'll be honest I don't care very much for SDL but it does have somethings going for it. They have a huge amount of resources online to help you learn about SDL. They also seem to have a good community and a lot of example programs to see how it works. Other then that I can't comment much but I will say stay away from any of the 1.X version because they use ancient techniques.
Orge3D - A 3D rendering library for C++. I have used this a little bit and from that time I got to say it was fun to work with. There are a good amount of resources online to learn from and I believe some books on it. Their documentation is a bit lacking but I didn't find it to bad. Some professional quality games have been written with orge3D so it definitely has potential.
DirectX/OpenGL - I would stay away from these until you get more experienced with game design in general.
Anyways whatever language you choose it doesn't really matter. What matters is you learn the fundamentals of game design. Once you learn that you will be able to easily transfer that knowledge to whatever library you are working with. Remember syntax is easy to learn.
I would also recommend you stay away from building your "own" game designs until you know them fundamentals. By your own game designs I mean games that you made up in your head. Instead go recreate the simple games like Pong, Asteroids, Space Invaders, The Worm thing, PacMan or stuff like that. They really are harder then they sound but they still will be much easier then trying to make your own game idea most likely.
Also each one of them will teach you about the basics of game development. Take asteroids for example it will teach you about using Physics and math to simulate motion in space. It will teach you about state management and collision among other things.
Whereas the game space invaders would teach you more about pathing and stuff like that. Basically my point is if you do these simple games first you will have the experience they gave you that you can call on when you are doing your own projects.
Anyways wish you the best of luck and if you have any questions about anything feel free to ask.
@ OP: I just want to add, when people here say "stick to 2-D at first" they are not saying you have to build a top down plat-former or a 2-D side scrolling game. 2.5-D, aka isometric projection, is just as easy as regular 2-D once you have everything drawn up (think Doom, Castle Wolfenstien, Duke Nukem 3D, Rise Of The Triad, etc). What we mean is stay away from the 3-D libraries for now because they add a layer of complexity that is discouraging for a beginner and the learning curve is too steep.