au scrabble ce ne sont pas des lettres que l'on manipule mais des jetons qui valent des points sur lesquels il y a des lettres mais pas tout le temps (joker) mais une fois sur le plateau il valent tous une lettre aussi ;
le sac dans lequel tu pioches doit pouvoir être interrogé pour savoir combien de jetons il reste ;
on doit pouvoir tirer des jetons, mais aussi pouvoir les remettre.
Tout d'abord merci pour votre réponse mais je n'arrive pas à l'appliquer à mon problème.
Je vous mets le code que j'ai fait, mais j'ai 2 problèmes mes chevalets sont à l'affichage identiques (d'où ma question pour obtenir une chaîne aléatoire à partir d'une autre, car je pense que c'est de cette partie de mon code d'où vient le problème) et je ne sais pas comment faire pour qu'une fois une lettre tirée elle ne puisse plus être utilisable.
(Pour information mon chevalet fait partie d'une structure t_joueur et peut contenir 7 lettres.)
void pioche(t_joueur tabjoueur[4], int nbjoueur)
{
int i,j,k;
char pioche[103]="AAAAAAAAABBCCDDDEEEEEEEEEEEEEEEFFGGHHIIIIIIIIJKLLLLLMMMNNNNNNOOOOOOPPQRRRRRRSSSSSSTTTTTTUUUUUUVVWXYZ??";
srand(time(NULL));
for(j=0;j<nbjoueur;j++)//construction de chevalet en fonction du nombre de joueurs
{
for(i=0;i<7;i++)//construction du chevalet
{
tabjoueur[j].chevalet[i]=pioche[rand()%102];//prise d'une lettre aleatoirement dans la pioche
tabjoueur[j].chevalet[7]=' ';
}
printf("chevalet joueur %d : %s",j+1, tabjoueur[j].chevalet);
printf("\n");
}
}
Je ne sais pas si c'est comme ça ? J'ai mis langage C++ je ne trouve pas C
Le problème comme tu fais, c'est que tu pioches un pion dans le sac, mais tu ne le retire pas du sac ! (C'est pourtant nécessaire si tu veux suivre la règle du jeu).
En mélangeant les pions, c'est plus facile pour les retirer, puisque tu les retires en commençant par la fin et tu peux donc décrémenter l'indice du tableau au fur et à mesure que tu les retire.
Edit : Tu n'as pas besoin d'un deuxième tableau pour faire un échange de caractère, ce sont des char que tu échanges !
Enlève moi c'est -0 et +0 qui ne servent à rien dans ton calcul de nombre aléatoire, ça rend ton code illisible pour rien !
PS : Ils vous ont donné un projet balaise pour votre niveau non ? (J'ai lu l'énoncé).
Je suis désolé le problème c'est que je comprends pas ce que fais le code comme j'ai dit au dessus je sais pas passer d'algorithme à langage C.
Donc j'essaye de l'écrire en langage C mais j'arrive quand même pas à déchiffrer ce qu'il fait, même je sais qu'il doit mélanger aléatoirement une chaîne.
Pour échanger: int tmp = tableau[i]; tableau[i] = tableau[j]; tableau[j] = tmp; Pour les point associés à une lettre, on peut se faire un tableau de 26 cases donnant le point pour chaque lettre. Pour y accéder, en supposant que lettre soit la lettre en question: int point = tableauPoints[lettre - 'A']; Je suppose qu'on est toujours en majuscules.
Le Tout est souvent plus grand que la somme de ses parties.
Rassure moi, tu sais utilisé les boucle for parce que pour un test d'égalité ce n'est pas = mais == !!!!!!
pour échanger deux cases du tableau par exemple a[i] et a[j] : tu sauvegardes a[i] dans une variable temporaire, puis a[j] dans a[i] , puis la variable temporaire dans a[j] , c'est quand même pas bien compliqué ! Si tu peine à suivre fait toi un dessin !
J'ai essayé de voir ce que faisait ce code appliqué à ma chaine pioche et rien ne se passe, la taille de la pioche ne change pas de plus elle n'est pas du tout mélangé à l'affichage. Je suis vraiment perdu.
for(i==102; ... c'est mal parti ... Tu fais une assignation dans la première partie du for, pas un test. Pourquoi calculer la longueur de la chaîne si tu ne l'utilises pas dans ta boucle et le rand() ?
Le Tout est souvent plus grand que la somme de ses parties.
Ligne 12, tu n'entres méme pas dans le for. Le for, c'est : j'initialise (ce qui est écrit avant le 1er ; ), je teste la condition (ce qui se trouve entre les deux ; ) et si la condition est remplie, j'exécute ce qui se trouve dans le corps du for. Enfin, j'exécute la troisième partie (ce qui se trouve après le 2ème ; ).
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
J'ai corrigé j'ai mis for(i=102;i=1;i--) mais du coup rien ne s'affiche, et j'ai calculé la longueur de la chaîne avant/après pour voir si elle changeait de taille mais ça n'a aucune utilité c'était juste pour moi voir si elle changeait de taille parce que je comprends toujours pas ce que ce programme est sensé faire.
Je suis désolé je me répète mais mon but étant de mélanger la pioche et d'en tirer 7 lettres aléatoirement et que ces 7 lettres ne puissent pas être reprises si je recommence un tirage.
Je suis désolé je me répète mais mon but étant de mélanger la pioche et d'en tirer 7 lettres aléatoirement et que ces 7 lettres ne puissent pas être reprises si je recommence un tirage.
Tu n'as pas besoin de te répéter, on sait très bien ce que tu dois faire, mais pour mélanger ton tableau, il te faut une boucle for (éventuellement while), mais tu ne sais pas faire une boucle for, ça fait pourtant partie des bases minimum à savoir avant de s'attaquer à un projet !
for (initialisation ; test ; itération) opération;
Merci pour votre aide, mais en effet apparemment je ne comprends pas bien le for, mon problème c'est le test dans mon for, je ne sais pas quoi mettre j'ai essayé ==1, >1,<1,>=1,<=1, et >0
Je vois à l'affichage que ma chaine est mélangé que si je mets >0, mais la taille diminue aléatoirement c'est-à-dire que des fois elle fait 60 caractères des fois 20 etc...
Même si je relis mon cours et le liens que vous m'avez donné sur les boucles je ne comprends pas mon erreur
Le '\0' caractère de fin de chaîne, il se trouve en fin de ton tableau de caractère, à la position 102 du tableau (tes lettres sont aux posions 0 à 101).
Les indices de tableau allant de 0 à n-1.
Alors quand tu mélanges les caractères du tableau, il faut que le caractère '\0' reste en fin de chaîne, c'est à dire qu'il reste à la position 102 !
Edit : non pas de if !!! C'est juste que tu parcourt ton tableau un poil trop loin !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.