Most programers use API's so when they're rendering or drawing 3D shapes/objs they are using something like DirectX or OpenGL to do that stuff for them...
1) so their first job is to use the API to reliably draw and put things on the screen to build the basic structure of the game engine which handles putting things on the screen.
2) An API however will not really help you cycle through the character animations to have the character walk/run/talk etc.
So they must create a "character engine" to handle the animations
3) Also, the API's won't help you that much with effects like explosions/rain/particles/smoke those require a bit of math and insight.
4)Movement and physics are also key in making a believable game and API's are not much help there - you can buy a 3rd party Physics system but not many small orgs do that.
5)and the AI - that is something that won't be made by a pre-existing API.
6) Finally - there is the UI or controls and buttons and interfaces that make up the game.
I really want to add something here because 3d game programming is my thing. But I think if you read everyone else's posts you'll have a good idea of what game programmers program. The most important thing that you should understand is that a game engine should be written so that you can setup various entities in the world and then they will automatically behave the way they are supposed to behave as defined by the game engine. For example you can create a 'bot' by defining all of its attributes in a script file (how fast it moves, how accurate and fast it shoots) and then give it a 3d model to be displayed in the game, and then you place that file in a directory that the game engine looks for to load bot information and it will correctly display your bot in game.
What I'm trying to say is the programmers should generate a game engine that allows for 'plugins'...little should be hard coded and you should be able to modify the crap out of it...I'm going to go play counter strike now (which is a modification of the half life engine, which is a modification of the quake2 engine)
Yeah, Silvercord is right, Pretty much, you want to allow openness in your coding, so its not just stuck in a certain way. Thats why when i Program different entities, even the player entity, i use a Base class i have , that has a Camera object, a 3d model object (im still working on learning this, im thinking MD2s would be pretty good for a beginning game), and all the differential stuff one would need. Generally, in a team environment, there will be a couple programmer working with eachother on the main graphics engine, and a few programmers working on all the in game programming (i.e. setting up the rule system, quests, and weapon table matrices if it were an RPG), then there are the Sound artists, the model artists, the 2d/texture/etc. artists.
Of course not forgetting the map makers, and even more importantly the designers (who were often programmers at some point)!
This is a multi-BILLION dollar industry, yet many people don't take it very seriously.
Openness is very important. I used to not think so, but it is great to develop your engine, and not have to worry too much about the engine thereafter. Just script and map in a bunch of crap, and boom! you got a game.
You mentioned Artificial Intelligence above. What exactly is the difference between AI applications and ordinary programming? I thought that all programming was a form of artificial intelligence.
contexts. When you are dealing with controlling the movement of an entity controlled by the computer in a game then people call it artificial intelligence. When you are dealing with a system that controls data in a data base you just call it an application, but you are technically right it is all artificial intelligence.
... think of what a game is... ignore all of the colorfull graphics sounds and sprites and what do u get?? a program that during each cycle detects vector collisions and acts upon them allows user input, renders images etc etc thats all most game programmers do just make this program then the artists make the nice drawings to be put into the image files that accompany the program, i myself when creating games inititialy make the engine, make a scripting language such that the game can be completed without the need of modifying the exe (also allows for updates etc) and during testing and debuging i use solid rectangles to check visual collisions comply with the system checked collisions etc, most programers cant draw the windows logo (as if u would want to anyway ^^) if u went into game programming relax u wont have to do any drawing unless u wanted to of course ^^