Php_puzzle

Description

Un jeu ou on a une image découpée en a*b cases, on enlève la case en bas à droite, on mélange, et on doit retrouver l'image d'origine...

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

Source / Exemple :


<html>
<head>
<style>
table{
	border-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 (confirm("voulez vous recommencer ?")){
				melange(l);
				g=false;
			}
		}else{
			if (m.clique(px, py)){
				m.affiche();
				if (m.finit()){
					alert("good game !!!");
					g=true;
				}
			}else{
				alert("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 > 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=matriceclique;
		this.affiche=matriceaffiche;
		this.finit=matricefinit;
		this.tab=new Array(10);
		this.goodgame=new Array(10);
		for (i=0;i<10;i++){
			this.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.abs(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{
			//alert("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/decoupe')){
		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);
		ImageCopyResized($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);
				}
				imageline($c, 0, 0, 49,0, $cb);
				imageline($c, 49, 0, 49,49, $cb);
				imageline($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.'" /></a>';
		}
	}
}
?>
</body>
</html>

Codes Sources

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.