Mastermind avec php

Résolu/Fermé
renjie - 6 nov. 2007 à 03:24
 k.hicham - 13 nov. 2007 à 18:36
salamo elikom



je veux programmer le jeu mastermind en php il contient 3 niveau
1-> debutant: qui ne permet pas la repetition des chiffres ( les 4 chiffres doivent etre distincts)
2-> expert : qui permet la repetition des chiffres
3) ->intelligent : la possibilite d'une case reste vide
alors que jai pas trouvé les fonction qui peut maider dans ce script pour nous permet la repetition des valeurs aussi la possibilite d'une case vide.


merci d'avance de vouloir m'aider,
A voir également:

14 réponses


aucun personne ne veux m'aider
4
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 nov. 2007 à 21:42
Salut

Désolé, je n'avais pas vu ton post.
Je te donne pas la syntaxe php, mais une méthode pour choisir 4 chiffres distincts.
Je suppose que ya 6 couleurs (0,1,2,3,4,5) différentes.
Tu fais un tableau de 6 cases initialisées à 0 1 2 3 4 5.
Tu mélanges ce tableau en échangeant des indices pris au hasard. Et tu prends les 4 premières cases du tableau.

Si tu veux 4 chiffres qui peuvent être identiques. Tu tires un nombre aléatoire. Pour la case vide, tu peux par exemple choisir arbitrairement 7 comme case vide. Si le nombre pris au hasard est 7, alors tu initialises la case à null.

J'espère avoir répondu à ta question

Bonne soirée
1
salamoelikom



merci bien pour ton aide
pour les 4 chiffres il est obligatoire d'utiliser rand() qui fait choisir par defaut les nombres sans que je les sache(le pc il meme qu'ils les choisir) alors la methode que tu ma donne est inutile dans ce cas,
et pour la case vide je vais essyee et je vous affiche le resultat

encore une merci pour ta reponse
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 nov. 2007 à 22:33
Oui rand() fait choisir les nombres aléatoirement.
Mais tu as dit qu'en débutant, il faut que tous les nombres soient différents. avec rand() rien te dit que tu vas tirer que des nombres différents.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
salam:
Bonjour, renjie & fidddy ;
c vrai que rand() ne tire pas forcement des nombres différents, mais on peut avec une petite 'astuce' de tester si on a deux variable ou plus ont la mèm valeur, si oui :

ALGO :
chaque fois rand() tire une value on le stock dans le tableaux,
on initialise le compteur c à 0,
et on cherhce en parcourant toutes les élements précidents du tableaux si on a une valeur déja existe identique à cette valeur tiré.
on incrémente le compteur c,
et enfin si le compteur a été incrimenter
on décrimente l'indice i pour refaire le rand().

PHP :
srand();
// echo "lancer rand";
for($i=0; $i<4; $i++)
{
$haz[$i]=rand(0,9);
$c=0;
for($j=0; $j<$i; $j++)
{
if($haz[$i]==$haz[$j])
$c++;
}
if($c>0) $i--;
}

j'espére que m'astuce' est comprénsible.
à bien tôt ------ k.hicham ------ESTE
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
11 nov. 2007 à 00:16
Salut kab_hicham,

Oui c'est la méthode qui parait la plus logique. Mais le problème de celle-ci est que ce n'est pas une bonne habitude à prendre lorsqu'il y a pleins de nombres à tirer. En effet, le compilateur pourrait retomber plusieurs fois sur des nombres déjà tirés. D'autant plus que c'est un algorithme n'a pas une bonne complexité.
La méthode consistant à initialiser un tableau et de le mélanger par indice a une complexité en O(n).

Cdt
0
Salam,
salut Fiddy;

Je te comprend bien ce que tu veux dire ("on initialise le tableaux avec quatre chifres et on les melange par indice ") mais pourtant toi t'a pas encore comprend le but du jeux, il ne faut pas que les chifres tiré soit initialisé par le programmeur, seule la machine à le droit de choisir aléatoirment les quatres chifre à l'interval [0-9].


pour notre cas on a juste 4 chifres à tiré, ce qui fait déja la probabilité de tomber sur des chifres déja existe est trés petit.

j'éspere que vous avez déja jouer sur ce type de jeux "Master mind" pour bien comprendre le principe. vous l'aver dit

google is y'r friend, have fun with PHP
à bien tôt ------ k.hicham ------ESTE
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2007 à 07:45
Salut kab_hicham,
Je pense que tu n'as pas bien compris mon algorithme alors.

Tu initialises un tableau. Le programme le mélange en prenant deux indices au hasard. Et on effectue plusieurs itérations.
Les valeurs choisies sont donc également des valeurs aléatoires.

Cdt
0
salamoelikom;


salut hicham et fiddy merci pour vos participations je pense que la mielleur methode pour eviter la repetition des valeusr choisisseés par rand est les met dans un fichier et cela on pt garder les memes valeurs.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2007 à 23:57
Salut

renjie. Euh, avec ta solution, je ne vois où est l'aspect aléatoire. A moins que j'ai pas compris ce que tu voulais dire.

Cdt
0
salamoelikom;


je parle sur les repetitions des valeurs que achaque fois le joueur repete le jeu ( avant qu'il depace 10 fois ) il faut que les valeurs choisissées par rand() restent les meme ( c'est pa le meme problem de la repetition des chiffres) mais comm mm c'est la solutionb de mastermind pour eviter le changement des valeurs de rand() parcque achque fois quand excute le programme rand() prend des nouvelles valeurs.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
13 nov. 2007 à 00:20
Re,

Si tu veux qu'il garde les mêmes valeurs, tu en prends toi même au pif, et tu les mets dans ton programme. Enfin, mettre ça dans un fichier, c'est se compliquer la vie. Mais c'est toi le programmeur ;)

Cdt
0
salamoelikom,


c'est n'est pas complique, il est simple de travailler avec les fichiers, mais c'est ta une solution mieu sera mieux ...
0
Salam:

Bonjour, renjie & fidddy ;
Moi j'ai cru au début que le problème discuté concerne le fait que rand() doit tirer 4 chiffres aléatoirement sans répétition. :s

ben, mnt c un autre problème entamé le fait que les quatre chiffres tirés doit reste les mêmes pendant la partie du jeux (10 essais), oui ce que t'a dit renjie:(" pour eviter la repetition des valeusr choisisseés par rand est les met dans un fichier et cela on pt garder les memes valeurs.") est envisageable,clair mais il faut pas ignoré que le fichier en local où tu va mettre tes valeurs ne doit pas être accessible par l'utilisateur et par la suite tes 4 chiffres vont être dévoilé, et par la suite en perde le principe du jeux. "Master Mind"

Pour ça je te propose deux solution soit tu les mets dans un fichier mais en cryptage une des fonction (md5(),crypt(),.. ) et on a pleins d'autres.
Si non si t'a pas envie de faire en sorte de cryptage tu doit mettre ton fichier en serveur (hebergeur) comme ça tu protège tes 4 chiffres tranquilelment :).

j'espère j'su rester objectif ds mon analyse c mon point de vue elle est discutable.
à bien tôt ------ k.hicham ------ESTE
0