Voir le résultat Retour à la page du projet
Afficher/Masquer les commentaires
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8"/>
<title>IA morpion</title>
</head>
un peu de style ...
<style>
body {
background-color: #d1dae3;
text-align:center;
font-family:"Arial",Arial,serif;
font-size: 12px;
color:#000099
}
textarea {font-size: 50px;resize:none}
</style>
Le code javascript :
Score : <span id="score">0</span>
<br/>
<canvas id="dessin"></canvas>
<script language="Javascript" type="text/javascript">
var Etatjeu=new Array();
//listes des fonctions
//liste represente Etatjeu
function ListeReste(liste){
var Reste=new Array();
for (i=0; i<9; i++) {
if (liste.indexOf(i)==-1){
Reste.push(i)
}
}
return Reste
}
function ListeFils(liste){
var Fils=new Array();
Reste=ListeReste(liste);
for (i=0; i<Reste.length; i++){
Fils.push([Reste[i]]);
}
for (i=0; i<Reste.length; i++){
Fils[i]=liste.concat(Fils[i]);
}
return Fils
}
function Victoire(liste){
var l=new Array(0,0,0,0,0,0,0,0,0)
var n=(liste.length+1)%2;
for (i=n; i<liste.length; i=i+2){
l[liste[i]]=1;
}
if ((l[0]==1 && l[1]==1 && l[2]==1) ||(l[3]==1 && l[4]==1 && l[5]==1) ||(l[6]==1 && l[7]==1 && l[8]==1) ||(l[0]==1 && l[3]==1 && l[6]==1) ||(l[1]==1 && l[4]==1 && l[7]==1) ||(l[2]==1 && l[5]==1 && l[8]==1) ||(l[0]==1 && l[4]==1 && l[8]==1) ||(l[2]==1 && l[4]==1 && l[6]==1) )
{return 1}
else {return 0}
}
var seuil
function MeilleurCoup(liste,niveau){
if (niveau==0){seuil=ListeReste(liste).length-1}
var Force=Math.pow(-1,niveau+1);
var force;
var Coup=9;
var coup=700;
var i;
for (i=0; i<9-liste.length; i++){
if (niveau%2==0){
force=Victoire(ListeFils(liste)[i]);
if (force==1){
return [force,ListeReste(liste)[i]]
}
else {
if (niveau<seuil){
force=MeilleurCoup(ListeFils(liste)[i],niveau+1)[0];
if (force>Force){
Force=force;
Coup=ListeReste(liste)[i];
}
}
else {return [Victoire(liste),ListeReste(liste)[0]]}
}
}
if (niveau%2==1){
force=-1*Victoire(ListeFils(liste)[i]);
if (force==-1){
return [force,ListeReste(liste)[i]]
}
else {
if (niveau<seuil){
force=MeilleurCoup(ListeFils(liste)[i],niveau+1)[0];
if (force<Force){
Force=force;
Coup=ListeReste(liste)[i];
}
}
else {return [Victoire(liste),ListeReste(liste)[0]]}
}
}
}
return [Force,Coup]
}
function Afficher(liste){
var affichage=new Array("-","-","-","-","-","-","-","-","-");
for (i=0; i<liste.length; i++){
if(i%2==0){
affichage[liste[i]]="X";
}
else {affichage[liste[i]]="O";}
}
document.forms[0].elements[3].value=(affichage[0]+affichage[1]+affichage[2]+"\n"+affichage[3]+affichage[4]+affichage[5]+"\n"+affichage[6]+affichage[7]+affichage[8]);
}
function jouer(liste){
//renvoie la touche entrée en coup invalide
document.getElementById("coup").onkeypress = function(evenement) {
return (evenement.keyCode != 13);}
if (Victoire(liste)==1||liste.length>8){window.location.reload()}
else{
var k = document.forms[0].elements[1].value;
k=parseFloat(k);
if (ListeReste(liste).indexOf(k)!=-1){
liste.push(k);
var list=new Array();
var i;
for (i=0; i<liste.length; i++)
{list.push(liste[i])}
var l=MeilleurCoup(list,0)[1];
liste.push(l);
Afficher(liste);
if (Victoire(liste)==1){document.forms[0].elements[2].value=("rejouer");alert("IA a gagné")}
else if ( liste.length>8){document.forms[0].elements[2].value=("rejouer")}
}
else {alert("Numéro non valide")}
}
document.forms[0].elements[1].value="";
document.forms[0].elements[1].focus();
//coup.value="";
//coup.focus();
}
</script>
Le code html composé d'un formulaire avec une zone de texte et leurs id.
<body onload="document.forms[0].elements[1].focus()">
<h1>MORPION</h1>
<form autocomplete="off">Voici le numéro des cases<br>
<textarea id="area" rows="3" cols="3" readonly="readonly">012
345
678</textarea><br>
Tape le numéro de la case<br>
<input type="text" value="" id="coup" onkeyup="jouer(Etatjeu)" ><br>
<input type="button" value="rejouer" onclick="window.location.reload()"><br>
<textarea id="area" rows="3" cols="3" readonly="readonly">---
---
---</textarea><br>
©mathartung
</form>
</body>
</html>