I do think you have the right idea. Write actual code, contribute to free software projects, and build your skills.
C++ is obviously a good choice, because there are many C++ jobs out there. There is a lot of stuff to learn to truly master C++, though; ideally you would understand the low-level stuff, like how the actual computer hardware will run your code; but you also need to learn the complicated stuff involved in C++ templates. You should learn about the Standard Template Library (STL) and use it to write some stuff. As a strategy, you should get a good introductory book, and work through it; then get Effective C++ and read that.
(In fact, if you had some time and patience, you might even want to just learn plain old C first, then start over again with C++. You'll appreciate the fancy new stuff more once you understand how things used to be. And you'll understand the bizarre features of C++ better if you read The Design and Evolution of C++.)
With C++, you probably will also want to decide whether you want to focus on a Microsoft environment or a Linux/*NIX environment. If you are good with C++ you can work in either, but it helps to be familiar with at least one. If your dream is to write Windows games, you are going to want to know your way around the Microsoft toolchain, and you probably want to learn to use DirectX.
There are plenty of free, open source software projects written in C or C++. Some of them are games. Some of those are buggy games that crash. If you add some new features, and remove some bugs, from an existing game... put that down on your resume when you go looking for C++ work.
You might actually want to learn Java before learning C++. Some of the more dangerous features of C++ just aren't there in Java; you won't have to worry about "memory leaks" or errors in pointer math. And there are a great many job listings for Java.
Ruby and Python are both similar in important ways. They are both powerful, expressive interpreted languages; anything you can write in one, you can write in the other. (As a die-hard Python fan, I'm not a Ruby fan; bear that in mind as you read my comments.) Both Python and Ruby pay a speed penalty compared to Java, let alone C++; it's even worse for Ruby than for Python. (Google has a serious project to make a dramatically faster Python, and I read about a similar effort to speed up Ruby, so this may not be true forever.) Both Python and Ruby have large libraries of useful stuff, but Python has the edge here; I can't think of any mainstream programming task that doesn't have a Python library module available. Networking, web, math, AI, gaming, there are all sorts of libraries. Python has a clean and simple syntax that I like; Ruby takes elements from Perl, which you may like. (Ruby has "sigils" on variables and Python doesn't, for example.) The fact that Ruby takes ideas from Perl may help you learn it, but really either Ruby or Python are easy to learn. Both Ruby and Python have features borrowed from "functional" languages, and these features are very much worth learning and mastering. There are superficial differences between the two languages, but there really isn't any problem that can be easily solved in one but is difficult to solve in the other.
Ruby is noteworthy because it has Ruby on Rails. Python has Django, and my understanding is that Ruby on Rails and Django don't do things the same way, but they can do the same sorts of things, and either one works.
Depending on what you want to do, you might also want to learn Javascript. My understanding is that the best book on Javascript is the big one from O'Reilly. You should also look over Douglas Crockford's web pages.
My advice to you is to start by learning Python and writing some nontrivial Python code. Get a good book like Learning Python that teaches you the idioms as well as the core language. Or learn Ruby if that is your choice. Then, probably learn Java next.
Oh, and here is my most important bit of advice for you: figure out what you wish to do, and then study the want ads for jobs in that area. If there are lots of jobs requiring Java in your chosen area, learn that; if there are lots of jobs requiring C++ in your chosen area, learn that; etc.
Good luck, and I hope you always enjoy writing code.