Forum de la communauté SFML

Général => Projets SFML => Discussion démarrée par: TheNoob le Mai 15, 2013, 05:15:07 pm

Titre: Un Miniminijeu.
Posté par: TheNoob le Mai 15, 2013, 05:15:07 pm
J'apprends le C++ depuis 1 ou 2 mois, et plus particulièrement SFML depuis 15 jours. En apprenant j'ai réalisé une sorte de mini-minijeu dans lequel on incarne un vaisseau mal dessiné qui doit tirer avec des lasers sur des truc bizarres sans se faire toucher par ces derniers.
Bref, je suis nullissime en explications et je préfère ne pas donner le code source vu a quel point il est brouillon et mal fait.

Commandes: Facile: souris pour bouger et tirer, Q Z S et D pour changer la direction de tir.
                      Difficile: souris pour tirer, Q Z S et D pour changer la direction de tir et bouger

Téléchargement:  Rar:  http://anonym0us.fr/PROGTESTS/game1.rar

Voila merci d'avoir lu et n'oubliez pas que si vous trouvez le jeu nul c'est normal, je suis (très) débutant.
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: ulko10 le Mai 15, 2013, 11:34:19 pm
Si tu est débutant n'est pas honte de poster ton code source ^^ les gens qui le consulteront peuvent comprendre les maladresse et t'aider a t'améliorer.  ;)

Ps : je ne pense pas qu'un installateur soit nécessaire, et il donne pas trop envie de jouer a ton jeu.
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: Excellium le Mai 16, 2013, 12:54:15 am
Salut,

C'est pas pour critiquer, mais pourquoi changer le titre du topic comme ça et mettre "un minijeu à 0€" ?
L'argument monétaire on s'en tape, d'autant plus que tu critiques ton jeu avant même qu'on le teste.
Si tu veux de l'aide de la part de la communauté afin d'améliorer ta façon de coder tu t'es trompé de rubrique. Si par contre tu veux des testeurs, donne nous envie un minimum de le tester...
Là pour le coup, le style, l'écriture du post, et le .exe directement en téléchargement ça fait pas mal penser à une tentative de piratage.

Bref, si je me trompe je m'excuse, mais faut avouer que c'est louche.

EDIT : à priori le fichier est clean http://vscan.novirusthanks.org/analysis/ea9f884f79831743f563703f1f0faec8/Z2FtZTEtZXhl/ (http://vscan.novirusthanks.org/analysis/ea9f884f79831743f563703f1f0faec8/Z2FtZTEtZXhl/).
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: Lynix le Mai 16, 2013, 01:22:04 am
Salut,

C'est pas pour critiquer, mais pourquoi changer le titre du topic comme ça et mettre "un minijeu à 0€" ?
L'argument monétaire on s'en tape, d'autant plus que tu critiques ton jeu avant même qu'on le teste.
Si tu veux de l'aide de la part de la communauté afin d'améliorer ta façon de coder tu t'es trompé de rubrique. Si par contre tu veux des testeurs, donne nous envie un minimum de le tester...
Là pour le coup, le style, l'écriture du post, et le .exe directement en téléchargement ça fait pas mal penser à une tentative de piratage.

Bref, si je me trompe je m'excuse, mais faut avouer que c'est louche.

EDIT : à priori le fichier est clean http://vscan.novirusthanks.org/analysis/ea9f884f79831743f563703f1f0faec8/Z2FtZTEtZXhl/ (http://vscan.novirusthanks.org/analysis/ea9f884f79831743f563703f1f0faec8/Z2FtZTEtZXhl/).

Pas la peine de répondre comme ça, il débute et veut présenter son premier programme, ne sommes-nous pas tous passés par là ?
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: Arnibou le Mai 16, 2013, 09:21:39 am
moi je veux bien le tester si j'ai le code source que je compilerais moi même  :)
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: Excellium le Mai 16, 2013, 09:23:39 am
Y'a beaucoup de malwares sur pas mal de forum, il vaut mieux prévenir que guérir. Bien sûr, y'a toujours le risque d'un faux positif, je vais de ce pas scanner un de mes programmes qui utilise la SFML et voir si ça fait la même chose. C'est vrai que ma réponse était un peu abrupte, mais je me suis excusé au cas ou je me trompai.

EDIT : J'ai testé un de mes programme et il y a 0 positif.
Titre: Re : Un Miniminijeu à 0€! ;)
Posté par: shingo le Mai 16, 2013, 01:07:51 pm
Vaut mieux être préventif surtout qu'on ne sait rien du projet. Je ne sais pas si des règles sont imposée à la présentation du projet mais je pense qu'il doit y a voir un minimum afin que tout le monde soit rassurer : présentation, captures d'écran, vidéo etc.

J'avoue que sur le coup, je ne m'aventurerais pas à télécharger ce fichier même s'il semble propre. Que peut-il contenir dans le code ?

Allez, donnes nous des captures d'écran au moins...
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 04:37:32 pm
Des que je suis chez moi je vous envoie le code source pour
 1:ce qui l'ont demandé et 2:ce qui disent qu'il y a un virus
Et j'ajoute un zip plus pratique que l'installer pour ceux qui sont installophobique et enfin le titre était à prendre au second degré...
Je le change tout de même.
Enfin, c'est pas forcement génial de se faire traiter de pirate parce que ma présentation et le titre du topic sont nuls, surtout pour mon 1er sujet...
Dire que c'est nul je veux bien mais dire que c'est un virus... tout ca probablement parce que le meilleur score est écris dans un fichier séparé avec une je parie.. ( enfin pas sur mais je vois pas d'autre raisons).
Merci tout de même d'avoir répondu...
Titre: Re : Re : Un Miniminijeu.
Posté par: shingo le Mai 16, 2013, 04:46:25 pm
Des que je suis chez moi je vous envoie le code source pour
 1:ce qui l'ont demandé et 2:ce qui disent qu'il y a un virus
Et j'ajoute un zip plus pratique que l'installer pour ceux qui sont installophobique et enfin le titre était à prendre au second degré...
Je le change tout de même.
Enfin, c'est pas forcement génial de se faire traiter de pirate parce que ma présentation et le titre du topic sont nuls, surtout pour mon 1er sujet...
Dire que c'est nul je veux bien mais dire que c'est un virus... tout ca probablement parce que le meilleur score est écris dans un fichier séparé avec une je parie.. ( enfin pas sur mais je vois pas d'autre raisons).
Merci tout de même d'avoir répondu...

Ne le prend pas mal, il est normal de se méfier, surtout pas les temps qui cours. Quand tu présents un programme, il faut un minimum que cela soit bien présenter. Enfin, j'ai testé ton jeu. Bien que j'ai eu peur quand je me suis tapé une erreur juste après la copie des fichiers, le jeu s'est lancé correctement. Je ne dirais pas qu'il est nul, c'est un bon début pour apprendre à programmer. Par contre, le mode difficile bug chez moi, impossible de contrôler le vaisseau.

J'ai trouvé l'idée assez bonne pour un petit jeu, après bien entendu il faudra travailler dessus à moins que tu ne voulais juste te faire la main. Un conseil, quand tu fais une installation, prend on moi la peine de faire les choses correctement ou dans ce cas, ne fait pas de programme d'installation. Un programme qui s'appelle et s'appelle un jeu... dans le menu démarrer c'est plus que moyen.
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 04:57:40 pm
C'est vrai que l'installer est tres pourri mais c'etait pour test sur le pc d'un ami qui n'a pas winrar/winzip/7z a la base, et comme j'ai dis c'est assez brouillon en général ;)
Et sinon même en appyant sur qsd et z en mode difficile ca fait rien? Et en mode facile est-ce que ces touches font quelque chose sur ton pc?
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 06:01:36 pm
Voila le code source:
-Tout dans une seule fonction main
-15% des lignes totalement inutiles (voire plus)
-Variables avec des noms parfois illogiques

http://anonym0us.fr/PROGTESTS/main.cpp

Bonne chance.

PS: Excellium pourrais-tu enlever ton "ne pas télécharger" en rouge si c'est pas trop te demander?
Titre: Re : Un Miniminijeu.
Posté par: totorigolo le Mai 16, 2013, 06:49:51 pm
Je viens de tester ton "JeuDeMerde.exe".

Franchement faut que tu arrête de te sous estimer comme ça. Personnellement je l'ai trouvé assez fun, même si le gameplay est super-basique. Il n'y a pas de bug, et on a toujours envie de survivre plus longtemps. Pour quelqu'un qui "apprends le C++ depuis 1 ou 2 mois, et plus particulièrement SFML depuis 15 jours", c'est un très bon début.

Pour les réticents à tester, il s'agit d'un jeu inspiré du pong (avec deux énormes boules ou des "des truc bizarres") qui rebondissent sur les murs, et d'un vaisseau contrôlé à la souris qui doit les éviter, et qui gagne des points en tirant des lasers sur ces dernières. Mon avast! n'a pas bronché quand j'ai lancé le jeu, je me suis juste dis l'espace d'une µseconde que c'était un virus, à cause du premier point négatif ci-dessous.

Pour les points négatifs / suggestions :

totorigolo

PS: Peut-être que le faux positif vient du fait que le jeu se lance en fullscreen dès le début.

EDIT: Je viens de survoler ton code, et je te suggère de mettre des commentaires, au moins des trucs bateaux qui séparent les parties (voir plus, ça fait des lignes de code supplémentaires pour frimer  :P ), et d'indenter correctement ton code parce que là c'est pas très lisible. Si tu utilise un IDE un tant soit peu évolué (C::B, Visual, Eclipse, Netbeans, sûrement Dev-C++,... ils peuvent indenter automatiquement).
Titre: Re : Un Miniminijeu.
Posté par: ulko10 le Mai 16, 2013, 06:57:44 pm
Ors mis le titre très prometteur :
o Je comprend pas pourquoi tu défini la taille de tes view ou encore de tes sprites avec des valeurs juste énormes (du genre Vector2f(-10000000,1000000)).
o Il y a deux appel de display dans ta fonction main, ta de la chance que sa bug pas trop
o Pense a bien indenté ton code la c'est dur de tout comprendre des fois.
o sleep(T) tu peut l'enlever si tu met le framelimit
o En enlevant les cout inutiles (debug j'imagine sauf que tu est censé distribuer la release, et on ne debug pas aec des cout), on peut doublé la vitesse du jeu par plus de 5 fois.
o VideoMode(1900,1000) un peu grand.

C'est a peut près tout ce que j'ai noter, c'est long et chiant a lire un code mal organisé, même pour toi je pense.
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 07:12:38 pm
totorigolo: merci pour les suggestions et encouragements, et je suis d'accord avec toi le menu est vraiment pas terrible. Sinon comment on indente automatiquement avec code::blocks? Et merci sur le conseil des dll

ulko10: A la base j'avai fait une view qui se deplaçait j'ai mis cette taille parce que je sais pas comment faire un truc infini, merci pour le conseil sur le sleep je viens de comprendre pourquoi le jeu laggait avec une limite de 60fps, les cout c'est vrai, faut que je les enleve quand je release mais comme je sais pas trop utiliser le debugger je fais comme ca... Pour le videomode(1900,1000) pourquoi c'est trop grand? Et sinon je confirme, j'ai effectivement beaucoup de mal a comprendre mon propre code par moments x)
Titre: Re : Un Miniminijeu.
Posté par: Excellium le Mai 16, 2013, 07:27:40 pm
Je vais regarder ton code source et tacher de te donner des conseils pour me faire pardonner :p
Titre: Re : Re : Un Miniminijeu.
Posté par: ulko10 le Mai 16, 2013, 07:47:49 pm
Pour le videomode(1900,1000) pourquoi c'est trop grand? Et sinon je confirme, j'ai effectivement beaucoup de mal a comprendre mon propre code par moments x)

Je sait pas exactement comment ça se passe pour le videomode, mais moi par exemple mon écran fait quelque chose comme 1360*768, donc ça me créer une erreur (Tu tente de placé un avion dans un maison). Sa pose un problème qui est réglé automatiquement (sa veut pas dire qu'il faut l'oublier).
Sous code::Block pour ce qui est de l'indentation quand tu place par exemple des accolades il te les places tout seul, normalement te suffit juste de rajouter des espaces entre pour ajouté ton code.

Et pour évité d'avoir a géré deux image pour tes "objectif"/"meteor" tu peut utilisé la fonction setFillColor, quand elle est touché tu change juste la couleur.

-----------------------------------------------

Et pour ce qui est de : (l.221)
if(tempsEcoule > seconds(5)) vitesse = 15;
if(tempsEcoule > seconds(10)) vitesse = 20;
if(tempsEcoule > seconds(15)) vitesse = 25;
if(tempsEcoule > seconds(20)) vitesse = 30;
if(tempsEcoule > seconds(25)) vitesse = 35;
Tu pourrai plutot faire quelque chose comme :
vitesse = temps.getElapsedTime().asSeconds()*0.5;

 ----------------------------------------------------

Petite astuce, a la place de :
if (mitraille) mitraille = false;
if (!mitraille) mitraille = true;
Faire :
mitraille = !mitraille;



Pis je vais m’arrêtez la après on voit que t'est paumé dans ton code et qu'un main() de 700 lignes est pas pratique (Par exemple tu a deux boucle d'event pour fermer ta fenêtre). Continue a faire des petit programme comme ça, et avec le temps tu pensera que la poo et les fonctions c'est trop cool et tu trouvera toi même ton style d'indentation.
Titre: Re : Un Miniminijeu.
Posté par: totorigolo le Mai 16, 2013, 07:50:47 pm
Pour indenter, rien de plus simple : Plugins → Source Code formater (AStyle). Par contre, veille à toujours sauvegarder ton code avant d'indenter, pour éviter les mauvaises surprises si ça bug (ça m'ait arrivé une fois il y a quelques années, donc tu risque pas grand chose, mais au cas où).

Et si tu n'arrive pas à comprendre ton code, c'est super grave. Imagine que tu fais une application et que plus tard tu as envie de la reprendre, ou alors tu fais un truc avec plein de fichiers et de fonctions et que tu as un bug, ben tu n'y arrivera tout simplement pas.
La solution tient en 3 consignes de base : commenter, indenter, nommer intelligemment.

N'ait pas peur de trop commenter, tu trouvera le juste milieu avec le temps. Pour l'indentation, il faut absolument que tu sois régulier et que tu ne te permette aucune fantaisie avec ton code de style (indentation, espaces,...). Pour les variables, il faut les nommer pour que tu comprenne rapidement, mais sans excès : tu peux garder "i" pour itérer, "x", "y" pour les coordonnées, ou encore des noms courts pour les algos par exemple... Mais n'appelle pas par exemple la fenêtre SFML que tu vas utiliser tout le temps "w".
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 08:34:18 pm
Merci pour tous les conseils!
J'ai ajouté un son lorsqu'on tire un laser et de la musique en fond, j'ai enlevé les cout, les dll inutiles, j'ai indenté le code avec le truc automatique et j'ai mis les écritures en blanc tout en changeant la police. Je pense refaire le code pour le diviser en objets/fonctions afin de le rendre lisible.
Téléchargement de la nouvelle version:
http://anonym0us.fr/PROGTESTS/game1.rar
main.cpp:
http://anonym0us.fr/PROGTESTS/main.cpp


PS: ulko10 j'ai pas encore fais ce que t'as dit au dessus (pour le !mitraille et le truc du temps écoulé) mais dès que je réécrirai le code j'y penserai ;)
Titre: Re : Un Miniminijeu.
Posté par: shingo le Mai 16, 2013, 11:09:30 pm
Mais pourquoi avoir tout mis dans un main ?
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 16, 2013, 11:24:30 pm
Parce que, comme je l'ai dit dans mon premier post, je suis débutant et c'est en testant différentes fonctions de sfml que j'ai créé ce petit jeu. Je me suis jamais dit au départ: "Tiens je vais faire un jeu qui fonctionnera de telle facon...", tout ce que je faisait c'était des tests pour mieux comprendre sfml, et comme ce tas de lignes de code commençait à faire un truc pas trop moche je l'ai transformé en jeu, hélas en laissant tout dans le main qui ne devait au départ ne me servir qu'a apprendre sfml, et non pas a creer quelque chose de concret. Après je me suis dis que c'était un petit jeu et que j'aurai pas besoin d'autres fichiers (j'avais surtout la flemme d'en faire sur le moment) puis ca a fini comme ça....
Je pense pas avoir expliqué très clairement mais je peux pas faire mieux désolé.
Sinon continuez à me proposer des améliorations ca me donne des objectifs à franchir.
Merci à tous.
Titre: Re : Un Miniminijeu.
Posté par: shingo le Mai 17, 2013, 12:07:44 am
Etre débutant ou pas, là n'est pas la question. Je suis également débutant, cela fais deux mois et demi environ que j'ai commencé le C++ et SFML mais il faut prendre dès le départ les bonnes habitudes. Tout dépend de ta capacité à apprendre mais je te conseille d'apprendre dans un premier temps le C++ et donc la programmation objet car tu vas t'embrouiller dès que tu vas te lancer sérieusement dedans.

Enfin, ce n'est qu'une suggestion. A toi de voir.

Sinon pour le bug en mode difficile, lorsque la partie a commencé, je ne pouvais tout simplement pas diriger le vaisseau avec la souris.
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 17, 2013, 07:35:37 am
Comme je le craignais ma réponse précédente n'est pas assez compréhensible. Bref, regarde les commandes sur mon premier post, le mode difficile on bouge pas a la souris ;)
D'ailleurs je trouve le mode difficile plus difficile (étonnant non?) Mais également mieux fait car tirer un laser ralentit le vaisseau, qui est deja assez lent de base, empechant le joueur de tirer 100% du temps.
Titre: Re : Un Miniminijeu.
Posté par: Excellium le Mai 17, 2013, 12:19:21 pm
Franchement c'est plutôt bien pour un débutant. Quand je l'étais moi, jamais j'aurai pu faire marcher un code aussi brouillon. On dirait un peu du C style (va falloir bien taffer sur le C++, sur le site du Zéro par ex.). Déjà, tu utilises beaucoup de concepts de la SFML, comme les vues par exemple, et ça c'est bien (ça prouve aussi que les tutos de Laurent sont bien fait). Un peu aussi de la STL (lecture et écriture dans un fichier, c'est ça qui a du lancer le faux positif). Je pense que le mieux que tu ais à faire, c'est clarifier ton code, en ajoutant le max de commentaires (entre les lignes). Tu verras que tout d'un coup, une certaine organisation va naître et que il y aura pour toi matière à simplifier (dans l'état actuel des choses tu peux diviser par trois la taille du code pour le même résultat). Surtout ne te lances pas la la programmation orienté objet pour l'instant, tu t'y perdrais (chaque chose en son temps). Çà ne t’empêche pas d'utiliser des fonctions et d'utiliser des .hpp pour les déclarations, et des .cpp pour les définitions. Déjà tu auras fait de grands progrès.
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 17, 2013, 03:58:49 pm
Merci pour les conseils/encouragements.
Je compte refaire tout le code avec un peu de poo et de fonctions, ca me fera un petit exercice :)
Titre: Re : Un Miniminijeu.
Posté par: unitedelite le Mai 22, 2013, 11:51:35 am
Avant tout : ne prend pas mon post comme une critique sur ton jeu, je n'ai fait que regarder ton code et je j'y ai pas joué donc je ne me permet pas de dire qu'il est bon/nul =°


quelques trucs que je comprend pas dans ton code :

                mode = false;
                modechoice = true;
                std::ifstream fichierRead("datad.zft");
                using namespace std;


                fichierRead.seekg(0, std::ios::beg);
                fichierRead >> scoreMax;

                std::ostringstream oss6;
                oss6 << "Meilleur Score (Difficile): " <<scoreMax;
                std::string resultMax = oss6.str();
                fichierRead.close();

                using namespace sf;

                textMax.setString(resultMax);
                temps.restart();

Pourquoi placer des namespace a cette endroit ? les namespace ce placent au debut du fichier en dessous des #include et surtout que la tu t'en sert même pas (malgré ton "namespace std;" tu continue de faire  std::string  )


ensuite quand t'initialise plusieurs int/bool/ect. au lieux de faire

int x = 0;
int y = 0;
[...]
 

tu peut faire :

int x = 0, int y = 0, [...];
 


n’hésite pas aussi a passer par des fonctions , par exemple pour l'affichage ou les différent menu.

Quand tu fait une présentation mets des screens même si tu pense que ton jeu est moisi, ainsi ont est moins réticent a l'idée de télécharger en sachant de quoi il s'agit


Après avoir exploré ton code je te conseillerais une chose : continuer ton apprentissage du C/C++ avant d'attaquer la SFML, tu fait beaucoup d'erreur ( les namespace dit plus haut ou le manque d'utilisation des fonctions), ensuite tu verra toute les erreurs que tu a fait et tu pourra même réécrire ton programme en bien moins de lignes ^^
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 22, 2013, 05:26:35 pm
Je suis en train de corriger la flopée d'erreurs monumentales que j'ai fait et par la même occasion de réduire le code et le diviser en fonctions/objets.
Le code n'était que l'accumulation de plusieurs semaines de brouillon de diverses choses sans rapport avec le jeu, d’où le nombre de choses incohérentes et inutiles.
Sinon merci des conseils.
Titre: Re : Un Miniminijeu.
Posté par: Fifut le Mai 23, 2013, 08:13:17 pm
Je viens de tester ton jeu et je l'ai trouvé bien fun!

C'est rapide, les parties s'enchainent très rapidement, je trouve sa sympa!

Ps : J'adore la musique  8)
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 25, 2013, 11:20:22 am
Merci beaucoup :D
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 26, 2013, 02:53:50 pm
Et pour ce qui est de : (l.221)
if(tempsEcoule > seconds(5)) vitesse = 15;
if(tempsEcoule > seconds(10)) vitesse = 20;
if(tempsEcoule > seconds(15)) vitesse = 25;
if(tempsEcoule > seconds(20)) vitesse = 30;
if(tempsEcoule > seconds(25)) vitesse = 35;
Tu pourrai plutot faire quelque chose comme :
vitesse = temps.getElapsedTime().asSeconds()*0.5;
J'ai essayé, car c'est vrai que c'est en théorie plus fluide, mais je viens de remarquer que ça faisait pas mal lagger le vaisseau en mode facile, de plus en plus au fur et a mesure que le temps avançait....
Si quelqu’un sait d’où ça vient, dites le moi!
Titre: Re : Un Miniminijeu.
Posté par: ulko10 le Mai 26, 2013, 05:15:23 pm
Je sait pas pourquoi ça fait ramer le vaisseau, mais essai de limité la vitesse avec par exemple :
if(vitesse > 35) vitesse = 35;
Titre: Re : Un Miniminijeu.
Posté par: TheNoob le Mai 27, 2013, 12:30:18 am
Ca ne change rien, car ça lag à partir d'une vitesse très basse avec la méthode de multiplication, tandis qu'avec l'autre méthode, une vitesse extrèmement élevée ne cause aucun lag.
Je pense que le ralentissement est du aux calculs qui doivent être pleins de décimales (sans en être sur), mais ce que je trouve étrange, c'est que ça n'impacte ni les fps, ni la fluidité des "trucs bleus" dont les déplacements dépend de la vitesse. Seul les objets dont la place à l'écran dépendent de la position de la souris, sans aucun lien avec la variable vitesse, semblent affectés par un gros lag...
Bref, je trouve ca étrange.