Création d'un jeu en c++, besoin de vos conseils

  • Auteur de la discussion Nicolas3366
  • Date de début

Nicolas3366

Grand Maître
#1
Bonjour, cherchant comme dit il y a quelque temps je cherche a programmer un jeu.
Pour se faire j'ai commencer a apprendre le c++ via open Classroom.
Je crée donc ce topic dans le but de pouvoir solliciter votre aide si besoin es (et si cela ne vous dérange pas bien entendu).

Pour commencer j'ai un problème avec ce code censer créer un rectangle, il a été demander de le modifier pour que l'utilisateur puisse choisir le caractère du rectangle

le code original non modifié
1624661671498.png
si largeur = 3 et hauteur 5
le rectangle sera
***
***
***
***
***
jusque la tout fonctionne.

la version que j'ai modifié comme demandé
1624661851003.png

cette fois si le programme ne trace plus un rectangle mais par exemple si
symbole = 8
largeur = 4
hauteur = 2

ca trace ca
8
8
8
8

8
8
8
8

je comprends pas ce qui se passe, pour ceux qui peuvent résoudre mon premier problème ca serait gentil :) merci a vous.
 

svoglimacci

check memory failed but no bug detected
#2
Salut :)

Tu as remplacé la ligne :
cout << "*";
par :
cout << s << endl;
A la suite de ton char "s", un endl (fin de ligne) est envoyé sur la sortie, d'où le retour systématique à la ligne.
 

Nicolas3366

Grand Maître
#3
Hi
Bon j'espère ne pas choquer (^^) mais pourquoi t'embêter à faire ton jeu sous C++...?
Prends Unity.
Tu pourras tout y faire là bas, Unity est le roi en jeux 2D.
Et j'y ai appris énormément, je pourrai donc (si mes sévères contraintes le permettent) peut être aider.
Je sais pour unity mais la programmation m'a toujours un peu passionnée en soit le jeu est un objectif que je me fixe et que je cherche à programmer ca serait un truc simple au début affiché dans une console après en graphique je verrai
 

Nicolas3366

Grand Maître
#4
Salut :)

Tu as remplacé la ligne :
cout << "*";
par :
cout << s << endl;
A la suite de ton char "s", un endl (fin de ligne) est envoyé sur la sortie, d'où le retour systématique à la ligne.
A merci effectivement j'ai toujours vu des endl a la fin des cout donc j'en ai mis un merci ;)
 

svoglimacci

check memory failed but no bug detected
#5
A merci effectivement j'ai toujours vu des endl a la fin des cout donc j'en ai mis un merci ;)
Là en l'occurrence il n'y en avait pas, c'est toi qui l'a ajouté ;) Pour faire un remplacement basique efficace, il faut juste remplacer la totalité de la chaine 1 par la totalité de la chaine 2, et surtout sans se poser de question.
 

Nicolas3366

Grand Maître
#6
Bonjour je reviens vers vous pour une nouvelle modification demandée, a savoir si la largeur ou la hauteur sont inférieur a 0 afficher un message d'erreur moi j'ai procédé ainsi

1624729478104.png

le code fonctionne mais je voulais avoir votre avis si on pouvait le faire en prenant moins de ligne de facon a optimiser le code. merci a vous encore
 

svoglimacci

check memory failed but no bug detected
#7
Le "cout" parait inapproprié, tu devrais avoir un "cerr" comme sortie pour les messages d'erreur.
Si les longueurs sont invalides, tu devrais quitter ton programme avec le code d'erreur approprié, donc avec une instruction du genre :
return(mon_code_d_erreur_approprie);
Bref, transformer ton code en
if(...)
{
cerr("message_erre");
return(num_err_qui_correspond_au_message_err);
}
else
{
...
}


Cette méthode, en plus d'informer le programme appelant de ta sortie avec une errer, permet de faire de nombreux tests successifs sans empiler les if then else puisque chaque "if" fait sortir.
 

Nicolas3366

Grand Maître
#8
Oki merci de l'info après j'ai pas vu le cerr a quoi il sert et comme ils ont demandé juste affiché un message d'erreur j'ai mis cout
 

svoglimacci

check memory failed but no bug detected
#9
En fait tu as une entrée standard une sortie standard et une sortie erreur (ou avertissements).
Lors d'un appel par ligne de commande (sur les framework aussi), tu peux rediriger les flux de sortie en séparant sortie standard (cout) et sortie d'erreur (cerr). Et tu peux tester le code retour (ce fameux return(code_erreur) ) pour connaitre sa valeur et agir en conséquence.
 

Nicolas3366

Grand Maître
#10
Bon petit probleme sournois, dans un de mes codes que j'ai recopier sur le site pour m'entrainer, mon ide (Visual Studio Code) ne va pas plus lon que la ligne 28 a la 29 j'entre le cin mais l'ide ne poursuit pas le reste du code .. vs avez des idée si il manque un truc ? (voir le code joint dans l'archive)
 

Fichiers joints

  • 500 bytes Affichages: 5

svoglimacci

check memory failed but no bug detected
#11
Dans ton code :
C++:
    string motMysterieux...
...
    cin >> motMysterieux;
Je ne crois pas que "cin >>" fonctionne vers "string".
Il devrait y avoir un cin.readline ou cin.getline, quelque chose de ce genre.
 

Nicolas3366

Grand Maître
#12
Faut que je regarde comment ca fonctionne alors si ca se trouve oui c'est juste ca mais bizarre car le gars l'a écrit tel quel dans open classroom, enfin merci je vais regarder. Par contre quand j'inclus une bibliothèque autre que iostream et ce que je dois prendre des extensions pour mon ide ou pas besoin de chose en plus ? Car il y a plein d'extensions possibles a installer sans que je sache réellement a quoi elles servent
 

svoglimacci

check memory failed but no bug detected
#13
Faut que je regarde comment ca fonctionne alors si ca se trouve oui c'est juste ca mais bizarre car le gars l'a écrit tel quel dans open classroom, enfin merci je vais regarder. Par contre quand j'inclus une bibliothèque autre que iostream et ce que je dois prendre des extensions pour mon ide ou pas besoin de chose en plus ? Car il y a plein d'extensions possibles a installer sans que je sache réellement a quoi elles servent
Tu as mis tous les "include" ? Pour les librairies je suppose que les standard sont déjà incorporées.
 

svoglimacci

check memory failed but no bug detected
#15
Si tu peux m'expliquer la manip a faire ca serait génial car je vois pas trop ce qu'il faut faire je te remercie :)
Ben je ne connais pas C++ :)
Il y a d'autres tutos que openclassroom, c'est bien d'aller chopper de l'info un peu ailleurs, voir sur des forusm, et surtout ne pas oublier qu'il y a parfois plusieurs manières de faire une chose.
 

Nicolas3366

Grand Maître
#16
Tkt pas, je regarde comment je peux faire aussi pour régler mon problème sur ce code faut juste trouver les bons fichiers, après open classroom me fait apprendre un peu de base et je pense utiliser toutes ces bases pour créer un jeu a la fin
 

LeeLarant

Speedy Configales, le plus rapide de tout TH
Staff
#18
Ben je ne connais pas C++ :)
Il y a d'autres tutos que openclassroom, c'est bien d'aller chopper de l'info un peu ailleurs, voir sur des forusm, et surtout ne pas oublier qu'il y a parfois plusieurs manières de faire une chose.
+1
J'ai déjà goûté aux tutos OC (apprenez C, par M.Nebra) et parfois on nous demande des notions que l'on voit plus loin.
Donc ne PAS hésiter à aller voir ailleurs en même temps.
 

magellan

Modérâleur
Staff
#19
Si tu peux m'expliquer la manip a faire ca serait génial car je vois pas trop ce qu'il faut faire je te remercie :)
Pas de souci sur l'include selon moi... mais quelques "soucis" dans la syntaxe!

Commençons simple:
C++:
    string melangeMot(string petitMot)
{
string melange;
int position(0);

while (petitMot.size() != 0)
position = rand() % petitMot.size();
melange += petitMot[position];
petitMot.erase(position, 1); 

}
Deux choses
- Tu n'as pas encadré la série d'instructions que tu veux exécuter donc le while tournera à l'infini en vain
- Pas de retour de la méthode? Cela ne risque pas de remonter quoi que ce soit à l'appel de celle-ci à
C++:
 motDesordre = melangeMot(motMysterieux);
Donc deux corrections
C++:
    string melangeMot(string petitMot)
{
string melange;
int position(0);

   while (petitMot.size() != 0) {
     position = rand() % petitMot.size();
     melange += petitMot[position];
     petitMot.erase(position, 1); 
   }
return melange;
}
Je t'explique tes deux bugs
- Boucle 'infinie"
Comme tu exécutais un while sur la longueur de petiMot, celui-ci n'évoluant jamais puisque le reste n'était pas exécuté, tu ne pouvais pas en sortir. Donc, là en mettant les accolades définissant ce qui doit être exécuté...
while (petitMot.size() != 0) {
position = rand() % petitMot.size();
melange += petitMot[position];
petitMot.erase(position, 1);
}
- Pas de retour
Ta méthode ne retourne pas de réponse. Ce n'est pas obligatoire qu'une méthode réponde quoi que ce soit à son appel, il faut donc lui dire quoi répondre.
string melangeMot(string petitMot)
{
string melange;
int position(0);

while (petitMot.size() != 0) {
position = rand() % petitMot.size();
melange += petitMot[position];
petitMot.erase(position, 1);
}
return melange;
}
Là, avec ça (la commande return associée à la variable qu'on veut répondre), le programme pourra aller plus loin...

De là je te laisse continuer plus loin ^^ Je ne vais pas te mâcher tout le boulot hein!
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Membres en ligne
  • Xullragh
Derniers messages publiés
Statistiques globales
Discussions
845 276
Messages
7 569 256
Membres
1 582 997
Dernier membre
Xullragh
Partager cette page
Haut