Games programming is not easy. Most major games are done in C/C++, as they allow for direct memory management. However, if you have no experience (or even little to moderate experience) with a language like C++, the best way to learn is NOT by trying to program 3d games. There are lots of books on how to program 3d games, but the are meant for intermediate to advanced programmers.

Here's a quick checklist for telling if you're ready to learn 3D game programming, I'll go from easiest to hardest (imo):

- Do you know what encapsulation, polymorphism, and inheritence are?
- Do you know what object-oriented design is?
- Do you know what a pointer is and how memory is managed in a Von-Nuemann (spelling) architecture?
- Do you know what hash functions and binary trees are?
- Do you feel comfortable with math, especially physics, calculus and matrix manipulation?
- Do you know the difference between a perspective projection and a parallel projection?
- If you answered "no" to most of the above, do you have 3-4 years of your life to spend learning these concepts?

If you say no the last question, then stop dreaming. I'm not trying to discourage you--quite the contrary. I'm trying to prepare you for the challenges of 3d game programming. 3D Games are to computer science like swimming is to exercise: it exercises almost every aspect of the body for programmers, from computer graphics to artificial intelligence to systems programming for efficiency to distributed computing for internet games, and everything inbetween.

If you don't take the time to step back and think objectively about how much must go into these games for them to take years for an entire team of expert developers, you'll just end up maybe buying a book or reading some online tutorials that sail over your head and getting frustrated. Don't do that. Take your time, if you're really serious about getting into games development, go to a good university and get a CS degree--but remember, lots of work, lots of math, and then MAYBE you'll be able to get into the field.

That said, C# can do most of the things you listed, though maybe not as well as C++ if you're a good enough programmer.