Julien Jorge

Mon CV en ligne, en plus divertissant que la version papier.

Tetris

Présentation

L'écran titre du jeu
L'écran titre.

Certainement un des jeux vidéos les plus connus, je vous renvoie chez grospixels pour un petit historique des plus intéressants. Le développement a été motivé par les raisons suivantes :

C'est mon premier jeu et donc aussi le premier qui fait un peu d'intelligence artificielle. Je ne vous cache pas que je suis assez fier du résultat. Le jeu est très classique, il n'y a rien de plus par rapport au tetris de base, si ce n'est le mode deux joueurs.

Modes de jeu et difficulté

Le jeu se joue à un ou deux joueurs humains, humain contre ordinateur, ordinateur seul ou contre lui même. Dans un mode de jeu à deux joueurs, l'adversaire reçoit n-1 lignes aléatoires lorsque vous faites n lignes. Il y a cinq niveaux de difficulté qui correspondent au nombre de pièces que l'ordinateur voit à l'avance.

Niveau de difficulté Nombre de pièces
stupide 0
fastoche 1, celle qui est dans l'aperçu.
facile 2
normal 3
dur 4

Ce qui fait qu'à partir du niveau "facile", l'ordinateur triche. Cependant le jeu n'en devient pas impossible, loin de là ; ça compense plutôt les hypothèses que font les joueurs humains.

Intelligence artificielle

L'écran titre du jeu
L'interface de jeu.

L'ordinateur évalue la qualité d'un coup en attribuant un score à l'état du jeu. Le coup sélectionné est celui qui retourne le meilleur score ; jusque là ça reste classique. A l'époque où j'ai programmé ce jeu je n'avais que quelques notions de l'algorithme minmax. Algorithme qui ne m'a pas servi vu que le jeu se déroule indépendamment de l'autre joueur (ou presque).

Pour trouver son coup, l'ordinateur regarde pour chacune des pièces suivantes, pour chaque rotation et pour chaque position vers la droite et vers la gauche, l'évaluation de l'état une fois la pièce tombée. On compte pour chaque ligne du récepteur :

Graphisme, son, rendu

Tout cela est géré par l'API DirectX et est implémenté, caché, dans des classes. Ce qui me permettra lorsque l'envie me prendra d'utiliser une autre API, comme la SDL, pour pouvoir faire tourner le jeu sous Linux.

Les niveaux sont décrits dans un fichier xml, enfin seulement les objets de base. Les objets composés sont décrits dans le code. On trouve dans ce fichier la liste des niveaux avec pour chaque la liste des images et des sons utiles, puis la liste des objets. Je ne décrirai pas plus ces fichiers ici, il y a déjà une page qui leur est consacrée dans la doc. Les fichiers xml sont manipulés via la bibliothèque tinyxml.

Ce qui va bien

L'écran titre du jeu
L'écran de configuration des contrôles.

En vrac quelques détails qui me font assez plaisir. Tout d'abord l'aspect, je trouve le jeu assez joli ; il est bien coloré, doux et a quelques animations qui permettent d'animer l'environnement. Les musiques sont amusantes (vous n'aurez jamais été aussi triste de configurer les contrôles d'un jeu ;-)), même si très synthétiques. L'ordinateur se débrouille plutôt bien en général ; par contre quand il se plante, il se plante fortement (un bug non trouvé peut-être). Je suis aussi assez content d'avoir pu réutiliser directement le code de l'affichage pour le puissance 4.

Ce qui ne va pas bien

Il y a une chose dans mon code qui me déplait fortement : la faible séparation entre les parties conceptuelle et visuelle du jeu. Cela est dû au peu d'analyse effectuée avant la programmation. L'analyse aurait permis de définir formellement l'état du jeu et de la séparer du rendu.

Liens

Le source du jeu (877 Ko), le source avec les ressources graphiques et sonores (32 Mo), le programme(22,3 Mo).