Le problème est que je ne peux pas tout mettre.... ça ferais beaucoup ...
Il existe plusieurs action que l'utilisateur peut faire :
- défausser
- passer son tour
- faire un mot
- recommencer (ne nous intéresse pas du tout ici, ça recharge juste la page)
Le problème d'affichage se fait quelques soit l'action faite par l'utilisateur donc je vais vous donner l'exemple lorsque l'utilisateur passe son tour :
Dans mon fichier game.php :
<p><input type="submit" value="Passer" onclick="castor();return false;"/></p>
Lorsque l'utilisateur clique sur le bouton passer, la fonction castor() qui permet de faire jouer l'intelligence artificiel est exécutée.
castor() dans game.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| // Le castor joue
function castor(){
//alert(contenupioche.length); // Message de debug pour savoir combien de carte il reste dans la pioche
// si la partie est terminé, castor ne peux pas jouer
if (!partietermine){ // Variable global
// Déclaration de varaible
var jouer=false; // Le castor n'a pas encore joué
var i; // Pour parcourir la main de castor
var j; //pour tester les éléments qui compose le nom de la carte
// On essaye de faire un mot
jouer=cherchemot(); // renvoie true si un mot a été trouvé false sinon
// S'il n'a pas fait de mot et qu'il n'a pas tenté de défausser, il défausse si possible
if (!jouer){
jouer=defaussecastor(); // renvoie true si la défausse a réussi, nfalse sinon.
}
// S'il a joué, il pioche
if (jouer){
piochecastor();
}
// S'il n'a pas jouer, il prévient l'utilisateur
else{
alert("Le castor n'a pas trouvé de mot et ne peut pas défausser.");
}
} else {
alert("La partie est terminé, vous ne pouvez pas laisser Castor jouer.");
}
} |
Le script exécute ensuite cherchemot() de game.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| function cherchemot(){
// Liste des lettres
var i; // parcours la main du castor
var elements; // Elements de la carte
var tlettre= new Array(); // Liste des lettres de la main du castor
for (i=1;i<=7;i++){
if (maincastor[i]==""){ // Variable global
tlettre[i]=""; // Il n'a pas de carte ici
} else{
elements=maincastor[i].split("-"); // On récupère les élements qui compose le nom de la carte
if (elements[2]=="joker"){ // On vérifie si la carte est un joker
tlettre[i]="_"; // si la carte est un joker la lettre est _ pour remplacer n'importe quel lettre dans la recherche du mot dans la BD
}else{
tlettre[i] = elements[2]; // Si la carte n'est pas un joker on prend la lettre de la carte
}
//alert(tlettre[i]); // Debug pour savoir quell lettre castor a dans la main
}
}
// Recherche du mot coté serveur
callScript("verifexiste.php","castor=true&a=" + tlettre[1] +"&b=" + tlettre[2] +"&c=" + tlettre[3] +"&d=" + tlettre[4] +"&e=" + tlettre[5] + "&f=" + tlettre[6] + "&g=" + tlettre[7]); // Envoie une requete au serveur avec AJAX
if (motcastor!=""){ // variable global dont la valeur a été changé sur le serveur
motexiste=true;
}
// si on trouve un mot
if (motexiste){
var mottrouve=new Array();
var j; // parcours les lettres du mot
var lettretrouve; // permet de savoir si on a trouvé la lettre ou pas
var placecarte; // Emplacement de la carte
var placelettre; // emplacement de la lettre de la carte
// On parcours chaque lettre du mot
for (j=0;j<motcastor.length;j++){
i=1;
lettretrouve=false; // on concidere que la lettre n'a pas été trouvé
while ((i<=7)&&(lettretrouve==false)){ // On parcours la main du castor
// Si on trouve la lettre
if (tlettre[i].toUpperCase()==motcastor[j].toUpperCase()){
// on place la carte sur la table
placecarte="choisicastor"+(j+1); // id de l'emplacement
//alert("Nom de la carte : " + maincastor[i]); // debug
document.getElementById(placecarte).title=maincastor[i]; // on chage le titre de l'emplacement
document.getElementById(placecarte).src="images/cartes/" + maincastor[i] + ".jpg"; // On change la source de l'image de l'emplacement
// On place la lettre
placelettre="lettrechoisicastor"+(j+1); // id de l'emplacement
document.getElementById(placelettre).value=motcastor[j].toUpperCase(); // On place la valeur de la lettre dans le formulaire
// On replace les variables
lettretrouve=true; // On a trouvé la lettre
maincastor[i]=""; // Il n'y a plus de carte à cette emplacement de la main
tlettre[i]=""; // cette lettre a été utilisé
}
i=i+1; // Lettre suivante
}
// si on a pas trouvé la carte, la lettre est un joker
if (!lettretrouve){
i=1;
while ((i<=7)&&(lettretrouve==false)){
if (tlettre[i]=="_"){
// on place la carte
placecarte="choisicastor"+(j+1); // id de l'emplacement de la carte
document.getElementById(placecarte).title=maincastor[i];
document.getElementById(placecarte).src="images/cartes/" + maincastor[i] + ".jpg"; // On change la source de l'image de l'emplacement
// On place la lettre
placelettre="lettrechoisicastor"+(j+1);
document.getElementById(placelettre).value=motcastor[j].toUpperCase(); // On place la valeur de la lettre dans le formulaire
// On replace les variables
lettretrouve=true;
maincastor[i]="";
tlettre[i]="";
}
i=i+1
}
}
}
// Attente de 3 secondes pour que l'utilisateur puisse voir les cartes joué par le castor
callScript("sleep.php","arret=3"); // sleep() n'existant pas en javascript, l'attente se fait coté serveur
// Compte les points
validemotcastor();
motcastor=""; // Le mot trouvé par le castor est de nouveau vide
motexiste=false; // le castor n'a plus de mot jusqu'au prochain tour
return true; // Un mot a été trouvé donc on retourne true.
}
// Si on ne trouve pas de mot on return false
return false;
} |
Je ne pense pas que ma fonction callscript ainsi que ce qu'il se passe coté serveur soit utile vu que le problème se pose aussi quand castor défausse et donc qu'il ne passe pas par le serveur.
validemotcastor() de game.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| // Valide un mot
function validemotcastor(){
// trouver le premier emplacement vide
var videtable=trouvervide("choisicastor"); // trouve le premier remplacement vide soit l'emplacement qui suit la dernière carte
// On récupère le mot
var mot="";
var videtableb=videtable;
var idcarte;
var idlettre;
var points=0; // points du mot
var cartetable; // nom de la carte sur la table
var elements; // element qui compose le nom de la carte
var bonus=2; // bonus si on vide la main (point multiplié par bonus)
// si castor a trouvé un mot de la taille maximum
if (videtable==-1){
videtableb=8; // nombre de carte maximum +1
}
// on parcours la table
for(i=1;i<videtableb;i++){
idcarte="choisicastor" + i ; //emplacement de la carte (image)
idlettre= "lettre" + idcarte; // emplacement de la lettre
// On ajoute une lettre au mot
mot = mot + document.getElementById(idlettre).value;
// On rajoute les points de la carte
cartetable=document.getElementById(idcarte).title; // nom de la carte
elements=cartetable.split("-"); // élement qui compose le nom de la carte
if (parseInt(elements[1],10)<=10){ // si la carte n'est pas un joker
//alert (parseInt(elements[1]));
points=points + parseInt(elements[1],10); // on rajoute les points de la carte
}
// on rajoute le bonus s'il a trouvé un mot avec toute les lettres de la main
if (i==7){
points=points * bonus;
}
// On supprime la lettre
document.getElementById(idlettre).value="";
document.getElementById(idlettre).readOnly=true; // on s'assure que readonly est bien a true (ce qui n'est pas le cas quand la lettre était un joker)
// On supprime la carte
document.getElementById(idcarte).src="images/cartes/vide.jpg";
document.getElementById(idcarte).title="vide";
}
// On place dans la comptabilisation des points
document.getElementById('pointsducastor').value = parseInt(document.getElementById('pointsducastor').value,10) + points;
document.getElementById ('motsducastor').value = document.getElementById ('motsducastor').value + mot + " : " + points + "\r\n";
} |
Un autre problème est apparue avec IE qu'il n'y a pas avec ff, la page se met à recharger de temps en temps tout en laissant le problème persister...
J'espère que c'est informations vous suffiront ... mon code game.php suit le xHTML.
Partager