DirectX and OpenGL are just hardware abstraction APIs, OpenGL focusing on graphics whereas DirectX includes audio, networking and input. Knowing these APIs does not make you a game programmer, there is far more to games than just drawing graphics.
Games are generally CPU limited, that is, the CPU is at 100% all the time, so it is important to understand how various elements of programming affect CPU use. I'm not talking about machine code optimisation, rather, understanding how algorithms perform: std::list versus std::vector; A* versus Dijkstra and so on and knowing when and how to apply them. Then there's multi-cpu programming, understanding how to use shared resources, semaphores, mutexes, etc.
As well as CPU limits, games often have other limits: memory, IO speed (I'm looking at you Broken Sword 3 on XBox, I curse your loading times), ROM size (disk or hardware), so the term 'optimisation' is not always about speed, but can include data size or access times.
In addition to the game code, there is usually a suite of tools required to generate the game data - converters to transform graphic data into an engine compatible format, editors to build game levels, tools to edit AI behaviour. Understanding good GUI design can make the difference between a good tool and a poor tool and good tools will allow artists and designers the freedom to create better games either through ease of use or by allowing rapid iteration of ideas.
To sum up, don't focus on the graphics too much, work on the other stuff too. Of course, the problem with graphics is that you're unlikely to produce anything that looks like most commercials titles, they have teams of artists and designers who have spent years training to do their job or use expensive motion capture studios to generate the required data and failing to recreate these may eventually put you off game programming which would be a shame.
Some project ideas:
- Text adventure system using simple verb/noun (something like The Quill on the ZXSpectrum) - requires data driven design and parsing
- Scrabble - searching algorithms, simple GUI
- Tetris - real time gaming, audio, simple graphics (can add 3D elements)
- Effect editor - create a tool to view effects on 3D models, like texture blending, lighting, etc
- Physics demo - 3D boxes and spheres bouncing around in a room
- Multi cpu demo - errr, can't think of anything but I'm sure there's people here who will be happy to suggest ideas
Also, having a range of game and game related programs demonstrating various skills in your repetoire will help enormously when going to job interviews, provided they are complete of course.
And most importantly, learn about source control!
Skizz