You're asking a strange question because you're mixing different libraries and terminologies here... learn direct3D (not really the other DX libraries, unless you want to) if you want to do more hands-on graphics programming at a lower level. On the other hand, as a rendering engine, Ogre will still have you dealing with graphics math, but usually on a higher level (it wraps D3D and OpenGL functionality for you). This may give you less experience with graphics but will likely provide more experience in dealing with game programming, dealing with scene graphs, engine structure, and so on. Either way, if you want to make a game you will still require additional libraries for other functionality, such as sound and input. You can easily mix DirectX libraries with Ogre, too.
Learn both - they'll teach you different aspects of graphics and game development.
My first introduction to games was the NES, which I really enjoyed. At age 6, the games were fun but they never really blew me away. 2 years later, my family got a PC and I never touched the console again. I have to give the honor of most memorable game to Descent though, simply because it was my first PC game. I played it to death at the time.
I already loved the game, and then something magical happened - my school got a computer center, and the only multiplayer game there was a demo of descent 2. In that microcosm, I was a champion - not one of the best - THE best, and by a long shot too - those other kids were just learning the ropes, but I had completed both descent 1 and 2 multiple times. It was the only thing I really good at at that age, besides drawing demons.
There were so many other games though - initially these were Doom, Heretic, Duke Nukem 3D... but the list just goes on and on..
Well, I did not code in high school. I mean I fumbled around with C++ but I only got serious about it in my university years. I do NOT regret this at all, but I do regret not pursing art more in high school (I only did so in my final year). I had pretty bad grades in school but I had a great time, I did some sports but not so much. I drank too much, which was definitely a waste of time, but at least I got over it and got the stupid out of my system.
Here's my 50c worth though - think about what you really gained from high school? Do you really remember all you learnt? Chasing girls and being shot down by them - playing sports, getting injured, losing, dealing with failure, dealing with people, even work ethic - these things, they teach you a lot about life though experience. And they are important things to learn and are the things that can carry you far in any and every career - I know incredible coders who are great people, but they are socially retarded, and it has always hurt their careers and social interactions. Many people whom I respect - from technical backgrounds - have said that they learned more from playing sports than they did in their respective disciplines. That says a lot to me.
As has been said, it's all about balance - and you have to decide what's important to you. Personally, I feel that there is so much important stuff to learn outside of coding, and although you can always get to that stuff later, it's just a great environment in which to have such experiences. Some people on this thread are going on as if coding is all there is to life, and if that's how you choose to live your life, then fair play to you. But it hardly seems balanced to me.
First and foremost, don't get ahead of yourself. Not to shoot you down but... all those languages? Really? You find java confusing and all you've gotten out of C++ is an error? Then you say you "like" pointers and claim that assembly languages don't screw with your perception of reality? And you want to write your own language?
I have to say that this all sounds rather airy, and no, there is no "messiah" of programming languages - otherwise, why would there be so many? Different languages are good at doing different things, and few (read: none) of us are able to get away with only knowing one. By the way, there are a few IDEs available for Python.
Unfortunately, I just don't really see much grasp of fundamentals here, and if you want to neglect that then you are going to put yourself through an excruciatingly painful experience. Game programming is hard. Apologies for all the negativity here, but pick a language, sit down, and learn it properly. You are throwing around far too many ungrounded opinions.
Now, think about what you really want to do in this game. People talk about speed a lot, but I think the value of that is hugely exaggerated in most cases - yeah C++ is generally faster, but are you really willing to increase your development time for what is probably a trivial and negligible increase in performance? Regarding Java: Garbage collectors today are excellent tools and no, you will NOT have memory leaks, though there is a performance hit. C# is the same story as that, and is slightly better in terms of design (although the portability is not as good, but forget about it coming from microsoft. Stuff and nonsense from idiotic fanboys - C# is a great language).
You have to decide what language is best for you - nothing is "all round" amazing, so you should prioritize that list of requirements first. Although I would say ditch the "speed" concern, especially if you're not going full 3D - you can't really go wrong with Java, C#, or Python.
Okay... I'm actually surprised to see this discussion having gone on to this depth. There're loads of ways to train NN's, and GAs are a great one... but why are you even doing this? Why not just neural nets? Why not only GAs?
I think the bottom line here is that these algorithms are just too complex for what you are trying to do with them. Even if your problem space wasn't large and your heuristic (fitness function) was more specific (it seems rather vague), it would still take ages for this thing to to run it's course, and even THEN you wouldn't have any guarantee that your network is well-trained. Even less so that these AI opponents are fun / worthwhile to race against.
I think your idea sounds cool, but if you said you were investigating NNs trained by GAs in this problem space, I would think it a fantastic idea. But as you say you wish to develop a game using this, I cannot help but think that you learnt about these algorithms and are trying to apply them in a space where they do not belong.
There're loads of ways in which you can do this. There're APIs you could use to help you, but I would suggest handling it yourself (at least to try it) to get some idea of how it works.
As ApochPiQ pointed out, it's down to basic Newtonian physics. This is not nuclear physics or anything, just some simple laws and clear concepts - in code, it's rather straightforward to apply basic physics to objects. What is essentially required is that you are able to identify core conepts such as vectors, acceleration, and so on. Then, to model those concepts as well as the relationships between them - obviously, this can vary quite greatly in complexity depending on what it is you want to do.
You can use a vector (or a size 2 array of floats, for 2D) to define direction and speed, an acceleration (possible another float), as well as constants such as gravity, and then link these up and connect a timer as well. You can try to model things more realistically, in which case you may even begin to apply some trigonometry, or you can just "cheat" and simplify everything.
Up to you. But a bit of research on physics and maybe some math, and these should be simple enough to implement
Some good replies already on here... but just to give you some overview of the languages in question, maybe a slightly different perspective...
C - You don't want go near C. As has been mentioned, it is very low-level and is an old language.. were you doing OS development, it would be a different story but as it stands, C is really the wrong tool for the job when it comes to developing games. Unless you hate yourself or want a challenge of that sort, or something.
C++ - While this is still the most widely-used language in game development, and enjoys an almost elite status as a language, I feel the need to point out what has not been mentioned here yet: C++ is kind of messy. It was designed in the 80s as C with support for object orientation, and was also intended to be backwards compatible with C from the offset. This is a reason for it's popularity, but is also a reason for a very cluttered design - it's not that C++ is bad, but it has lots of mechanics and features which lots of people don't ever use - and are quite frankly unnecessary. The fact that the language is multi-paradigm (imperative with a strange sort of object orientation which isn't 100% what OOP should be) can also be potentially confusing.
Please understand that I'm not saying C++ is a bad language - it is not - but of all these languages, it has the most cluttered design, and is potentially the most difficult. The major thing that sets it apart from java and C# is that in C++, you have to handle your memory manually. You must keep tabs on everything you create and delete it at the correct time, as well as dealing with references to memory - if you mess that sort of thing up (which is very easy to do), the resultant errors are disasterous. But on the other side of the coin, memory management gives you a fantastic level of control and when done right is quite elegant. See, Java and C# still carry out the same sort of memory management tasks, except they're handled implicitly - in those cases it's still important to be aware of what it's actually doing.
Java - contrary to what other people say, Java is, I feel, rather similar to C++. They are not totally different animals, but have some important differences and do at times require different practices. Java was created with portability in mind - since it runs off a virtual machine, you can run it off anything... as long as the platform decides to support it. Which is not the case with consoles . Still, java is a cleaner, sometimes more elegant language than C++, and it incorporates a more elegant object orientation model, but it still has it's own pitfalls. It's a generally easier language though, and this is mainly thanks to lack of memory management.
C# - this was designed with lessons learnt from both java and C++. Again ,it's actually not that dissimilar (it's not like comparing Fortran, smalltalk, Lisp, etc.... C++, java and C# all fall under the same family), and I feel that C# has the most elegant design of all these languages. It discards unnecessary elements of C++ and redefines some elements to make more use out of hem. Note that C# is a new language in most respects, and does not share the relationship that C and C++ share - it is a new design effort without backwards compatibility in mind. So the naming is a little confusing. Overall, a great language, but very much rooted in microsoft , if that bothers you.
Whew...sorry... bit of a long post. Bottom line is: stay away from C, and between the other 3 languages mentioned here, I'd say C++ is a bad one to start with. You'll learn much more comfortably with C# and Java, and the transition to C++ is not too difficult to make once you learn the others! That is, if you choose to. They all have great API's backing them, it's simply a choice of which you like best and what exactly you aim to do. You can make a great game in any of these. And have fun!