Intel17:
Your problem is that you are approaching programming as if it is some kind of artistic expression that just springs forth into the IDE from your fingertips as you figure it out. I've run into many CS majors from age 18-22 (and older) that thought this as well. Many years back I was taking a programming class, and a girl from the class came over to my house to work on a project with me... we sat around talking for a bit, then decided to start working on programming. She got up and went over and sat in front of my computer.
"What are you doing?" I asked.
"Well," she said hesitantly, "we're going to program a bit, right?"
"Yeah," I remarked, and held up a legal pad and a pencil.
She was kind of flabbergasted. Evidently all projects that she'd worked on in the first year of CS she'd simply started coding without outlining the goal, breaking the project into manageable components, and then determining functional classes and procedures that had to be created to encapsulate each bit of the program to be written. Coding straight from the brain is only useful for tiny projects.
Let's take a simple game... say a space game where you fly around shooting things. What are your objects? What are the type of data structures that you store those objects in? What kind of methods and procedures do you need to manipulate those objects? What kind of functions do you need to manage the data structures that represent those objects?
Writing a "game engine" is not about graphics. Graphics are just one small portion of the engine... and, while important, it is provable that graphics can often be made a second-class citizen if the rest of the game is good. Take Geometry Wars on the Xbox360 for example... there's nothing groundbreaking about the game at all. Hell, it's just Robotron 2084 on super-steroids. However, it is terrific fun because of how well the elements of the game mesh together: sound, vision, AI, control, pacing... it all goes together to form something worth playing.
Hell, there are specialist programmers that spend all their time writing portions of game engines without ever touching graphics. Just writing good AI can take a good team a hell of a long time.
John Carmack is quoted as saying (and I'm paraphrasing from memory): "A programmer can have three traits: technical programming ability, creative problem-solving ability, and the capacity to simply get work done despite distractions. A person who has one of these abilities is worthless to me. Someone who has two can be a useful employee. The person who has all three is uncommon and is a great asset to a company."
You need to pick a SMALL project. A tetris clone. (Yes, work in 2D... it's training for bigger things.) A knock-off of an old Atari 2600 game. A program that solves logic problems. A simple simulator of some kind... say simulating a central star and plotting the calculated orbits of objects around it. But keep it SMALL at first.
Then program it. Do NOT give up until you get it mostly functional. ALWAYS understand that you will THROW AWAY days worth of work and start over when you realize how bad your first efforts are... but start over anyhow and refine with what you learn. Believe me, it gets easier to code and builds faster the more you know. Realize that you'll spend a ton of time debugging programs and figuring out where your mistakes are. And you MUST debug... if you don't discover where the error is, then you won't remember not to make those mistakes in the future.
And, above all, realize that you WILL most likely produce a lot of useless junk for a long time before you start making good stuff. That's why they pay $75K a year or more for a good programmer... the craft is not easy at a baseline... and difficult to do really well. Sure, the guy who wrote the Build engine for Duke Nuke'm was in high school... but that kind of programming at that age is extremely rare. Hell, I didn't start really "getting" logic abstraction until my early 20's. Sure, I could cobble together a program in BASIC, but I couldn't write in ASM or anything like C. You, fortunately, get to skip writing directly to the hardware and have the WIN32 and DIRECTX/OGL APIs, so that, at least, makes it a bit easier.
You need to be patient, perseverant, and open to the fact that your life for the next four to six years will be all about learning math, logic, and problem-solving. (But don't sacrifice the rest... learn ALL other subjects as well... including history. It all contributes towards a completeness of mind that helps solve problems. Plus, Sid Meier made a bundle using history as a basis for his gaming ideas... good games are not
all logic and numbers.)
That's enough sermonizing from me. Hell, I got a CS degree, and now I'm applying for a job as a network/sys admin for a Fab in Portland. Never expected to be in this career, but life is what happens while you were making other plans.
FLF