Php_puzzle---------- Url : http://codes-sources.commentcamarche.net/source/40264-php-puzzleAuteur : coucou747Date : 02/08/2013 Licence : ========= Ce document intitulé « Php_puzzle » issu de CommentCaMarche (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette source, dans les conditions fixées par la licence, tant que cette note apparaît clairement. Description : ============= Un jeu ou on a une image découpée en a*b cases, on enlève l a case en bas à droite, on mélange, et on doit retrouver l'image d 'origine...

créez le dossier images dans lequel vous mettr ez vos images (celles avec lesquelles vous voulez jouer), et n'oubliez pas de me ttre des droits d'accès en écriture pour les miniatures...

Source / Exemple :


<html>
<head>
<style>
table{
	bor
der-collapse:collapse;
}
table tr td, table tr td img{
	margin:0px;
	padding
:0px;
}
</style>
<script>
	var g=false;
	var l=500;
	function 
init(){
		m=new matrice();
	}
	function aclique(px, py){
		if (g){
			if (c
onfirm("voulez vous recommencer ?")){
				melange(l);
				g=false;

			}
		}else{
			if (m.clique(px, py)){
				m.affiche();
				if (m.finit()){

					alert("good game !!!");
					g=true;
				}
			}else{
				al
ert("click incorect !");
			}
		}
	}
	function melange(i){
		var 
j, py, px, a, o=-1;
		for (j=0;j<i;j++){
			b=true;
			while (b){
				px=
m.freex;
				py=m.freey;
				b=false;
				a=Math.floor(Math.random()*4);
			
	if (a==0){
					px++;
				}else if (a==1){
					px--;
				}else if (a==2){

					py++;
				}else if (a==3){
					py--;
				}
				if (px < 0 || px &g
t; 9 || py < 0 || py > 9 || o==a)
					b=true;
				if (!b){
					if (a=
=0){
						o=1;
					}else if (a==1){
						o=0;
					}else if (a==2){
				
		o=3;
					}else if (a==3){
						o=2;
					}
				}
			}
			if (!m.clique
(px, py)){
				alert("click invalide !");
			}
		}
		m.affiche();

	}
	function matrice(){
		this.freex=9;
		this.freey=9;
		this.clique=matri
ceclique;
		this.affiche=matriceaffiche;
		this.finit=matricefinit;
		this.ta
b=new Array(10);
		this.goodgame=new Array(10);
		for (i=0;i<10;i++){
			t
his.tab[i]=new Array(10);
			this.goodgame[i]=new Array(10);
			for (j=0;j<
10;j++){
				this.tab[i][j]=document.getElementById(i+"_"+j).src;
		
		this.goodgame[i][j]=document.getElementById(i+"_"+j).src;
			}
		}

	}
	function matricefinit(){
		for (i=0;i<10;i++){
			for (j=0;j<10;j
++){
				if (this.tab[i][j]!=this.goodgame[i][j]){
					return false;
				}

			}
		}
		return true;
	}
	function matriceaffiche(){
		for (i=0;i<10;i
++){
			for (j=0;j<10;j++){
				if (document.getElementById(i+"_"
+j))
					document.getElementById(i+"_"+j).src=this.tab[i][j];
			}

		}
	}
	function matriceclique(px, py){
		if (Math.abs(px-this.freex)+Math.a
bs(py-this.freey)==1){
			if (this.tab[this.freex][this.freey] && this.
tab[px][py]){
				a=this.tab[px][py];
				this.tab[px][py]=this.tab[this.freex
][this.freey];
				this.tab[this.freex][this.freey]=a;
				this.freex=px;
			
	this.freey=py;
				return true;
			}else{
				//alert(px+'---'+py+'-----///-
----'+this.freex+'---'+this.freey);
				return false;
			}
		}else{
			//ale
rt("mauvais click ("+this.freex+","+this.freey+") click
 en : ("+px+","+py+")");
			return false;
		}
	}
	m
=0;
	//alert(m.tab);
</script>
</head>
<?php
if (isset($_GET
['image'])){
	$rep=base64_encode($_GET['image']);
	echo '<body onload="
;init();setTimeout(\'melange(l);\', 10000);">';
	if (!is_dir('images/de
coupe')){
		mkdir('images/decoupe');
	}
	if (!is_dir('images/decoupe/'.$rep.'
')){
		mkdir('images/decoupe/'.$rep.'');
	}
	if (!file_exists('images/decoupe
/'.$rep.'/image_0_0.png')){
		$a=imagecreatefromjpeg('images/'.$_GET['image']);

		$x=imagesX($a);
		$y=imagesY($a);
		$b=imagecreatetruecolor(500,500);
		I
mageCopyResized($b,$a,0,0,0,0,500,500,$x, $y);
		$c=imagecreatetruecolor(50,50)
;
		$cb = imagecolorallocate($c,0,0,0);
		$cw = imagecolorallocate($c,200,200,
200);
		for ($x=0;$x<10;$x++){
			for ($y=0;$y<10;$y++){
				if ($x!=9 
|| $y!=9){
					imagecopy($c, $b,
						0, 0,
						$x*50, $y*50,
						50, 
50);
				}else{
					imagefilledrectangle($c, 0, 0, 50,50, $cw);
				}
				i
mageline($c, 0, 0, 49,0, $cb);
				imageline($c, 49, 0, 49,49, $cb);
				image
line($c, 49, 49, 0,49, $cb);
				imageline($c, 0, 49, 0,0, $cb);
				imagepng(
$c, 'images/decoupe/'.$rep.'/image_'.$x.'_'.$y.'.png');
			}
		}
	}
	
	echo
 '
	<table>';
	for ($y=0;$y<10;$y++){
		echo '<tr>';
		for ($
x=0;$x<10;$x++){
			echo '<td><img src="images/decoupe/'.$rep.
'/image_'.$x.'_'.$y.'.png" id="'.$x.'_'.$y.
				'" onclick="
;aclique('.$x.','.$y.');" /></td>';
		}
		echo '</tr>';
	
}
	echo '</table>';
}else{
	echo '<body>';
	if (!is_dir('images/
small/')){
		mkdir('images/small/');
	}
	$a=opendir('images/');
	while(false
!==($f=readdir($a))) {
		if (is_file('images/'.$f)) {
			if (!is_file('images/
small/'.$f)) {
				$c=imagecreatefromjpeg('images/'.$f);
				$x=imagesX($c);

				$y=imagesY($c);
				$k=min(160/$x, 120/$y);
				$x2=$x*$k;
				$y2=$y*$k;

				$b=imagecreatetruecolor($x2, $y2);
				ImageCopyResized($b,$c,0,0,0,0,$x2
,$y2,$x, $y);
				imagepng($b, 'images/small/'.$f);
			}
			echo '<a href=
"puzzle.php?image='.$f.'"><img src="images/small/'.$f.'&quo
t; /></a>';
		}
	}
}
?>
</body>
</html>