Utilisation de IndexOf()

JoahS Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
 Profil bloqué -
Bonsoir,

J'essaie de faire un pendu en javascript mais j'ai beaucoup de mal à savoir comment utiliser IndexOf pour récupérer la lettre soumise par le joueur pour la stocker et, le cas échéant, la remplacer dans la liste des tirets du mot.
La lettre est soumise par des boutons portant chacun une lettre, et j'ai relié une fonction avec la valeur correspondante de cette façon :

<input type="button" name="A" value="A" onClick="Recherche('A')"/> (dans la partie HTML)

function Recherche(value) (dans la partie script)

getElementById permet de stocker une valeur dans une variable si je ne me trompe pas, et indexOf de déterminer la position de la lettre dans la chaîne, mais comment récupérer cette position après, et l'utiliser pour remplacer le tiret par la lettre ? Par un tableau ? Est-ce qu'il faut faire une boucle de recherche selon le résultat de indexOf (égal ou différent de -1) ?

Merci d'avance pour le coup de main =)

3 réponses

Profil bloqué
 
Salut,

A la volée, je dirais qu'il faut faire une boucle du style
while indexof(...)!=-1{ $i=indexof(...); document.getelementbyid($i).value='tavaleur';}
0
JoahS Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
En plus d'être une débutante, je suis vraiment une bille j'avoue, je n'ai pas réussi à utiliser ton code =/

Sinon, depuis hier soir, j'ai avancé un peu sur la fonction, et je suis arrivée au stade où je parviens à afficher les lettres utilisées mais pas à les remplacer lorsqu'elles sont bien présentes :

function Recherche(value)
{

var presence_lettre, lettre_deja_testee, remplacees;
presence_lettre= achercher.indexOf(value);
lettre_deja_testee = essayees.indexOf(value);
remplacees = document.getElementById('mot').innerHTML;
document.getElementById('essais').innerHTML = "";

//Verification de la présence ou absence de la lettre dans le mot à trouver
if(reussite == 0){
  if(lettre_deja_testee != -1){
  alert('Lettre déjà proposée !');
  document.getElementById('essais').innerHTML =value;
  }
  //Si la lettre a déjà été proposée, affichage d'une pop-up
  else{
            if(presence_lettre== -1){
    essayees=essayees+value;
    document.getElementById('essais').innerHTML =essayees;
            }
   
   //Si la lettre n'est pas dans le mot, écriture de la lettre dans la liste de lettres essayées
                    else{
                        i=presence_lettre; {
                        achercher[i] == value;{                        
                        remplacees[i] == value;
   remplacees=remplacees+value;
                            }
                        }
                        document.getElementById('mot').innerHTML = remplacees.join(value);
                    
      }


Sachant que remplacees et essayees sont des Array définies plus hauts, achercher correspond au mot à découvrir, reussite à la découverte du mot. Value correspond toujours à la lettre sur laquelle on a cliqué.

J'ai du mal à définir la méthode pour le remplacement, je comprends comment mais je ne sais pas le transcrire en code =/
0
Profil bloqué
 
Tu es sur de ça

i=presence_lettre; {
achercher[i] == value;{
remplacees[i] == value;
remplacees=remplacees+value;

ça a l'air d'une écriture bizarre, j'aurai plutôt mis ça

i=presence_lettre;
achercher[i] = value;
remplacees[i] = value;
remplacees=remplacees+value;
0
JoahS Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Honnêtement non, je tâtonne beaucoup ^^'
0
Profil bloqué
 
parce qu'en mettant == tu testes l'égalité, tu ne modifies pas la valeur et {} s'utilise après if ou while ou quelque chose dans le genre
0
Profil bloqué
 
A titre d'exemple

<head>

<script type="text/javascript">

function play()
{
var myst_word;
var prop_word;
var prev_word;
var c = 0;
var prop_char = 0;
var i, len_word;
var found = 0;
var nbr_tries = 10;
var still_true = false;
var nbr_rand = 0;

//rajoutez vous mots ici :
var dico = new Array ("MOT", "MOT", "TIXIS");

nbr_rand = Math.round(Math.random()*(dico.length));

myst_word = dico[nbr_rand];
len_word = myst_word.length;
for(i = 0; i <= len_word; i++)
prop_word += '*';

document.getElementById('sortietxt').innerHTML = "";
          
while(found < len_word && nbr_tries > 0)
{
document.getElementById('sortietxt').innerHTML = "<b>Trouvez le mot : ";

for(i = 0;i <= myst_word.length; i++)
{
c = myst_word.charAt(i);
if(prop_word.indexOf(c) > -1)
document.getElementById('sortietxt').innerHTML += c;
else
document.getElementById('sortietxt').innerHTML += '*';
}

document.getElementById('sortietxt').innerHTML += "</b><br />";

nbr_tries2 = nbr_tries;

if(nbr_tries2 > 1)
document.getElementById('sortietxt').innerHTML += "<br />Il vous reste "+nbr_tries2+" essais";
else if(nbr_tries2 == 1)
document.getElementById('sortietxt').innerHTML += "<br />Il vous reste 1 essai";

document.getElementById('sortietxt').innerHTML += "<br /><br />Proposez une lettre : ";
prop_char = prompt("Proposez une lettre :", prop_char);
prop_char = prop_char.toUpperCase();
document.getElementById('sortietxt').innerHTML += prop_char;

prev_word = prop_word;
for(i = 0;i <= myst_word.length; i++)
{
 c = myst_word.charAt(i);
 if(prop_char == c)
 {
  if(!still_true)
  still_true = true;
  
  if(prev_word.indexOf(c) <= -1)
  {
  prop_word += c;
  found++;
  }
 }
}

if(!still_true)
nbr_tries--;
else
still_true = false;

document.getElementById('sortietxt').innerHTML += "<br /> <br />";
}//while(found < len_word && nbr_tries > 0)

if(nbr_tries > 0)
document.getElementById('sortietxt').innerHTML += "Gagné !<br />";
else
document.getElementById('sortietxt').innerHTML += "Pendu !<br />";
document.getElementById('sortietxt').innerHTML += "Le mot était : "+myst_word+"<br />"
}

</script>

</head>

<body>

<form name="form">
<input type="button" onclick="play()" value="Commencer" /></form>
<div id="sortietxt" style="border:1px black solid;padding:5px;background:#D7DDE6">Cliquez sur le bouton pour commencer</div>

</body>


(le code n'est pas de moi)

Varaldi Q.
Laisse moi 2 minutes que j'te trouve un autre truc...
0
JoahS Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
J'avais déjà aperçu ce code mais je n'ai pas pu modifier le mien en regardant la méthode parce que j'ai traduit le mot à trouver en tirets par un document.write et une boucle
taille=achercher.length
for (x=0 ; x<=(taille-1); x++)
{
var z= document.write(" _ ");
	}	

J'ai essayé de modifier ce morceau de code pour utiliser getElementById mais je perds dans ce cas le nombre de tirets :
taille=achercher.length
for (x=0 ; x<=(taille-1); x++)
{
var z= document.getElementById('mot').innerHTML=" _ ";
	}	

Le problème de la première version est l'absence d'Id, ça bloque pour le remplacement si je comprend bien, mais je ne sais pas comment ajuster mon nombre de tirets avec la deuxième =/
0