Php_puzzle

Soyez le premier à donner votre avis sur cette source.

Vue 11 649 fois - Téléchargée 1 056 fois

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

Ajouter un commentaire

Commentaires

Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
cool le script :)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
35
Kankrelune, je pars du principe que l'utilisateur de ce script ne fait pas d'upload pour ces images (et si il en fait un, il n'a qu'a vérifier comme il se doit le type lors de l'upload)

sinon, pour l'explication, oui, c'est ça...
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

A première vu tu dois mettre une image au format jpeg... d'ailleurs Coucou747 tu ne fais pas de vérification du format de l'image... ça m'étonne de toi... ou alors j'ai mal regardé... .. .

Sinon bah "image découpée en a*b cases" veux dire ce que ça veut dire... c'est plutot explicite... l'image est découpée en a carrés sur b carrés ici ça doit être 10 si j'ai bien regardé... donc 10*10 carrés = 100 carrés... .. .

@ tchaOo°
Messages postés
67
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
11 avril 2013

bonjour
peut tu m'expliquer que mettre dans /images?
en quel format?
qu entend tu par "image découpée en a*b cases"
merci
Messages postés
4
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
30 mai 2008

Vraiment chapeau pour ce script !!!
C'est nickel !
Afficher les 34 commentaires

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.