conversion d'un script javascript en php ??

Mammouth du PHP | 1966 Messages

28 mai 2007, 17:48

Bonjour à tous,

j'ai trouvé un script en javascript qui fait exactement ce que je voudrais faire en php,

il sert à créer un algorythme de mélange d'un square one,
en claire c'est une suite de mouvement qui mélange un puzzle de type rubik's cube mais en un peu plus complexe

mais voila vu qu'il y a plusieurs différence entre ces 2 languages,je n'arrive pas à le transcrire en php (il y a une notion de variable globale qui doit m'échapper au minnimum)

je vous mets le code javascript et php au cas où il y aurait une bonne âme pour s'y plonger, mais sinon si vous avez une idée de comment appliquer un script javascript dans un script php, je suis preneur

Code : Tout sélectionner

var seqlen=40; var numcub=4; var seq=new Array(); // move sequences var posit = new Array(); // piece array function parse() { var s=""; var urlquery=location.href.split("?") if(urlquery.length>1){ var urlterms=urlquery[1].split("&") for( var i=0; i<urlterms.length; i++){ var urllr=urlterms[i].split("="); if(urllr[0]=="len") { if(urllr[1]-0 >= 1 ) seqlen=urllr[1]-0; } else if(urllr[0]=="num"){ if(urllr[1]-0 >= 1 ) numcub=urllr[1]-0; } } } } parse(); function scramble(){ var i,j,ls,n,f; for( n=0; n<numcub; n++){ posit = new Array(0,0,1,2,2,3,4,4,5,6,6,7,8,9,9,10,11,11,12,13,13,14,15,15); ls=-1; seq[n]=new Array(); f=0; for(i=0; i<seqlen; i++){ do{ if(ls==0){ j=Math.floor(Math.random()*22)-11; if(j>=0) j++; }else if(ls==1){ j=Math.floor(Math.random()*12)-11; }else if(ls==2){ j=0; }else{ j=Math.floor(Math.random()*23)-11; } // if past second twist, restrict bottom layer }while( (f>1 && j>=-6 && j<0) || domove(j) ); if(j>0) ls=1; else if(j<0) ls=2; else { ls=0; f++; } seq[n][i]=j; } } } function scramblestring(n){ var s="",i,k,l=-1; for(i=0; i<seq[n].length; i++){ k=seq[n][i]; if(k==0){ if(l==1) s+="0"; s+="/"; l=0; }else if(k>0){ s+=(k>6?k-12:k)+","; l=1; }else if(k<0){ if(l<=0) s+="0,"; s+=(k<=-6?k+12:k); l=2; } } if(l==1) s+="0"; return s; } function domove(m){ var i,c,t,f=m; //do move f if( f==0 ){ for(i=0; i<6; i++){ c=posit[i+12]; posit[i+12]=posit[i+6]; posit[i+6]=c; } }else if(f>0){ f=12-f; if( posit[f]==posit[f-1] ) return true; if( f<6 && posit[f+6]==posit[f+5] ) return true; if( f>6 && posit[f-6]==posit[f-7] ) return true; if( f==6 && posit[0]==posit[11] ) return true; t=new Array(); for(i=0;i<12;i++) t[i]=posit[i]; c=f; for(i=0;i<12;i++){ posit[i]=t[c]; if(c==11)c=0; else c++; } }else if(f<0){ f=-f; if( posit[f+12]==posit[f+11] ) return true; if( f<6 && posit[f+18]==posit[f+17] ) return true; if( f>6 && posit[f+6]==posit[f+5] ) return true; if( f==6 && posit[12]==posit[23] ) return true; t=new Array(); for(i=0;i<12;i++) t[i]=posit[i+12]; c=f; for(i=0;i<12;i++){ posit[i+12]=t[c]; if(c==11)c=0; else c++; } } return false; } //--> </script> <script language="JavaScript1.1" type="text/javascript"> <!-- document.frm.len.value=seqlen; document.frm.num.value=numcub; scramble(); for( var i=0; i<numcub; i++){ document.writeln("<tr><td><font face='Arial' size=3><b>&nbsp;&nbsp;"+scramblestring(i)+"<\/b><\/font><\/td></tr>"); } //--> </script>
function scramble ()
{
	global $seq,$posit,$j;
	$posit = array(0,0,1,2,2,3,4,4,5,6,6,7,8,9,9,10,11,11,12,13,13,14,15,15);
	$ls = -1;
	$seq = array();
	$f= 0;
	for($i=0;$i<40;$i++)
	{
		do
		{
			if ($ls == 0)
			{
				$j = mt_rand(-11,11);
				if ($j>=0) $j++;
			}
			elseif ($ls == 1)
			{
				$j = mt_rand(-11,1);
			}
			elseif ($ls == 2)
			{
				$j=0;
			}
			else 
			{
				$j = mt_rand(-11,12);
			}
		}
		while (($f>1 && $j>=-6 && $j<0) || domove(j));
		if ($j>0) $ls=1;
		elseif ($j<0) $ls=2;
		else {$ls=0;$f++;}
		$seq[$i] = $j;
		echo"<pre>";print_r($posit);echo"</pre>";
	}
	return $seq;
}
function domove($f)
{
	global $posit,$j;
	if ($f==0)
	{
		for($i=0;$i<6;$i++)
		{
			$c = $posit[$i+12];
			$posit[$i+12] = $posit[$i+6];
			$posit[$i+6] = $c;
		}
	}
	elseif ($f>0)
	{
		$f=12-$f;
		if($posit[$f] == $posit[f-1]) return true;
		if($f<6 && $posit[$f+6] == $posit[$f+5]) return true;
		if($f>6 && $posit[$f-6] == $posit[$f-7]) return true;
		if($f==6 && $posit[0] == $posit[11]) return true;
		for($i=0;$i<12;$i++)
		{
			$t[$i] = $posit[$i];
		}
		$c = $f;
		for($i=0;$i<12;$i++)
		{
			$posit[$i] = $t[$c];
			if($c==11) $c = 0;
			else $c++;
		}
	}
	elseif($f<0)
	{
		$f = -$f;
		if($posit[$f+12] == $posit[f+11]) return true;
		if($f<6 && $posit[$f+18] == $posit[$f+17]) return true;
		if($f>6 && $posit[$f+6] == $posit[$f+5]) return true;
		if($f==6 && $posit[12] == $posit[23]) return true;
		for($i=0;$i<12;$i++)
		{
			$t[$i] = $posit[$i+12];
		}
		$c = $f;
		for($i=0;$i<12;$i++)
		{
			$posit[$i+12] = $t[$c];
			if($c==11) $c = 0;
			else $c++;
		}
	}
	return false;
}
function scramblestring(){
	global $seq;
	$l = -1;
	for($i=0;$i<40;$i++){
		$k=$seq[$i];
		if($k==0){
			if($l==1) $s.="";
			$s.="/";
			$l=0;
		}elseif($k>0){
			$s.=($k>6) ? $k-12 : $k;
			$s .= ",";
			$l=1;
		}elseif($k<0){
			if($l<=0) $s.="0,";
			$s.=($k<=-6) ? $k+12 : $k;
			$l=2;
		}
	}
	if($l==1) $s.="0";
	return $s;
}
scramble ();
$s =  scramblestring();
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

ViPHP
ViPHP | 5924 Messages

28 mai 2007, 20:18

Les classes mon ami, les classes :
<?php

class scramble
{

	private $seq = array();
	private $posit = array(0,0,1,2,2,3,4,4,5,6,6,7,8,9,9,10,11,11,12,13,13,14,15,15);

	public function scramble() 
	{
	
		$ls = -1;
		$j = 0;
		$f = 0;
		for($i=0;$i<40;$i++) 
		{
		
			do
			{
			
				switch( $ls )
				{
				
					case 0:
						$j = mt_rand(-11,11); 
						if ($j>=0)
						{
							$j++;
						}
						break;
				
					case 1:
						$j = mt_rand(-11,1);
						break;
				
					case 2:
						$j=0;
						break;
				
					default:
						$j = mt_rand(-11,12);
						break;
				
				}
			
			}
			while(
				($f>1 && $j>=-6 && $j<0) ||
				( (($f=$j)!==false) && $this->domove($j))
			);
		
			if($j>0)
			{
				$ls = 1;
			}
			elseif($j<0)
			{
				$ls = 2;
			}
			else
			{
				$ls=0;
				$f++;
			}
			$this->seq[$i] = $j;
		
		}
		return $this->seq;
	
	}


	private function domove($f)
	{
	
		$c = 0;
		if($f==0)
		{
		
			for($i=0; $i<6; $i++)
			{
				$c = $this->posit[$i+12];
				$this->posit[$i+12] = $this->posit[$i+6];
				$this->posit[$i+6] = $c;
			}
		
		}
		elseif($f>0)
		{
		
			$f=12-$f;
			if(
				($f<6 && $this->posit[$f+6]==$this->posit[$f+5]) ||
				($f>6 && $this->posit[$f-6]==$this->posit[$f-7]) ||
				($f==6 && $this->posit[0]==$this->posit[11]) ||
				($f>0 && $this->posit[$f-1]==$this->posit[$f])
			)
			{
				return true;
			}
		
			$t = array();
		
			for($i=0;$i<12;$i++)
			{
				$t[$i] = $this->posit[$i];
			}
			$c = $f;
		
			for($i=0;$i<12;$i++)
			{
				$this->posit[$i] = $t[$i];
				$c = (($c==11)? 0 : $c+1);
			}
		
		}
		elseif($f<0)
		{
		
			$f=-$f;
			if(
				($this->posit[$f+12]==$this->posit[$f+11]) ||
				($f<6 && $this->posit[$f+18]==$this->posit[$f+17]) ||
				($f>6 && $this->posit[$f+6]==$this->posit[$f+5]) ||
				($f==6 && $this->posit[12]==$this->posit[23])
			)
		
			$t = array();
		
			for($i=0;$i<12;$i++)
			{
				$t[$i] = $this->posit[$i];
			}
			$c = $f;
		
			for($i=0;$i<12;$i++)
			{
				$this->posit[$i] = $t[$i];
				$c = (($c==11)? 0 : $c+1);
			}
		
		}
		return false;
	
	}

	public function scramblestring()
	{
	
		$l=-1;
		$k = 0;
		$str = '';
	
		for($i=0; $i<count($this->seq); $i++)
		{
		
			$k = $this->seq[$i]; 
			if($k==0)
			{
				$str .= (($l==1)?'0':'/');
				$l=0;
			}
			elseif($k>0)
			{
				$str .= (($k>6)?$k-12:$k) . ',';
				$l=1;
			}
			elseif($k<0)
			{
				$str .= (($l<=0)?'0,':'') . (($k<=-6)?$k+12:$k);
				$l=2;
			}
		}
	
		$str .= (($l==1)?'0':'');
		return $str;
	}

}

function test()
{

	$test = new scramble();
	echo $test->scramblestring();

}

test();

?>