Mastermind avec php

Résolu
renjie -  
 k.hicham -
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,
Configuration: Windows XP
Internet Explorer 7.0

14 réponses

  1. renjie
     

    aucun personne ne veux m'aider
    4
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  3. renjie
     
    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
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kab_hicham
     
    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
  7. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  8. kab_hicham
     
    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
  9. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  10. renjie
     
    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
  11. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  12. renjie
     
    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
  13. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  14. renjie
     
    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
  15. k.hicham
     
    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