# Programmation de jeux vidéo

La programmation de jeux vidéo est un processus entrant dans la création d'un jeu vidéo. Ce processus est effectué par un développeur de jeux vidéo via la programmation informatique.
Fondamentalement, la programmation d'un jeu vidéo se réduit à répéter à intervalles de temps réguliers les actions suivantes :
* gérer les interactions d'un agent avec l'environnement en fonction des entrées de l'utilisateur,
* gérer les phénomènes non directement contrôlés par l'utilisateur,
* créer une image à partir de ces informations et l'afficher à l'écran (de même pour le son et la vibration).
L'agent est souvent un personnage (appelé généralement héros) mais peut aussi bien être une voiture, un vaisseau ou tout autre chose. L'environnement est généralement composé d'un décor statique et d'objets interactifs (ennemis, objets d'inventaire, portes, etc.). L'utilisateur envoie des entrées au programme à l'aide d'un périphérique comme une manette de jeu, un clavier, une souris, etc. La gestion des interactions consiste à prévoir les actions possibles sur l'environnement, de détecter leur déclenchement et de gérer des réponses. Par exemple, pour créer une interaction « ouvrir la porte », il faut décider des processus qui permettront son déclenchement (ex : le joueur doit appuyer sur le bouton prévu à cet effet, le personnage doit être assez proche de la porte et il faut qu'il lui fasse plus ou moins face), ensuite il faut, durant le jeu, détecter que ces conditions sont remplies. Si c'est le cas, alors une réaction est générée, dans notre exemple, afficher sur l'écran une porte qui s'ouvre.
Les phénomènes non directement contrôlés par l'utilisateur sont multiples et varient beaucoup en fonction du jeu. Il peut s'agir de gérer l'intelligence artificielle des agents non contrôlés par l'utilisateur, gérer les collisions entre agents et la physique (pour les jeux qui utilisent un modèle physique réaliste).
Ces deux premières parties font partie du gameplay (c'est-à-dire, des règles d'interaction) d'un jeu qui est normalement décidé par un game designer et implémenté par le programmeur.
La création de l'image et son affichage devient de plus en plus complexe à mesure que le niveau graphique des jeux s'élève. Autrefois presque exclusivement en deux dimensions, les environnements de jeu sont dorénavant en grande majorité en trois dimensions. Dans tous les cas, l'image est construite petit a petit dans un espace mémoire (le framebuffer) et n'est envoyée à l'écran qu'une fois le dessin fini dans son ensemble.
La création d'une image en 2D, commence généralement par l'affichage des dessins les plus éloignés, puis des autres dessins se superposent successivement. Par exemple :
* Création du fond (le background), à l'aide de mosaïques (les tiles) propice aux systèmes de défilement (le scrolling) ou simplement un fond d'écran fixe (comme pour les anciens jeux d'aventure).
* Ajouts des images (sprites) en utilisant un système de découpage qui permet de dessiner des formes complexes alors que les images sont obligatoirement rectangulaires dans la mémoire.
Pour un jeu « vu de côté » (typiquement, un jeu de plate-forme), on commencera par dessiner les objets les plus lointains pour finir par les plus proches du point de vue du joueur.
La création d'une image en 3D est bien plus complexe. Contrairement aux autres domaines de l'imagerie de synthèse, les jeux vidéo se doivent généralement de créer chaque image en temps réel tout en conservant un taux de rafraîchissement de l'écran convenable. La difficulté est donc de pouvoir créer une image de bonne qualité dans un laps de temps très court, tout en gérant les différents éléments du jeu. C'est dans cette optique qu'aujourd'hui la programmation de jeux 3D est de plus en plus liée au matériel informatique, en utilisant au mieux les fonctionnalités d'accélération matérielle des cartes graphiques afin d'accélérer au maximum le traitement des objets 3D, et en optimisant le code source.
La fréquence de répétition de ces opérations varie fortement en fonction de la plate-forme (ordinateur, console, téléphone portable, etc.). On considère qu'il faut au moins 24 images par seconde pour donner une bonne impression de mouvement au cinéma mais il faut une fréquence plus élevée dans les jeux vidéo. Toutes les parties d'un programme n'ont pas forcément besoin d'être traitées à chaque image (sauf la création et l'affichage de cette image).
Les programmeurs de jeux vidéo sont aussi amenés à développer divers logiciels et outils informatiques utilisés dans la chaîne de production du jeu vidéo ; outils destinés par exemple aux autres acteurs du développement (comme les infographistes, animateurs, game designers, ...) ou encore à exécuter du traitement par lots.

## Programmeurs de jeux vidéo reconnus

* John Carmack (Wolfenstein 3D, Doom, Quake...)
* Peter Molyneux (Theme Hospital, Black and White, Fable, ...)
* Notch (Minecraft)