You remind me of myself - from 11 years ago (yeesh I'm old :| )
Only reason I did anything back then were games and emulation. I hadn't learnt my first bit of C language in the first semester and I wanted to make a gameboy game for that semester. (I didn't because I couldn't. Just made a 3Dish Piano using Graphics.H
). However,
by my second year I did create a basic CS 1.6-like-graphics producing graphics engine, no shaders just fixed function pipeline. The gun and muzzle were still sprites over the 'camera lens' which was used to look around a 3D space/geometry and limited movement. I studied shaders and bump mapping and carmac's reverse algo for volumetric shadows and implemented them all. Collision boxes and spheres and most of my learning came from practicing on OpenGL, or GLUT more precisely. Used to do everything with C++/VC++ back in the day and DX 8.1/9.
So it was more graphics development/engineering than game design. You can create games without graphics and graphical apps which aren't games. I even did a 6 month job with a company where I created 3D Virtual Tour apps for some professional machinery used for training. The textures were actual hi resolution images taken by a professional photographer based on my requirements. I took a few pics myself whenever I was able to get security clearance for these machines.
Creating games on available frameworks/engines, I believe, is relatively a piece of cake than creating a graphics or games engine or framework yourself. It just depends on what you really want. I kinda figured out that creating graphics engines is a lot more fun and I learnt a great deal about how graphics are produced and what rendering pipelines are. But real fun was in playing games and not making them, for me at least.
Eventually, I got into mainstream world of general web apps, Inventory management, CRM, HR etc etc softwares. Software development is evolving at an unbelievable rate and everyday you're bombarded with frameworks and languages and toolsets, each more specialized towards a particular type of application or platform.
I think what's most important during academics is to learn the core and the basics. The underlying of the underlying and make sense of it all. Once your basics are rock solid, transitioning between languages and frameworks become easy. That's during the first 3 years of your academics. Go to the basics. Building blocks. C or C++.
In your final year, try to get a taste of both Java and .Net (preferably C#). Create a web application, from DB to server side to front end. Master design patterns. If you have the time and energy and the motivation to go mobile, dive into Android. When you work on Android, try to go native and avoid JS frameworks/wrappers. By then you will be able to figure out yourself what you enjoy and then perhaps you can make the decision yourself.
I hope I didn't confuse you further or deviated too much from your query.