JWalsh, hopefully you still follow this thread or will see this but I have a few more questions for you.
I am, but you can always send me a PM.
I'm currently finishing up my summer internship and because of downtime and completing a project faster than expected I'm basically killing time. We have access to Visual Studio C++ so I decided to hammer through my first big 700 page C book. I'm about 3/4 of the way through, and will most likely power through and finish it within today and the 8 hours I have tomorrow.
Fantastic! Nice work. Note, all of the Visual languages (VC++, VC#, and VB) are available as Express Editions from Microsoft and are free to download. Also, Visual Studio 2012 is currently in beta and is available to download to test - even the Ultimate Edition. Also, the Express Editions of 2012 will be available for free in August.
I'm hearing from a lot of people that I should spend a good amount of time with the Win32 API before I tackle the DirectX API. Is this true?
No. The Win32 API is the native ASM/C (not C++) framework Microsoft used to build Win95+, though many of the frameworks that exist today still use it "under-the-hood". Which is to stay, they still listen for Win32 events, and they still handle the Win32 message pump. However, the Win32 API is not object-oriented, not easy to read, and full understanding is only important if you're interested in knowing the Windows UI at a very deep level. Most programmers today either use WPF, which doesn't require knowing the Win32 API at all, or WinForms, which only requires knowing parts of the Win32 API for advanced functionality. There's no reason to dive into the Win32 API right away. Save that for when you've mastered your current needs and are ready to go more advanced.
Can you explain a little more about step 4 where you reference the wrapper around DirectX that you suggested?
Sure, but bear with me while I take you there in a fun, roundabout way... If you've been learning C# and making some 2D games with XNA for a while, at some point you'll decide you're ready to move on to 3D. At which point, moving on to Unity is a great suggestion, because it lets you get familiar with the "rules" of working in 3D, without having to worry about the complex math involved in performing 3D collision detection or 3D rendering.
But, at some point you'll have mastered that as well and really want to get into the guts of 3D, so to speak. At which point you can pick up 3D rendering in XNA. With XNA, you'll be doing the 3D transformations and collision detection yourself, as there's no "engine" to do it for you. You'll be responsible for implementing each of the primary areas of game development yourself: graphics, audio, input, AI, physics & animation, I/O, etc...You'll be writing your own Real-Time Shaders for the GPU, and you'll be doing the complex math yourself. But, you'll be doing them with XNA. XNA is a managed wrapper around DirectX 9c, and only exposes a limited amount of functionality. Granted, it exposes 90% of the best functionality, but there are still things that it hides from you and things you cannot do. Not least of which is that we're now on DirectX 11.1. XNA doesn't allow you to interact with anything newer than DirectX 9c.
So... at some point you may decide you don't want XNA around to do all the device setup and stuff for you. You want complete control over your hardware, and you want to do so using DirectX 11. At which point, SlimDX and SharpDX (I recommend SharpDX), are light-weight wrappers and/or bindings to the native DirectX 11 API's. This allows you to continue using C#, but to have access to all the interfaces, structs, and enumerations which are used by C++ programmers when writing native DirectX applications. At this point, all the tutorials for creating devices, setting up shaders & effects, accessing and using surfaces, etc.. will all be valid. You'll just be doing it in a different language with slightly different names.
Finally, you may get around to the point where your games are as technically capable as they're going to be. You've maxed out the GPU entirely, and your games are now shifting their logic to the CPU. This generally means you're doing complex physics and/or intersection testing, AI, path-finding, etc... At which point, you'll need to move away from C# w/ Managed DirectX wrappers, and into the world of native C++ with COM-based DirectX. At this point, you're essentially a Jr. Programmer in the game industry.
I took you in this roundabout method because I wanted to stress the importance of doing this in phases. When you are ready to be using managed wrappers around DirectX 11, you'll already know what it means and how to do it.
At home I've started a book on XNA, and so far I am understanding the basics. I understand the game loop, why it makes sense and how basic 2D sprites sheets work along with moving graphics around the screen. Hopefully I can make pong in XNA in a week or so when I have time. I don't see it as being too challenging, but a milestone and "completed" "game" none the less.
Absolutely! Pong is a great way to start, and I look forward to playing your Pong game.