Rapide Ball

xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015 - 19 août 2013 à 19:36
xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015 - 23 août 2013 à 23:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100085-rapide-ball

xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015
23 août 2013 à 23:53
Merci pour les remarques et propositions,
Par rapport à FMOD, j'ai utilisé une version API Studio... bon je n'y connais pas grande chose mais il y a ici ->https://app.box.com/s/uc1uob5z849ls55jtawa les headers et la lib de FMOD que j'ai utilisé;

C'est vrai , je viens du C et c'est mon premier programme en C++;

"J'ajusterais peut être un peu la hitbox de la boule" ce serais un plus pour moi de voir ce ajustement.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 août 2013 à 17:24
l'utilisation des std::deque est surtout pour les Barres qui arrive comme dans FIFO
Il est vrai que le choix d'un std::deque est judicieux pour gérer les barres. Mais il y a d'autre structure de données qui n'ont pas besoin d'une std::deque, je pense notamment au std::deque<char> dans GUI (un std::stack voir un std::vector préalloué est suffisant, on pourrait même utiliser un std::array<> fixe si le nom a une taille maximale limitée).

Il y a des variables statiques au milieu du code, qui ne sont pas justifiées.
static char score[15], vivre[15]; => Pas besoin de static
De plus, plutôt que sprinf, tu peux très bien utiliser des std::ostringstream.

J'en profite pour ajouter d'autres remarques:
- Essaie de fournir de quoi compiler ton projet. J'entends par là un "makefile" ou un fichier de projet.
- Explique comment obtenir les dépendances pour ton projet. Par exemple pour FMOD, je n'ai pas trouvé quelle version tu utilisais, et j'ai donc supprimé tout ce qui touchait à FMOD pour pouvoir compiler ton projet.
- Attention, tu as des fichiers ou tu as oublié des espaces dedans ! Ex: "jeux .cpp" au lieu de "jeux.cpp". (Tu noteras l'espace entre x et .).
- Plutôt qu'un "exit", préfère l'utilisation d'assert. Tu peux améliorer les <assert> existant pour y ajouter des informations supplémentaires. Voici un exemple à modifier qui pourrait te servir (dans plusieurs projets d'ailleurs): https://github.com/cptpingu/game/blob/master/src/Core/Assert.hh
- En C++, on utilise les extensions ".hh/.cc" ou ".hpp/.cpp". Le ".h" est plutôt fait pour du C.

On sent pas mal que tu viens du C, mais ça reste un bon début. Le jeu est fluide, la boule est peut être un peu rigide (image fixe), mais c'est compréhensible (un moteur physique réaliste serait un peu hors sujet :p). J'ajusterais peut être un peu la hitbox de la boule. Je crois qu'elle est un peu plus grande que son image (la boule ne tombe pas, malgré le fait qu'elle soit "en l'air". On parle de quelques pixels, rien de bien grave).

Continue comme ça !
xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015
23 août 2013 à 00:32
ok merci pour l'apport , je tacherai de les mettre en pratique.
mais l'utilisation des std::deque est surtout pour les Barres qui arrive comme dans FIFO,
c'est la raison de sa présence.

"Il y a des variables statiques au milieu du code, qui ne sont pas justifiées." un exemple pour me situé
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 21/08/2013 à 11:20
Bonjour.

C'est pas mal, mais il y a énormément de maladresses dans le code.

Quelques critiques techniques:
- Évite les "using namespace C++", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Utilise 0 plutôt que NULL (ou nullptr si tu le peux), voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp
- N'inclus pas de header dans ton fichier constante. On n'inclut les headers qu'au dernier moment, uniquement au moment où on en a besoin. C'est assez sale d'avoir un fichier qui inclu tout, lui même inclu partout.
- Plutôt que des DEFINE, préfère des "static const + type", bien plus propre (évite les erreurs de typage).
- Évite les variables globales, il ne devrait pas y en avoir dans ton code.
- Cette fonction est soit mal nommée, soit buggée: setPosition(int haut) { m_position.y += haut; }. Elle devrait s'appeler "addHeight", puisqu'elle *ajoute* une hauteur mais ne la "set" pas.
- Il y a un mélange de nom de fonction anglais et français.
- Évite de mettre des noms de variables en majuscules, on le réserve normalement au nom de macro.
- Il y a des std::deque partout, mais ce n'est pas justifié. Des std::vector voir des std::stack étant largement suffisant.
- Tu n'as pas besoin de prédéclarer les variables. Il est même conseillé de ne déclarer une variable qu'un moment opportun (pour des raisons de portée). C'est une erreur que tu fais énormément.
- Les commentaires ne sont pas terribles, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires
- On dit "chiffré" et non "crypté" (qui ne veut rien dire).
- Pas besoin de chiffrer tes scores. Écris tes scores simplement en mode binaire plutôt qu'en mode texte, ça découragera déjà les néophytes.
- Il y a des variables statiques au milieu du code, qui ne sont pas justifiées.
- On ne compare jamais un booléen comme une valeur. if (uncryptScores()==false) => if (!uncryptScores())
- Mieux vaut passer du "const std::string& str" que du "std::string str", pour éviter une copie inutile.
- Si tu détruis un objet dans la même portée que sa création, alors tu n'as pas besoin d'allouer l'objet manuellement.
Ex:
int* p = new int;
func(p);
delete p;

devrait être:
int p;
func(&p);

- Plutôt que de faire du Load_BMP partout, préfère loader du jpg ou du png, c'est tout de même plus léger.
- <stdlib.h> => <cstdlib>, pareil pour pas mal de header.



Il y a encore pas mal de choses à dire, mais je vais déjà te laisser corriger tout ça.
xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015
21 août 2013 à 00:34
pour celui qui n'arriverait pas à compiler le code, voici le programme
https://app.box.com/s/86pnlpldveof8phoxicz
xtreen Messages postés 24 Date d'inscription vendredi 12 octobre 2012 Statut Membre Dernière intervention 5 juillet 2015
19 août 2013 à 19:36
Oh je l'ai écrit avec la lib SDL et ses dérivés...
Rejoignez-nous