Probleme avec systeme basique de localisation

Résolu/Fermé
Utilisateur anonyme - 18 avril 2018 à 00:10
 Utilisateur anonyme - 18 avril 2018 à 21:33
Bonjour !
Je commence tout juste en C++ et je voulais faire une sorte de "cadrillage" (comme sur les cartes ou a la bataille navale avec A1, A2, B1 ...) et permettre un déplacement en partant du centre.

Voici mon code : https://postimg.cc/hJQbJ77T

J'ai donc créé un array de 3 par 3 avec le nom des cases.
J'ai utilisé un switch pour le déplacemement sauf que voila ... Pour mvt = E je me déplace vers le nord; pour mvt = S je me déplace vers l'ouest et mvt = N ou O (la lettre pas zéro) font crasher le programme.

La solution doit être très simple mais je dois avouer qu'elle m'échappe ...
Donc par avance, merci beaucoup pour votre aide !
HF
Jøckill
A voir également:

1 réponse

[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 088
Modifié le 18 avril 2018 à 11:28
Salut Jøckill,

Ne poste pas une image (de plus sur un autre site).

Copie-colle ton code sur le forum entre balises "code". Cela permet de préserver l'indentation de ton code, de colorer la syntaxe et numéroter tes lignes. Si tu n'as pas vu le bouton de l'éditeur te permettant de poster ton code correctement, il est là :


Au sujet de ton code, ton code crashe ou affiche des caractères arbitraires, car tu utilises des indices négatifs sur le tableau
string carte[3][3];
, or les indices de ce tableau vont de 0 à 2, tu tentes donc d'accéder à quelque chose en dehors des limites du tableau.

Tu devrais mettre les indices dans deux variables contenant la position horizontale et verticale courante (donc au départ 1 et 1 puisque tu décides de partir du milieu), puis modifier les variables selon le déplacement. Du coup, tes coordonnées sont, en fait, les indices du tableau et le contenu B1, etc. ne sert pas à grand chose.

Si tu mets ton déplacement dans une boucle, pour te déplacer plus d'une fois, tu devras aussi décider ce qu'il arrive si on tente un déplacement en dehors des limites du tableau, par exemple, refuser le déplacement vers le Nord si la position horizontale actuelle est déjà 0, sinon tu te trouveras avec un problème similaire.

Dal
Utilisateur anonyme
18 avril 2018 à 13:27
Salut !
Désolé pour le screen j'étais pas au courant que ça ne se faisait pas -même si avec un peu de réflexion c'est logique-

Et pour le code merci beaucoup ! Je vais essayer ça en rentrant :)
0
Utilisateur anonyme
18 avril 2018 à 15:49
Salut
Alors non c'est toujours pas réglé...
En fait on ne peut pas en c++ classique associer des variables en déclarant l'array
 double a[n] 
est illégal en c++
Cependant il l'est en g++ mais je ne sais pas passer du c++ au g++ x'D
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 088
Modifié le 18 avril 2018 à 16:58
Tu n'as toujours pas posté ton code, ta capture ne contient pas
double a[n];
et je vois pas pourquoi, en rapport avec ta question initiale, tu voudrais écrire quelque chose comme cela.

Cela serait du C, et non du C++, valide à partir de C99 (c'est à dire la révision du standard du C datant de l'année 1999), qui supporte les tableaux à taille variable (VLA - Variable-length array) dont la taille peut être déterminée à l'exécution. A ma connaissance cette partie de l'évolution du C n'a pas fait son chemin en C++.

Un programmeur C++ utiliserait plutôt
std::vector
pour faire cela et plus.

https://fr.cppreference.com/w/cpp/container/vector

Le C et le C++ sont deux langages différents.
0
Utilisateur anonyme
18 avril 2018 à 21:33
Cette fois ci c'etait volontaire ;)
Mais justement je voulais montrer qu'un array avec une variable en parametre c'est pas possible.
Et oui tu as raison le C++ est dépourvu des VLA. (j'ai fait mes recherches ^^)
Je vais jeter un coup d'oeil sur ton lien merci

J'ai finalement opté pour une solution bien plus simple : j'ai réduit ma carte finale a 20*30 et numéroté les cases unes par unes. Comme ca un déplacement d'une case vers le haut ca me donne "x = x-20"; vers la droite "x = x+1" ...

Ca va etre loooooooooooooooong ... x')

Merci beaucoup pour l'aide c'est toujours sympa d'avoir quelqu'un a qui parler
Bonne continuation !
0