Code source du Morpion avec Intelligence Artificielle

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>