zeion said:
Hello,
I was just wondering what kind of language I should learn for getting into game development?
I'm currently working through some pygame tutorials. Is that relevant at all?
Thanks
It depends on what type of game you are trying to make. I used to involved in game development as a programmer and my comments come from those experiences.
Most games are very resource intensive. Most game engines have the goal of producing good visuals and sound, with a game that is as responsive as possible, and has a design that allows people to create a game as fast as possible with design decisions and implementations that make the above a reality.
Most decent engines provide a completely data driven and script driven system that has specific routines and data definitions that are directly tailored for games. The game engines usually provide a scripting system that is usually event driven and has a syntax usually along the lines of a modified C/C++ language or Java.
If you want to use an existing platform (Unreal, Doom, Quake, Torque etc), then it's likely that you will just need to get the SDK and start writing scripts, exporting models and level maps, and editing text files with a text editor.
If you want to modify (or create your own) existing engine, C++ is the way to go.
Because games are so resource intensive, a lot of the code is written not only in C++, but also in an assembler language of some sort: math routines are written in SIMD instruction sets like SSE2, shader routines are compiled to assembly routines that GPU's read and other routines use very optimal C++ routines that may even take advantage of specific platform execution environments.
With a game engine there are a lot of things to understand.
Scripting languages require compilation and interpretation. If you want to effectively unify the script environment with the C++ environment, you need to create base class design with a lot of metadata to do this effectively. Compilation requires compiler design theory.
Graphics is also a big thing. Back in the quake days people used to write their own triangle rasterization routines, but nowadays we just make a few OpenGL or DirectX calls. But even now with that done for us, its more complicated in different ways. Graphics cards have very extensive vertex and fragment pipelines complete with a complexity of options. You will have to learn all about this for any kind of 3D rendering.
If you want a GUI like that in Doom 3, you can do this by using your graphics routines to render to a texture. On top of that you will need a framework for UI, and you need to factor in design decisions with standard UI design to create the appropriate framework. Not easy by any means.
Then you've got optimizations. You optimize for rendering by using spatial classification systems (BSP trees, portals, octrees, and so on). You optimize the rendering pipeline (static vs dynamic objects), physics (collision detection), game play (hit tests), and others.
Now you have take all of this (and more) and figure out a way how to design it in such a way that its flexible and fast and allows you to create games pretty quickly while still giving good results.
Also I didn't even mention the whole networking thing: many professional engines design themselves around network communication. The client/server architecture is a centerpiece of the design not only to make multi-player capability optimal and to allow easy capability for server-side control, but it can be used to prevent cheating, and most gamers do not like to tolerate cheats.
To get around all of this you need to learn more than just languages: you need domain specific knowledge for things like graphics, AI, math, physics, UI, scripting languages, networking, audio, game specific, optimization, software design, and so on.
If you want to use python as a start then by all means do so. Just understand that if you want to go deep into the rabbit hole, you will at some point have to learn the kind of stuff I have mentioned above.