Comme le dit *Flaburgan*, c'est plus une question de support matériel que de développement du jeu.
Il faut savoir que les jeux tournent sur des moteurs de jeux. Ceux-ci sont soit des développements ad-hoc (par ce que le jeu nécessite certaines perfs ou fonctionnalités) ou des moteurs génériques.
Il suffit que le moteur tourne sur les différentes plateformes et voilà, le jeu est porté par une simple recompilation...
Sérieusement, le niveau technique nécessaire qu'il faut pour écrire un petit jeu sans prétention a largement baissé.
Avant, il fallait savoir ce qu'est un registre et B8000...Avec l'évolution il fallait seulement savoir ce qu'est un pointeur...Plus tard ce qu'est une référence et bien plus tard ce qu'est une "sprite" et maintenant c'est du plus haut niveau (Algo A*, lois de la physique, algo de collision, de tri, ...).
Bref, l'entrée est moins chère mais la sale VIP requière toujours les mêmes moyens.
Sans parler du fait que les machines sont de plus en plus puissantes, que des gens ont réfléchi à pleins de problèmes avant qu'il y a d'avantage de littérature, ...

Le soucis est bien matériel !

Le seul hic, ce sont les devs qui ne pensent pas au découplage et qui font un moteur très lié au système sur lequel il tourne.

Il y a des développeurs qui vont jusqu'à créer un VM pour faire tourner leur jeux et construisent le reste dessus ! D'autres moins trash permettent le scripting dans leur moteur.

Donc, vous avez saisi l'idée, comme Flaburgan le dit : C'est le matériel !
Une étape facile pour le portage aisé ? Pas de directX mais de l'openGL.

Aussi, bien que ça en fera rire certain, HTML5 est un bon exemple d'unification.
Par exemple : http://fir.sh/projects/jsnes/