Bonjour,
Je vous propose un nouvel élément à utiliser : Tetris SDL
C'est mon premier "vrai" projet en C++.
Et c'est vraiment le premier avec la SDL (hors tuto).
Ce programme n'utilise ni son ni image (les formes des pièces sont calculés).
Le jeu se pilote au clavier et l'on peut y jouer avec une manette (uniquement les boutons et les Hat)
Le code n'est pas parfait.
L'héritage de CTetris par F_Jeu n'est pas forcément judicieuse mais je pensais rajouter des procédures virtuelles pour jouer des sons ou faire clignoter les lignes avec qu'elles disparaissent (ce qui n'est pas le cas).
Pour ce qui est des tableaux à 2 dimensions (l'air de jeu, les pièces, autres), il y en a de 2 sortes :
- des vector de vector
- des pointeur de pointeur
J'imagine bien que le 2e est plus rapide et prend moins de place en mémoire, mais au final je préfère la première solution.
Les pointeur de pointeur qui reste datent du début du code notamment la classe CTetris qui provient d'un code de décembre 2013 lorsque j'ai fait un essai avec QT.
Lorsque je dois faire des recherches dans des tableaux, je fais un boucle for. ce n'est optimisé mais je ne vois pas comment faire autrement (une recherche dichotomique sur un petit tableau me paraît un peu lourd d'autant plus qu'il faudrait trier mes tableaux de structures).
Je ne limite pas le frame rate, un simple SDL_Delay(1) pourrait faire passer l'utilisation processeur de 100% à 0% (ou presque) mais je me dit qu'un frame rate élevé m'indique un code optimisé.
C'est pour obtenir un chiffre élevé que notamment je stock pas mal de texture en mémoire (pour ne pas avoir à les recalculer à chaque affichage).
A noter que le calcul du frame rate (affichable en appuyant sur F12) n'est pas calculé correctement c'est le nombre de frame affiché durant la seconde précédente (plus ou moins seconde car cela dépend de la boucle de l'affichage). On trouve facilement des algorithmes de calcul du frame rate sur internet (qui ne sont pas plus compliqué que le mien) mais pour l'instant mon calcul me suffit.
Je fais des include inutile dans les classes C* mais c'est parce que je les souhaites réutilisables hors de ce projet et donc autonomes (ce n'est pas toujours le cas).
La suppression des pointeurs de p_Fen_* dans le code de la classe Application ne me paraît pas idéale mais là encore, je ne voyais pas d'autre solution.
C'est la classe F_Jeu_Selection qui initialise la liste des pièces. C'est parce que j'ai (avais) dans l'idée de rendre les listes de pièce paramétrable (permettre à l'utilisateur de rajouter des pièces et de choisir alors son jeu de pièce).
Mes fichiers *.cpp sont un peu brouillon. Je devrais rajouter plus de commentaire pour bien séparer chaque fonction, éventuellement y répéter la documentation Doxygen.
Il doit y avoir beaucoup de code qui ressemble plus à du C que du C++.
J'ai beaucoup de structures. Est-ce correct ? Je me suis dit qu'il ne serait pas correcte de faire des classes là où je n'ai besoin que de membres.
Sur la liste des choix des résolutions, la SDL me renvoie 2 fois chaque résolution. J'ignore pourquoi.
J'ai appris beaucoup durant la réalisation de ce programme. Ce serait à refaire, la programmation serait un peu différente.
Bref, voici sous vos yeux mon premier programme SDL complet mais fortement améliorable que ce soit au niveau du code ou au niveau des fonctions de l'application.
N'hésitez pas à commenter ce programme et me dire ce que vous en pensez.
Qu'en pensez-vous ?
Partager