Petit démineur

Description

C'est le premier script que je place ici, alors mci de pas être trop méchant ;-). Je m'ennuyai, alors j'ai fait ce petit démineur (très vite fait!!!). Tout tiens dans un fichier : demineur.htm. Voici le code à copier :

Source / Exemple :


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>..:: DEMINEUR ::..</title>
<script language="JavaScript">
accueil = "<table><tr><td>Nb De colonnes :</TD><TD><input type='text' name='NbCols' size='5' maxlength='256' value='10'></td></tr>";
accueil += "<tr><td>Nb De Lignes :</td><td><input type='text' name='NbLignes' size='5' maxlength='256' value='10'></td></tr>";
accueil += "<tr><td>Nb De mines :</td><td><input type='text' name='NbMines' size='5' maxlength='256' value='10'></td></tr>";
accueil += "<tr><td><input type='submit' value='Jouer' onClick='go();'>";
color = new Array(8);
color[0] = "#0000FF";
color[1] = "#E22000";
color[2] = "#0BE200";
color[3] = "#E200CF";
color[4] = "#E29500";
color[5] = "#00DAE2";
color[6] = "#891114";
color[7] = "#4C1189";

function NewPartie() {
  document.getElementById('Corpus').innerHTML = accueil;
}

function go() {
 NbCols = Math.floor(FormCorps.NbCols.value);
 NbLignes = Math.floor(FormCorps.NbLignes.value);
 NbMines = Math.floor(FormCorps.NbMines.value);
 if (NbMines < (NbLignes*NbCols)) {
  tableau = "<table border=1><tr><td align=center colspan=";
  tableau += NbCols + "><input type='button' value='Nouvelle partie' onClick='NewPartie();'></td></tr>";
  carte = new Array(NbLignes);
  for (j=1;j<=NbLignes;j++) {
    tableau += '<tr>';
    for (i=1;i<=NbCols;i++) {
      tableau += '<td width=30 height=30 align=center><div id="cel' + j + ',' + i + '">';
	  tableau += '<input type="button" value="?" onclick="devoiler(' + j + ',' + i + ');">';
	  tableau += '</div></td>'; 
    }
	tableau += '</tr>';
  }
  document.getElementById('Corpus').innerHTML = tableau;
  carte = new Array(NbLignes);
  CaseJoue = new Array(NbLignes);
  for (j=0;j<NbLignes;j++) {
    carte[j] = new Array(NbCols);
	CaseJoue[j] = new Array(NbCols);
	for (i=0;i<NbCols;i++) {
	  carte[j][i] = 0;
	  CaseJoue[j][i] = 0;
	}
  }
  Nb = 0;
  while (Nb<NbMines) {
    proba = (NbMines-Nb) / (NbCols * NbLignes);
    for (j=0;j<NbLignes;j++) {
      for (i=0;i<NbCols;i++) {
	    u = Math.random();
	    if (u<proba && Nb <NbMines) {
	      Nb++;
	  	  carte[j][i] = "#";
		  if (j!=0) {
		    if (carte[j-1][i]!="#") {carte[j-1][i]++;}
		    if (i!=0) {
		      if (carte[j-1][i-1]!="#") {carte[j-1][i-1]++;}
		    }
		    if (i!=(NbCols-1)) {
		      if (carte[j-1][i+1]!="#") {carte[j-1][i+1]++;}
		    }
		  }
		
		  if (j!=(NbLignes-1)) {
		    if (carte[j+1][i]!="#") {carte[j+1][i]++;}
		    if (i!=0) {
		      if (carte[j+1][i-1]!="#") {carte[j+1][i-1]++;}
		    }
		    if (i!=(NbCols-1)) {
		      if (carte[j+1][i+1]!="#") {carte[j+1][i+1]++;}
		    }
		  }
		
		  if (i!=0) {
		    if (carte[j][i-1]!="#") {carte[j][i-1]++;}
		  }
	 	
		  if (i!=(NbCols-1)) {
		    if (carte[j][i+1]!="#") {carte[j][i+1]++;}
		  }
	    }
	  }
	}
  }
  NbCaseDec = 0;
  NbCaseADec = (NbCols * NbLignes) - NbMines
 }
 else
 {
  accueil2 = accueil;
  accueil = "Impossible, il faut qu'il y ai moins de mines que de cases<br>" + accueil;
  NewPartie();
  accueil = accueil2;
 }
}

function devoiler(lig,col) {
  if (carte[lig-1][col-1] == "#") {
    fin('boum');
  }
  else
  {
    if (CaseJoue[lig-1][col-1]==0) {
      NbCaseDec++;
	  CaseJoue[lig-1][col-1]=1;
	}
    if (carte[lig-1][col-1]!=0) {
      document.getElementById('cel' + lig + ',' + col).innerHTML = "<font color='" + color[(carte[lig-1][col-1]-1)] + "'>" + carte[lig-1][col-1] + "</font>";
	}
	else
	{
	  document.getElementById('cel' + lig + ',' + col).innerHTML = carte[lig-1][col-1];
	}
	if (NbCaseDec == NbCaseADec) {
	  fin('Bravo');
	}
	if (carte[lig-1][col-1]==0) {
	  if (lig!=1 && col!=1 && CaseJoue[lig-2][col-2]==0) {
        devoiler((lig-1),(col-1));
      }
	  if (lig!=1 && CaseJoue[lig-2][col-1]==0) {
	    devoiler((lig-1),col);
      }
	  if (lig!=1 && col!=1 && CaseJoue[lig-2][col]==0) {
        devoiler((lig-1),(col+1));
      }
	  
	  if (col!=1 && CaseJoue[lig-1][col-2]==0) {
	    devoiler(lig,(col-1));
	  }
	  if (col!=NbCols && CaseJoue[lig-1][col]==0) {
	    devoiler(lig,(col+1));
	  }
	  
	  if (lig!=NbLignes && col!=1  && CaseJoue[lig][col-2]==0) {
	    devoiler((lig+1),(col-1));
	  }
	  if (lig!=NbLignes  && CaseJoue[lig][col-1]==0) {
	    devoiler((lig+1),col);
	  }
	  if (lig!=NbLignes && col!=NbCols  && CaseJoue[lig][col]==0) {
	    devoiler((lig+1),(col+1));
	  }
	}
  }
}

function fin(message) {
  alert(message);
  for (j=0;j<NbLignes;j++) {
    for (i=0;i<NbCols;i++) {
      if (carte[j][i]!=0 && carte[j][i]!="#") {
      document.getElementById('cel' + (j+1) + ',' + (i+1)).innerHTML = "<font color='" + color[(carte[j][i]-1)] + "'>" + carte[j][i] + "</font>";
	  }
	  else
	  {
	    document.getElementById('cel' + (j+1) + ',' + (i+1)).innerHTML = carte[j][i];
	  }
	}
  }
}
</script>
</head>
<body onLoad='NewPartie();'>
<form name='FormCorps'>
<div id='Corpus'>

</div>
</form>
</body>
</html>

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.