Arbre généré automatiquement pour un tournoi-------------------------------------------- Url : http://codes-sources.commentcamarche.net/source/39974-arbre-genere-automatiquement-pour-un-tournoiAuteur : knasucreDate : 05/08/2013 Licence : ========= Ce document intitulé « Arbre généré automatiquement pour un tournoi » 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 : ============= Bonjour a tous ,

Voici mon premier code sur phpcs ,ce code est un e partie du site que je suis en train de réalisé , il permet de g& eacute;néré un arbre dynamiquement en fonction du nombre de partic ipant voulu , c'est la version 1 , je compte implémenté une gestio n des poules , et accelerer egalement la rapiditer car pour un grand nombre de j oueur , le code est assez long à s'éxecuter.

Source / Exemple :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN
" "http
://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<
title>Arbre test</title>
<meta http-equiv="Content-Type" 
content="text/html; charset=iso-8859-1" class="Style1">

</head>
<body>

<?
/*****************************************
******/
/*         Si nb_equipe declarer               */
/*******************
****************************/

if(isset($_GET['nb_equipe']))
{

/**********
*************************************/
/*        Les vars globales             
       */
/***********************************************/

$nb_equipe = $_G
ET['nb_equipe'];

$nb_col = 1;
$nb_col_p = 1;
$deb_col = 0;
$esp_col = 0;

$is_case = 1;

/***********************************************/
/*          
  Les vars de style                */
/****************************************
*******/
$height = 15;
$width = 80;

/**************************************
*********/
/*          Calculs globaux                    */
/****************
*******************************/
$max_col = 0;
	for($i = 0 ; pow(2 , $i) <=
 $nb_equipe ; $i++) $max_col += 2;
	$max_col--;
$nb_ligne = (($nb_equipe-1) *4
) + 2;

/* On Commence la table (pour les colonnes) */
echo "<table c
ellpadding='0' cellspacing='0'><tr>";

/* On fait une boucle jus
qu'au nombre maximum de colonne */
for($nb_col ; $nb_col <= $max_col ; $nb_c
ol++)
{

	/* On reinitilise quelques variable et on affiche une nouvelle colo
nne */
	echo "<td valign='top' width='".$width."'>";

	$is_case = 1;
	
/* Si la colonne n'est pas une colonne lien */	
if($nb_col 
% 2 == 1)
{
	/* Certain calcul */
	$deb_col = pow(2 , $nb_col_p) - 1;
	$esp_
col = $deb_col * 2;
	
	/* Une boucle du nombre de ligne dans une colonne */
 
 for($i = 1;$i < $nb_ligne ; $i++)
	{
	  /* Si on a pas atteint le premier 
affichage */
		if($i < $deb_col)
		{	
			echo "<table cellpadding=
'0' cellspacing='0' border='0' height='".$height."'><tr><t
d></td></tr></table>";
		}
		
		/* si c'est une cas
e ( de hauteur 2 * $height ) et que c'est bien la premiere ligne de la case (gra
ce au modulo) */
		else if($is_case == 1 && $i % 2 == 1)
		{
			/* Le
 texte d'affichage de la case */
			echo "<table cellpadding='0' cellsp
acing='0' border='1' height='".(2*$height)."' bgcolor='#8080FF' width=
'".$width."' align='center'><tr><td width='".$width.&
quot;' align='center'><font size='1'>".$i."</font></
td></tr></table>";
			$i += 2;
			$is_case = 0;
		}
		/*
Sinon :) 
		else
		{
			echo "<table cellpadding='0' cellspacing='0' 
border='0' height='".$height."'><tr><td></td><
/tr></table>";
		}*/
		/*rapiditer on saute directement les espa
ces vides et on declare qu'il va y avoir de nouveau une case */
		if($is_case =
= 0 && $i % 2 == 1)
		{
			echo "<table cellpadding='0' cellsp
acing='0' border='0' height='".($esp_col)*$height."'><tr><
td></td></tr></table>";
			$i += $esp_col -1;
			$is
_case = 1;
		}
	  
	}
	
	
}

/******************************************
*******/
/*          Si c'est une colonne lien            */
/*            Le 
plus chiant                     */
/*******************************************
******/
else if($nb_col % 2 == 0)
{
  /* On change quelques variables */
	$n
b_col_pair = $nb_col;
	
	$deb_col = pow(2 , $nb_col_p);
	$nb_col_p++;
	$esp_
col = $deb_col * 2;
	
	/* Meme boucle que tout  l'heure boucle dunombre de lig
ne */
	for($i = 1 ; $i < $nb_ligne ; $i++)
	{
	  /* Pareil : si aucun affi
chage encore */
		if($i < $deb_col)
		{	
			echo "<table cellpaddi
ng='0' cellspacing='0' border='0' height='".$height."'><tr>&l
t;td></td></tr></table>";
		}
		
		/* Si on doit af
ficher les liens */
		else if($is_case == 1 && $i % 2 == 0)
		{
			ec
ho "<table cellpadding='0' cellspacing='0' border='0' height='".$es
p_col*$height."'>";
			
			/* Je fonctionne comme ça , on fait un
e boucle du nombre de ligne consécutive pour un lien */
			for ($i2 = 1 ; $i2 &
lt;= $esp_col ; $i2++)
			{
			  /* Si premiere ligne */
				if($i2 == 1)
		
		{
					echo "<tr><td width='".($width)."' height='&qu
ot;.$height."' valign='top'>
									<table cellpadding='0' cellspa
cing='0' border='0'><tr><td height='".$height."' valign='t
op' width='".($width/2 - 2)."'>
															<table cellpaddi
ng='0' cellspacing='0' border='0'><tr height='4'><td bgcolor='#00000
0' width='".($width/2 - 2)."'></td></tr>
													
		<tr height='".($height-4)."'><td bgcolor='#FFFFFF'></
td></tr></table></td>
									<td width='4' height='&q
uot;.$height."' bgcolor='#000000'></td>
									<td height='&
quot;.$height."' bgcolor='#FFFFFF' width='".($width/2 - 2)."'>
</td></tr></table></td></tr>";
				}
				/*
 Si ligne du milieu */
				else if($i2 == ($esp_col)/2 )
				{
					echo &quo
t;<tr><td width='".($width)."' height='".$height."'
>
									<table cellpadding='0' cellspacing='0' border='0'><tr>
;<td height='".$height."' bgcolor='#FFFFFF' width='".($width/2
 - 2)."'></td>
									<td bgcolor='#000000' width='4' height
='".$height."'></td>
									<td height='".$height.
"' width='".($width/2 - 2)."'>
															<table cellp
adding='0' cellspacing='0' border='0'>
															<tr height='".
(($height/2) +2 )."'><td bgcolor='#FFFFFF'></td></tr>

															<tr height='4'><td bgcolor='#000000' width='".($wi
dth/2 - 2)."'></td></tr>
															<tr height='&quo
t;.(($height/2)-6)."'><td bgcolor='#FFFFFF'></td></tr>

															</table></td></tr></table></td>&l
t;/tr>";
				}
				/* Si derniere ligne */
				else if($i2 == ($esp_c
ol))
				{
					echo "<tr><td width='".($width)."' hei
ght='".$height."' valign='bottom'>
									<table cellpadding=
'0' cellspacing='0' border='0'><tr><td height='".$height."
' valign='bottom' width='".($width/2 - 2)."'>
															<t
able cellpadding='0' cellspacing='0' border='0'><tr height='".($heigh
t-4)."'><td bgcolor='#FFFFFF'></td></tr>
												
			<tr height='4'><td bgcolor='#000000' width='".($width/2 - 2).&q
uot;'></td></tr></table></td>
									<td width=
'4' bgcolor='#000000' height='".$height."'></td>
									&l
t;td height='".$height."' bgcolor='#FFFFFF' width='".($width/2 - 
2)."'></td></tr></table></td></tr>";

					$is_case = 0;
				}
				/* Si ligne verticale */
				else
				{
					
echo "<tr><td width='".($width)."' height='".$heigh
t."' valign='top'>
									<table cellpadding='0' cellspacing='0' b
order='0'><tr><td bgcolor='#FFFFFF' width='".($width/2 - 2).&qu
ot;' height='".$height."'></td>
									<td width='4' bg
color='#000000' height='".$height."'></td>
									<td b
gcolor='#FFFFFF' height='".$height."' width='".($width/2 - 2).&qu
ot;'></td></tr></table></td></tr>";
				}

			}		 
			/* on incrémente le nobre de ligne du nombre de ligne consécutive 
pour un lien */
			$i += $esp_col;
			
		}
		
		/* Sinon 
		else
		{
			
echo "<table cellpadding='0' cellspacing='0' border='0' height='".$
height."'><tr><td></td></tr></table>"
;
		}*/
		
		/*Si on doit afficher des espaces , on les affiche avant d'éecut
er une nouvelle fois la boucle , pour a rapiditer */
		if($is_case == 0 &&a
mp; $i % 2 == 0)
		{
			echo "<table cellpadding='0' cellspacing='0' b
order='0' height='".$esp_col*$height."'><tr><td></td
></tr></table>";
			$i += $esp_col - 1;
			$is_case = 1;

	  }
	}
}

/* On ferme la colonne */
echo "</td>";

/*Fin
 de la premiere boucle */
}

/*On ferme la table */
echo "</tr>&l
t;/table>";

}

/*******************************************/
/*Si 
on a pas renseigner le nombre d'équipe*/
/*************************************
******/

else
{
	?>
	<form action="#" method="get"
; name="nb_equipe">
	Nombre d'équipe ? <input type="text&q
uot; name="nb_equipe" value="4">
	<input type="s
ubmit" name="OK">
	</form>
	<?
}
?>
</body
>
</html>

Conclusion :
Bugs connu :
- Plein de ligne inutile ce rajoute en bas de la page , si quelqu'un trouve plus rapidement que moi la solution , qu'il le di se.

Si vous avez des amélioration supplémentaire a me suggéré , je suis toujours a votre écoute.

La capture d'écran arrive :)