Associer un chiffre a un mot
Résolu
BadGamer
Messages postés
517
Date d'inscription
Statut
Membre
Dernière intervention
-
BadGamer Messages postés 517 Date d'inscription Statut Membre Dernière intervention -
BadGamer Messages postés 517 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
.
En gros je voudrais faire l'equivalent d'un tableau mais avec plusieurs mots (je cherche a faire un generateur de classes call of duty aléatoire)
Du genre je fait le tableau "Arme" et apres Arme[0]=mitrailette, arme[1]=sniper etc mais j'arrive pas a mettre plusieurs chaines de caracteres dans un tableau.
J'ai déja une structure "Classe" qui contient :
Et apres je voudrais faire une classe ou un tableau ou une liste, enfin je ne sait pas quel type de structure utilisé pour générer un nombre et si c'est 0 alors le type est mitrailette, si c'est 2 alors c'est sniper etc, faut que je fasse un if avec chaque nombre ?
Merci d'avance
.
En gros je voudrais faire l'equivalent d'un tableau mais avec plusieurs mots (je cherche a faire un generateur de classes call of duty aléatoire)
Du genre je fait le tableau "Arme" et apres Arme[0]=mitrailette, arme[1]=sniper etc mais j'arrive pas a mettre plusieurs chaines de caracteres dans un tableau.
J'ai déja une structure "Classe" qui contient :
char Principale[100]; char AccessoirePrincipale[100]; char Secondaire[100]; char AccesoireSecondaire[100]; char Atout1[100]; char Atout2[100]; char Atout3[100]; char Mortelle[100]; char Tactique[100];
Et apres je voudrais faire une classe ou un tableau ou une liste, enfin je ne sait pas quel type de structure utilisé pour générer un nombre et si c'est 0 alors le type est mitrailette, si c'est 2 alors c'est sniper etc, faut que je fasse un if avec chaque nombre ?
Merci d'avance
A voir également:
- Associer un chiffre a un mot
- Excel trier par ordre croissant chiffre - Guide
- Trousseau mot de passe iphone - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Mettre un mot de passe sur un dossier - Guide
- Mot de passe - Guide
3 réponses
Salut BadGamer,
Quelque chose comme cela devrait t'aider à commencer ce que tu veux faire, si j'ai bien compris (je ne connais pas Call of Duty) :
Après, si "AccessoirePrincipale" doit contenir un accessoire qui appartient à une "arme" donnée, tu devrais sans doutes créer une structure struct_armes, qui contient les différentes armes, le nombre d'accessoires, et la liste de leurs accessoires sous la forme d'un tableau de chaînes de caractères.
Si l'arme Principale ne peut être la même que l'arme Secondaire, tu dois effectuer une vérification du nombre aléatoire tiré.
etc., selon les règles du système de création de classes.
Dal
Quelque chose comme cela devrait t'aider à commencer ce que tu veux faire, si j'ai bien compris (je ne connais pas Call of Duty) :
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define MAX_LEN_ST 100 typedef struct struct_classe { char Principale[MAX_LEN_ST]; char AccessoirePrincipale[MAX_LEN_ST]; char Secondaire[MAX_LEN_ST]; char AccesoireSecondaire[MAX_LEN_ST]; char Atout1[MAX_LEN_ST]; char Atout2[MAX_LEN_ST]; char Atout3[MAX_LEN_ST]; char Mortelle[MAX_LEN_ST]; char Tactique[MAX_LEN_ST]; } CLASSE; #define NB_MAX_ARMES 2 char *arme[] = { "mitrailette", "sniper" }; int main(void) { /* à appeler une seule fois, pour initialiser le générateur de * nombres aléatoires */ srand(time(NULL )); /* Création d'une "CLASSE" */ CLASSE ma_classe; /* sélection arme Principale */ int principale = rand() % NB_MAX_ARMES; strncpy(ma_classe.Principale, arme[principale], sizeof(ma_classe.Principale)); /* etc. autres sélections */ /* affichage résultat */ printf("Ma classe :\nPrincipale = %s", ma_classe.Principale); /* terminer */ return 0; }
Après, si "AccessoirePrincipale" doit contenir un accessoire qui appartient à une "arme" donnée, tu devrais sans doutes créer une structure struct_armes, qui contient les différentes armes, le nombre d'accessoires, et la liste de leurs accessoires sous la forme d'un tableau de chaînes de caractères.
Si l'arme Principale ne peut être la même que l'arme Secondaire, tu dois effectuer une vérification du nombre aléatoire tiré.
etc., selon les règles du système de création de classes.
Dal
Quand tu parles de classe, tu entends les classes en C++ ?
Car les classes n'existent pas en C. Dans ce cas, il faut utiliser les structures comme fait dans le code de [Dal]
Car les classes n'existent pas en C. Dans ce cas, il faut utiliser les structures comme fait dans le code de [Dal]
En fait, je pense que ce mot vient de son jeu en ligne, où ils parlent de classes de personnages :
https://callofduty.fandom.com/wiki/Create-A-Class
Dal
https://callofduty.fandom.com/wiki/Create-A-Class
Dal
J'ai mis 100 pour ne pas me prendre la tete, avec 30 ça devrait etre bon mais bon voila on est pas a quelques octets ^^
Le passage que je ne comprend pas c'est:
Car le rand() % NB_MAX_ARMES; vas juste générer un nombre aléatoire et apres justement ce que je ne sait pas c'est comment associer ce nombre aléatoire au mot...pourrais tu detailler juste ce passage stp car le reste c'est bon je maîtrise c'est juste l'association du nombre aléatoire a une arme =)
Merci d'avance
Le passage que je ne comprend pas c'est:
int principale = rand() % NB_MAX_ARMES; strncpy(ma_classe.Principale, arme[principale], sizeof(ma_classe.Principale)); /* etc. autres sélections */
Car le rand() % NB_MAX_ARMES; vas juste générer un nombre aléatoire et apres justement ce que je ne sait pas c'est comment associer ce nombre aléatoire au mot...pourrais tu detailler juste ce passage stp car le reste c'est bon je maîtrise c'est juste l'association du nombre aléatoire a une arme =)
Merci d'avance
Bon, on va décomposer.
1.
Signifie que arme[0] contient "mitrailette" et arme[1] contient "sniper".
2.
Comme on a définit NB_MAX_ARMES à 2
génère un nombre aléatoire de 0 à NB_MAX_ARMES - 1, donc, ici, de 0 à 1, et place ce nombre dans la variable "principale".
3.
renvoie donc à l'arme choisie aléatoirement.
4.
copie la chaîne de caractères dans ma_classe.Principale
5.
(re-)termine la chaîne si cela était nécessaire (cf. commentaire de fiddy).
Dal
1.
char *arme[] = { "mitrailette", "sniper" };
Signifie que arme[0] contient "mitrailette" et arme[1] contient "sniper".
2.
Comme on a définit NB_MAX_ARMES à 2
int principale = rand() % NB_MAX_ARMES;
génère un nombre aléatoire de 0 à NB_MAX_ARMES - 1, donc, ici, de 0 à 1, et place ce nombre dans la variable "principale".
3.
arme[principale]
renvoie donc à l'arme choisie aléatoirement.
4.
strncpy(ma_classe.Principale, arme[principale], sizeof(ma_classe.Principale));
copie la chaîne de caractères dans ma_classe.Principale
5.
ma_classe.Principale[sizeof(ma_classe.Principale)] = '\0';
(re-)termine la chaîne si cela était nécessaire (cf. commentaire de fiddy).
Dal
char *arme[] définit un tableau de pointeurs sur des chars (lis la déclaration de droite à gauche).
Les indices permettent, en fait, de passer d'un pointeur à un autre.
Ce n'est pas réellement un tableau 2D de ce point de vue là, car le tableau arme ne contient que des pointeurs.
Certes, les pointeurs pointent vers des espaces mémoires alloués par le compilateur où se trouvent des char terminés par \0, alors, j'imagine qu'on peut en discuter :-)
Dal
Les indices permettent, en fait, de passer d'un pointeur à un autre.
Ce n'est pas réellement un tableau 2D de ce point de vue là, car le tableau arme ne contient que des pointeurs.
Certes, les pointeurs pointent vers des espaces mémoires alloués par le compilateur où se trouvent des char terminés par \0, alors, j'imagine qu'on peut en discuter :-)
Dal
Dans le cas présent, on sait que les "armes" (qui sont codées en dur dans le tableau), sont des chaînes dont la taille ne dépassent pas 100 octets, y compris le caractère \0, donc 99 caractères, le caractère \0 est déjà copié, et une nouvelle copie est redondante.
C'est la supposition (implicite) que j'ai faite en me disant que BadGamer avait vu large en dimensionnant à 100 ses chaînes. Mais Fiddy a sans doutes raison qu'une ceinture de sécurité est préférable à un grand choc, au cas où un jour tu mettrais dans ton tableau une "méga-super-arme-absolue-de-la-destruction-de-la-mort-qui-tue-apocalyptique-qui-fait-vraiment-peur-et-qui-fait-très-mal" :-D (ou si les armes sont saisies par l'utilisateur à l'avenir).
Alors, on peut effectivement faire dans ce cas :
Même si la chaîne est déjà terminée avant, cela ne fait rien, et le code est plus sûr pour l'avenir.
Dal
C'est effectivement un réflexe à prendre lorsque l'on utilise strncpy().