Es kommt drauf an, wie ernst du es nimmst, welche Spiele du programmieren willst und auf welcher Plattform.
Allgemein kann man sagen, dass für Spiele C++ besser geeignet ist. Praktisch alle modernen Spiele werden in C++ programmiert, weil es einerseits die schnellste hohe Programmiersprache ist (C und Assembler zählen nicht dazu) und andererseits sie zusammen mit DirectX, das selbst in C++ geschrieben ist, eine gute Kombination darstellt (für Linux kann man auf OpenGL zurückgreifen). Das sind aber eher Gründe für fortgeschrittene Programmierer. Was dich mehr interessieren sollte, dass es für C++/DirectX sehr viele gute Tutorials zur Spieleprogrammierung gibt (einfach mal Google fragen).
Was die Lernphase angeht, so solltest du, falls du es ernsthaft angehst, in 2-3 Monaten die absoluten Grundlagen soweit drauf haben um irgendeinen Spiele-Klassiker-Clon, wie Snake, Pong oder sogar Tetris programmieren kannst. Du musst aber viel üben und nicht irgendwelche Übungen bzw. Beispiele überspringen, nur weil du nach vorne kommen willst, denn das wird sich schnell rächen und dann hast du keine Lust mehr, weil nichts klappt.
Also immer schön klein anfangen, ein paar Klassiker nachprogrammieren (vlt. sogar irgendwas in Richtung Zelda oder ähnliches http://www.virtual-maxim.de/tilemap-1/) und dabei verschiedene Artikel im Internet lesen und dabei immer an deinem Code rumspielen. Wichtig ist dass du nur kleine Änderungen machst, so dein Programm praktisch immer lauffähig ist, so dass du die Erfolge auch siehst. Du wirst dabei feststellen, dass so schneller besser wirst, als wenn du dir gleich was großes vornimmst und es nicht durchziehst, weil dein Wissen einfach nicht ausreicht.
Nach 12 Monaten kannst du mit 3D anfangen. Am besten du liest davor schon mal in einem Mathebuch zur Vektorrechnung und Trigonometrie. Ohne Mathematik kannst du zwar vielleicht ein 3D-Tutorials durcharbeiten, aber wirklich verstehen und eigenständig arbeiten wirst erst, wenn du auch etwas die Mathematik dahinter verstehst.
Noch was zu Java. Java ist nicht schlecht, und die Lernzeit dürfe etwa genauso sein. Du musst nur sofort mit dem Konzept der Klassen bzw. OOP klar kommen, was zwar generell nicht schwierig ist, aber am Anfang doch sehr umständlich und unverständlich erscheint.