Tableau aleatoire
Résolu
Igooshi
-
Igooshi -
Igooshi -
Bonjour,
j'aurai besoin de vos lumières au sujet d'un problème dont je ne trouve pas la solution.
tout d'abord je vous l'explique : (PROGRAMMATION EN C)
Je dois remplir un plateau de jeu de [8][8] de façon aléatoire avec des pions jaunes(34), rouges(20) et noirs(10). J'ai trouvé un moyen de le faire mais cette solution me semble moyenne car lorsque que je lance le programme le tableau de remplir, certes aléatoirement, mais très souvent tous les pions jaunes se trouve à la fin du plateau de jeu car plus nombreux. Alors j'aimerai savoir comment faire pour placer de manière plus égale les pions de couleur différentes.
Voici mon code :
void tab_alea(char plateau[8][8]){
int i;
int j;
int nombre=0;
int NBJ=0;
int NBR=0;
int NBN=0;
srand (time (NULL));
for (i = 0; i<8; i++)
{
for (j = 0; j<8; j++){
nombre = rand()%3;
switch(nombre){
case 0 :
NBJ=NBJ+1;
if(NBJ<35)
plateau[i][j]='j';
else{
srand (time (NULL));
j--;
}
break;
case 1 :
NBR=NBR+1;
if(NBR<21)
plateau[i][j]='r';
else{
srand (time (NULL));
j--;
}
break;
case 2 :
NBN=NBN+1;
if(NBN<11)
plateau[i][j]='n';
else{
srand (time (NULL));
j--;
}
break;
}
}
}
}
Et voici un exemple de ce que cela donne :
1 2 3 4 5 6 7 8
-------------------------
1|n |r |r |r |j |r |r |r |
-------------------------
2|n |r |r |j |j |n |n |n |
-------------------------
3|n |r |r |j |r |n |r |j |
-------------------------
4|j |r |r |j |r |n |r |n |
-------------------------
5|j |r |n |j |r |j |n |j |
-------------------------
6|r |j |j |j |j |j |j |j |
-------------------------
7|j |j |j |j |j |j |j |j |
-------------------------
8|j |j |j |j |j |j |j |j |
-------------------------
Merci
j'aurai besoin de vos lumières au sujet d'un problème dont je ne trouve pas la solution.
tout d'abord je vous l'explique : (PROGRAMMATION EN C)
Je dois remplir un plateau de jeu de [8][8] de façon aléatoire avec des pions jaunes(34), rouges(20) et noirs(10). J'ai trouvé un moyen de le faire mais cette solution me semble moyenne car lorsque que je lance le programme le tableau de remplir, certes aléatoirement, mais très souvent tous les pions jaunes se trouve à la fin du plateau de jeu car plus nombreux. Alors j'aimerai savoir comment faire pour placer de manière plus égale les pions de couleur différentes.
Voici mon code :
void tab_alea(char plateau[8][8]){
int i;
int j;
int nombre=0;
int NBJ=0;
int NBR=0;
int NBN=0;
srand (time (NULL));
for (i = 0; i<8; i++)
{
for (j = 0; j<8; j++){
nombre = rand()%3;
switch(nombre){
case 0 :
NBJ=NBJ+1;
if(NBJ<35)
plateau[i][j]='j';
else{
srand (time (NULL));
j--;
}
break;
case 1 :
NBR=NBR+1;
if(NBR<21)
plateau[i][j]='r';
else{
srand (time (NULL));
j--;
}
break;
case 2 :
NBN=NBN+1;
if(NBN<11)
plateau[i][j]='n';
else{
srand (time (NULL));
j--;
}
break;
}
}
}
}
Et voici un exemple de ce que cela donne :
1 2 3 4 5 6 7 8
-------------------------
1|n |r |r |r |j |r |r |r |
-------------------------
2|n |r |r |j |j |n |n |n |
-------------------------
3|n |r |r |j |r |n |r |j |
-------------------------
4|j |r |r |j |r |n |r |n |
-------------------------
5|j |r |n |j |r |j |n |j |
-------------------------
6|r |j |j |j |j |j |j |j |
-------------------------
7|j |j |j |j |j |j |j |j |
-------------------------
8|j |j |j |j |j |j |j |j |
-------------------------
Merci
A voir également:
- Tableau aleatoire
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
5 réponses
Salut,
Je te conseillerais d'utiliser un autre algorithme.
Par exemple, tu remplis le tableau de manière statique lors de l'initialisation. Et ensuite, tu effectues 30 itérations pour permuter les indices du tableau afin de le mélanger. La répartition devrait être meilleure.
Tiens nous au courant ;-))).
Je te conseillerais d'utiliser un autre algorithme.
Par exemple, tu remplis le tableau de manière statique lors de l'initialisation. Et ensuite, tu effectues 30 itérations pour permuter les indices du tableau afin de le mélanger. La répartition devrait être meilleure.
Tiens nous au courant ;-))).
Je ne comprend pas bien comment faire. Je dois faire une fonction qui me donne des indices aléatoires pour deux cases et les échanger ? Et le faire 30 fois ? Ne puis-je pas partir de ma fonction et donc du tableau déjà crée ?
En gros, ceci donnerait en langage algorithmique :
Ne puis-je pas partir de ma fonction et donc du tableau déjà crée ?
Le problème de ton algorithme est que tu n'as pas une bonne répartition de l'aléatoire.
C=30 TantQue C>30 Faire : i <- nbAlea(); //entre 0 et 63 compris j <- nbAlea(); //entre 0 et 63 compris echanger(plateau[0][i],plateau[0][j]) C <- C-1 FinFaire
Ne puis-je pas partir de ma fonction et donc du tableau déjà crée ?
Le problème de ton algorithme est que tu n'as pas une bonne répartition de l'aléatoire.
Encore quelques petites questions: existe-t-il une fonction prédéfinie pour faire "échanger" ou dois-je faire sa avec une variable temporaire ? et si je met " echanger(plateau[0][i],plateau[0][j])" avec les indices i et j compris entre 0 et 63 cela ne provoquera pas une erreur de mémoire ? a moins que le espace mémoire dédie des lignes se suivent ...0o
existe-t-il une fonction prédéfinie pour faire "échanger" ou dois-je faire sa avec une variable temporaire ?
Tu dois faire la fonction toi-même. Mais bon, trois petites lignes ^^.
a moins que le espace mémoire dédie des lignes se suivent ...0o
Eh oui, en C, les cases du tableau se suivent. Ainsi plateau[0][8] désignera plateau[1][0] (si plateau est un tableau 8x8). Si cet aspect te dérange, tu peux utiliser le modulo et la division pour avoir accès à la ligne et colonne, ou calculer deux fois plus de variables pseudo-aléatoires entre 0 et 7 compris.
Cdlt
Tu dois faire la fonction toi-même. Mais bon, trois petites lignes ^^.
a moins que le espace mémoire dédie des lignes se suivent ...0o
Eh oui, en C, les cases du tableau se suivent. Ainsi plateau[0][8] désignera plateau[1][0] (si plateau est un tableau 8x8). Si cet aspect te dérange, tu peux utiliser le modulo et la division pour avoir accès à la ligne et colonne, ou calculer deux fois plus de variables pseudo-aléatoires entre 0 et 7 compris.
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question