Foros del Web » Programando para Internet » PHP »

Sistema Brackets - PHP

Estas en el tema de Sistema Brackets - PHP en el foro de PHP en Foros del Web. Buenas gente, estoy abriendome hacia nuevas fronteras con PHP y me he propuesto hacer un generador de brackets para torneos, he generado las imagenes y ...
  #1 (permalink)  
Antiguo 10/05/2010, 15:52
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Sistema Brackets - PHP

Buenas gente, estoy abriendome hacia nuevas fronteras con PHP y me he propuesto hacer un generador de brackets para torneos, he generado las imagenes y un pequeño HTML montandolas y me queda tal que así:

Código HTML:
<table class="tahoma" align="center" cellpadding="0" cellspacing="0"> 
	<tr>
		<td class="n">Equipo 1</td>
		<td class="upb"></td>
	</tr>
	<tr>
		<td align="center">[00:00]</td>
		<td class="medb"> </td>
		<td class="n">Equipo G</td>
		<td class="upb"></td>
	</tr>
	<tr>
		<td class="n">Equipo 2</td>
		<td class="lowb"></td>
		<td></td>
		<td class="trazas"></td> </tr>
	<tr>
		<td colspan="2"></td>
		<td align="center">[00:00]</td>
		<td class="medb"> </td>
		<td class="n">Equipo G</td>
	</tr>
	<tr>
		<td class="n">Equipo 3</td>
		<td class="upb"></td>
		<td></td>
		<td class="trazas"></td>
	</tr>  
	<tr>
		<td align="center">[00:00]</td>
		<td class="medb"> </td>
		<td class="n">Equipo G</td>
		<td class="lowb"></td>
	</tr>
	<tr>
		<td class="n">Equipo 4</td>
		<td class="lowb"></td>
		<td></td>
	</tr>
</table> 
Que en resumen deja ver esto:


Estatico lo saco con bastante facilidad, pero quiero que todo lo haga dinamico y sinceramente nose por donde abarcar este reto, he estado mirando por google y lo poco que he encontrado apenas ha servido de algo.

No pido el codigo sino un pseudocódigo de alguien mas experimentado en algoritmos de este tipo. O almenos alguna directriz.

Gracias de antemano.

Última edición por bNd170; 10/05/2010 a las 16:01
  #2 (permalink)  
Antiguo 26/05/2010, 11:45
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Sistema Brackets - PHP

Bueno gente, poco a poco he ido haciendome a la idea y he conseguido pintar las tablas de forma correcta.

Ahora estoy en el mehoyo de la cuestión que es saber en que celda hay que pitar cada cosa.

Voy bastante perdido en el tema, he intentado empezar por mi cuenta pero no avanzo.

Código PHP:
Ver original
  1. $numequip = $_REQUEST[numequip];
  2. $potencia = esPotencia($numequip);
  3. $columnas = $potencia+($potencia+1);
  4. $numero_partidos = $numequip/2;
  5. $filas = 3*$numero_partidos+$numero_partidos-1;
  6. // Class de fondo para los nombres (g = Ganador - p = Perdedor)
  7. $depen="n";
  8. $equipo = 0;
  9. $ronda = 0;
  10. // Iniciamos la tabla
  11. echo "<table cellpadding='0' cellspacing='0' border='1'>";
  12.  
  13. // Bucle de relleno
  14. for($x=1;$x<=$filas;$x++) {
  15.     echo "<tr>";
  16.     for($j=1;$j<=$columnas;$j++) {
  17.         if($j%2==0)
  18.             $bracket=true;
  19.         else {
  20.             $bracket=false;
  21.             $ronda++;
  22.         }
  23.         if(!$bracket) {
  24.             $equipo++;
  25.             echo "<td class='$depen' width='82' align='center' valign='middle'><input type='text' size='15' name='Match' value='equipo_$equipo'/></td>";
  26.         } else
  27.             echo "<td width='22'>&nbsp;&nbsp;</td>";
  28.  
  29.     }
  30.     echo "</tr>";
  31. }
  32.        
  33. echo "</table>";

Aver si alguien por lo menos me hecha un rayito de luz ante tanta oscuridad y me ilumino.

Gracias de antemano.
  #3 (permalink)  
Antiguo 30/05/2010, 06:28
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Sistema Brackets - PHP

Hola
Uhm, bueno, pues poco a poco y con paciencia se
dara

Por ahora quisiera saber que debería hacer esta línea de código

Código PHP:
$potencia esPotencia($numequip); 
pues veo que de ella depende el resto,
y pues yo veo este sistema como un torneo
de eliminación directa, estoy en lo cierto?

bueno, me comentas
saludos
  #4 (permalink)  
Antiguo 18/06/2010, 09:17
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Sistema Brackets - PHP

Lamento la tardanza, he estado fuera.

Bien, sí, es de eliminacion directa ya sea a uno, dos o tres partidos, la puntuacion final es la que determinaria si un equipo continua o no.

La funcion esPotencia es esta:
Código PHP:
Ver original
  1. function esPotencia($num) {
  2.     $resultado=false;
  3.     for($i=0;$i<=129 && $resultado==false;$i++){
  4.         $resu=pow(2,$i);
  5.         if($resu==$num){
  6.             $resultado=true;
  7.             return $i;
  8.         }
  9.     }
  10. }

Llevo fuera varias semanas y tengo esto un poco dejado, lo poco que tenia avanzado lo he perdido de mente asi que tendre que volver a ponerme.

Me estoy basando en este codigo que me han pasado pero sinceramente, me entero de poco ya que las funciones no imagino lo que devuelven.
Código Javascript:
Ver original
  1. // JavaScript Library Winners Bracket System
  2.     //Settings
  3.     var potmax=7;
  4.     var matchim="gris.gif";
  5.     var winim="winbracket.gif";
  6.     var losim="losbracket.gif";
  7.     var imgpath="../../images/";
  8.     var medbrackim="medbracket.gif";
  9.     var topbrackim="topbracket.gif";
  10.     var lowbrackim="lowbracket.gif";
  11.     var spcbrackim="spcrbracket.gif";
  12.     var defaultmatch="[f]es[/f] Equipo";
  13.     //El $1 indica el pais a escoger.
  14.     var banderaspath="../../images/icons/lang/$1.png";
  15.    
  16.     //Funciones
  17.     function eligeBracket(numequi){
  18.         potencia2=esPotencia(numequi);
  19.         if(potencia2!=false && numequi>1 && numequi<129){
  20.             html=crearBracket(numequi,potencia2);
  21.             document.getElementById('Display').innerHTML="<br>"+html;
  22.             //Añadir <input type='button' onClick='comprobarResults();' value='Comprobar Resultados'> EN FUTURAS VERSIONES.
  23.             document.getElementById('Options').innerHTML="<br/><input type='button' onClick='generarCodigo();' value='Vista Previa'>";
  24.         }
  25.         else
  26.             alert("Numero potencia de dos, mayor de 2 y menor de 129");
  27.            
  28.         return false;
  29.     }
  30.    
  31.     function crearBracket(numequi,potencia){
  32.         var col=potencia+(potencia+1);
  33.         var numpartidos=numequi/2;
  34.         var fil=3*numpartidos+numpartidos-1;
  35.         var ronda=0;
  36.         var medbrack=false;
  37.         var topbrack=false;
  38.         var lowbrack=false;
  39.         var dentrobr=false;
  40.         html="<table cellpadding='0' cellspacing='0'>"
  41.         for(var j=1;j<=fil;j++){
  42.             html+="<tr>";
  43.             //html+="<td>"+j+"</td>";
  44.             for(var k=1;k<=col;k++){
  45.                 if(k%2==0){
  46.                     brack=true;
  47.                 }
  48.                 else{
  49.                     brack=false;
  50.                     ronda++;
  51.                 }
  52.                 if(!brack){
  53.                     if(esPartido(ronda,j)){
  54.                         html+="<td class='n' name='Matchtd' id='"+ronda+j+"' width='82'  align='center' valign='middle'><input type='text' size='15' name='Match' value='"+defaultmatch+"'/>";
  55.                         if(esPartidoArriba(ronda,j)){
  56.                             topbrack=true;
  57.                         }
  58.                         else{
  59.                             lowbrack=true;
  60.                         }
  61.                     }
  62.                     else if(esResult(ronda,j)){
  63.                         html+="<td align='center' class='score' id='"+ronda+"_"+j+"_"+col+"' name='Result'><a style='cursor: pointer;' onClick=\"colorCasilla('ar',"+ronda+","+j+","+col+");\"> &nbsp; </a>[<input type='text' size='1' width='8' value='xx'/>:<input type='text' size='1' width='8' value='xx'/>]<a style='cursor: pointer;' onClick=\"colorCasilla('ab',"+ronda+","+j+","+col+");\"> &nbsp; </a><a style='cursor: pointer;' onClick=\"colorCasilla('non',"+ronda+","+j+","+col+");\"> &nbsp; </a>";
  64.                         medbrack=true;
  65.                     }
  66.                     else{
  67.                         html+="<td height=''>";
  68.                     }
  69.                 }
  70.                 else{
  71.                     if(medbrack){
  72.                         html+="<td class='medb'>";
  73.                         medbrack=false;
  74.                     }
  75.                     else if(lowbrack){
  76.                         html+="<td class='lowb'>";
  77.                         lowbrack=false;
  78.                     }
  79.                     else if(topbrack){
  80.                         html+="<td class='upb'>";
  81.                         topbrack=false;
  82.                     }
  83.                     else if(esDentroBracket(ronda,j)){
  84.                         html+="<td class='trazas'>";
  85.                         dentrobr=false;
  86.                     }
  87.                     else{
  88.                         html+="<td>";
  89.                     }
  90.                    
  91.                 }
  92.                 html+="</td>";
  93.             }
  94.             html+="</tr>";
  95.             ronda=0;
  96.         }
  97.         //html="columnas: "+col+" <br>filas:"+fil;
  98.         html+='</table>';
  99.         return html;
  100.     }
  101.    
  102.     function colorCasilla(direc,ronda,fila,maxcol){    
  103.         tabla=partidoArribaRes(ronda,fila);
  104.         arriba=tabla[0];
  105.         abajo=tabla[1];
  106.         rondaprox=ronda+1;
  107.         ronda=ronda.toString();
  108.         rondaprox=rondaprox.toString();
  109.         arriba=arriba.toString();
  110.         abajo=abajo.toString();
  111.         idarriba=ronda+arriba;
  112.         idabajo=ronda+abajo;
  113.        
  114.         if(direc=='ab'){
  115.             idprox=rondaprox+fila;
  116.             abajoteam=document.getElementById(idabajo).firstChild;
  117.             proxteam=document.getElementById(idprox).firstChild;
  118.             partidoarriba=document.getElementById(idarriba).style;         
  119.             partidoabajo=document.getElementById(idabajo).style;
  120.            
  121.             proxteam.value=abajoteam.value;
  122.             if((rondaprox)==((maxcol+1)/2)){
  123.                 proxteamsty=document.getElementById(idprox).style;
  124.                 proxteamsty.background="url('"+imgpath+winim+"')"; 
  125.             }
  126.             partidoabajo.background="url('"+imgpath+winim+"')";
  127.             partidoarriba.background="url('"+imgpath+losim+"')";       
  128.         }
  129.         else if(direc=='ar'){
  130.             idprox=rondaprox+fila;
  131.             arribateam=document.getElementById(idarriba).firstChild;
  132.             proxteam=document.getElementById(idprox).firstChild;
  133.             partidoarriba=document.getElementById(idarriba).style;
  134.             partidoabajo=document.getElementById(idabajo).style;
  135.            
  136.             proxteam.value=arribateam.value;
  137.             if((rondaprox)==((maxcol+1)/2)){
  138.                 proxteamsty=document.getElementById(idprox).style;
  139.                 proxteamsty.background="url('"+imgpath+winim+"')"; 
  140.             }
  141.             partidoabajo.background="url('"+imgpath+losim+"')";
  142.             partidoarriba.background="url('"+imgpath+winim+"')";   
  143.         }
  144.         else{
  145.             idprox=rondaprox+fila;
  146.             proxteam=document.getElementById(idprox).firstChild;
  147.             partidoarriba=document.getElementById(idarriba).style;
  148.             partidoabajo=document.getElementById(idabajo).style;
  149.            
  150.             proxteam.value=defaultmatch;
  151.             if((rondaprox)==((maxcol+1)/2)){
  152.                 proxteamsty=document.getElementById(idprox).style;
  153.                 proxteamsty.background="url('"+imgpath+matchim+"')";   
  154.             }
  155.             partidoabajo.background="url('"+imgpath+matchim+"')";
  156.             partidoarriba.background="url('"+imgpath+matchim+"')"; 
  157.         }
  158.    
  159.     }
  160.    
  161.     function comprobarResults(){
  162.         alert("Hola q tal? soy colosal!");
  163.     }
  164.    
  165.     function generarCodigo(){
  166.         //Copiar HTML de Display a VistaPrevia
  167.         html=document.getElementById('Display').innerHTML;
  168.         document.getElementById('VistaPrevia').innerHTML=html;
  169.         //Seleccionar todos los partidos y escoger solo los de vista previa para procesar los inputs.
  170.         todospartidos=document.getElementsByName('Match');
  171.         var conta=0;
  172.         var partidos=new Array();
  173.         while(conta<(todospartidos.length/2)){
  174.             mitad=eval(todospartidos.length/2+conta);
  175.             todospartidos[mitad].parentNode.id+='p';
  176.             partidos[conta]=todospartidos[mitad];
  177.             conta++;
  178.         }
  179.         var cont=0;
  180.         while(partidos.length>cont){
  181.             partidos[cont].value=todospartidos[cont].value
  182.             if(partidos[cont].value!=defaultmatch)
  183.                 aux=partidos[cont].value;
  184.             else aux='';
  185.             td=partidos[cont].parentNode.id;
  186.             partidos[cont].parentNode.removeChild(partidos[cont]);
  187.             document.getElementById(td).innerHTML=aux;
  188.             cont++;
  189.         }
  190.  
  191.     //Libreria
  192.     function esPotencia(num){
  193.         resultado=false;
  194.         for(i=0;i<=potmax && resultado==false;i++){
  195.             resu=Math.pow(2,i);
  196.             if(resu==num){
  197.                 resultado=true;
  198.                 return i;
  199.             }
  200.         }  
  201.         return resultado;
  202.     }
  203.    
  204.     function esResult(ronda,fila){
  205.         for(var i=0;i<=128;i++){
  206.             if(Math.pow(2,(ronda))+Math.pow(2,ronda+1)*i==fila){
  207.                 return true;
  208.             }
  209.         }
  210.         return false;
  211.     }
  212.    
  213.     function esPartido(ronda,fila){
  214.         for(var i=0;i<=128;i++){
  215.             if(Math.pow(2,(ronda-1))+Math.pow(2,ronda)*i==fila){
  216.                 return true;
  217.             }
  218.         }
  219.         return false;
  220.     }
  221.    
  222.     function esPartidoArriba(ronda,fila){
  223.         for(var i=0;i<=128;i++){
  224.             if(Math.pow(2,(ronda-1))+Math.pow(2,ronda+1)*i==fila){
  225.                 return true;
  226.             }
  227.         }
  228.         return false;
  229.     }
  230.    
  231.     function esDentroBracket(ronda,fila){
  232.         if(ronda==1){
  233.             return false;
  234.         }
  235.         else{
  236.             for(var i=0;i<=128;i++){
  237.                 if(Math.pow(2,(ronda-1))+Math.pow(2,ronda+1)*i<fila && Math.pow(2,(ronda-1))+Math.pow(2,ronda)+Math.pow(2,ronda+1)*i>fila ) {
  238.                     return true;
  239.                 }
  240.             }          
  241.         }
  242.         return false;
  243.     }
  244.    
  245.     function partidoArribaRes(ronda,fila){
  246.         var encontrados=false;
  247.         //Primer partido segun la ronda
  248.         var primerpar=Math.pow(2,(ronda-1));
  249.         //Diferencia entre dos equipos del mismo encuentro
  250.         var diferencia=Math.pow(2,ronda);
  251.         var cont=1;
  252.         var devolver=new Array();
  253.         //Primer equipo
  254.         devolver[0]=0;
  255.         //Segundo equipo
  256.         devolver[1]=0;
  257.         while(!encontrados && cont<128){
  258.             if((fila-primerpar)*2==diferencia){
  259.                 devolver[0]=primerpar;
  260.                 devolver[1]=primerpar+diferencia;
  261.                 encontrados=true;
  262.             }
  263.             else
  264.                 primerpar+=diferencia;
  265.             cont++;
  266.         }
  267.         return devolver;
  268.     }

Última edición por bNd170; 18/06/2010 a las 09:55
  #5 (permalink)  
Antiguo 20/06/2010, 21:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Sistema Brackets - PHP

Hola
Bueno, si entendi bien la librería que tienes es de javascript
pero la estas tratando de vincular con php??

pues tal vez esa librería traiga algo de documentación,
aunque si no pues sería bueno que preguntaras en el foro
de javascript sobre la misma

esto porque si la usas en este momento en php tal vez te
diga que es "undefined function" porque php esta buscando
una función esPotencia pero que sea función php, no javascript

la forma correcta de usar funciones javascript es mediante
objetos hechos en html, por ej un botón podria llamar a la función esPotencia de javascript

podrías hacer scripts de javascript con ayuda de php,
pero el llamado es otra cosa

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 21/06/2010, 10:28
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Sistema Brackets - PHP

Lo que intento es pasar ese script a PHP ya que lo que estoy haciendo es un sistema automatico de creaccion de bracets para torneos online, sería algo asi:

Admin crea torneo -> Equipos se inscriben -> Al llegar al maximo de equipos se generan y guardan los brackets en la DB.

Luego el administrador iria editandolo a medida que los equipos anazasen.

Entonces es lo que debo hacer, pasar este script a php pero como siempre digo me gusta comprender lo que programo.

Aver si puedes hecharme un cable.
  #7 (permalink)  
Antiguo 21/06/2010, 22:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Sistema Brackets - PHP

Hola
bueno, pues esto es solo un bosquejo usando arrays
de como podria llegar a funcionar, es solo para que lo estudies
y revises para luego adaptarlo a tus necesidades

Código PHP:
Ver original
  1. <?php
  2.  
  3. $equipos = array('equipo1', 'equipo2', 'equipo3', 'equipo4');
  4. $equipos_ganadores = array('equipo1', '', 'equipo4');
  5. $equipo_ganador = array('equipo1');
  6.  
  7.   echo '<table>';
  8.   echo '<tr>';
  9.   for($i = 0; $i < count($equipos); $i++)
  10.   {
  11.     echo '<td>'.$equipos[$i].'<td></tr><tr>';
  12.    
  13.     if($i % 2 == 0)                              
  14.     echo '<td>[00:00]</td><td></td><td>'.$equipos_ganadores[$i].'</td></tr>';                            
  15.    
  16.     if($i % 2 == 1)
  17.     echo '<td></br><td></td></td>';
  18.    
  19.     if($i % 2 == 1 && $i < count($equipos_ganadores))
  20.     {
  21.       echo '<td>[00:00]</td>';
  22.       echo '<td></br></td><td>'.$equipo_ganador[0].'</td>';
  23.     }
  24.     echo '</tr>';
  25.   }
  26.  
  27.   echo '</tr>';
  28.  
  29.   echo '</table>';
  30.                                
  31.                                            
  32. ?>


saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #8 (permalink)  
Antiguo 22/06/2010, 07:51
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Sistema Brackets - PHP

Buenas Morti, en primer lugar agradecer la respuesta.

Tenia hecho algo similar con un formulario donde se metian los equipos, el array era el request pero aun no tengo claro como hacer las rondas ya que en tu script solo se asimilan 2 rondas. Disculpa mi ignorancia.
  #9 (permalink)  
Antiguo 24/06/2010, 00:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Sistema Brackets - PHP

Cita:
Iniciado por bNd170 Ver Mensaje
Buenas Morti, en primer lugar agradecer la respuesta.

Tenia hecho algo similar con un formulario donde se metian los equipos, el array era el request pero aun no tengo claro como hacer las rondas ya que en tu script solo se asimilan 2 rondas. Disculpa mi ignorancia.
bueno, eso fue solo un ejemplo para que te
dieras una idea del asunto, la cosa es que pienso que en tablas
puede ser bastante enredado lo que quieres lograr, te aconsejaría
que uses divs y pues que si vas a usar base de datos, empiezes a
hacer pruebas con dicha bd, y pues en la primera ronda cuando tengas
ganador de cada "mesa", dicho ganador sea actualizado en la bd,
y con esto cuando se vuelva a ingresar a la página, hagas un script
que mire en la bd cuales son ya ganadores y empieze a dibujar divs con
los mismos en las posiciones que le indiques, y asi sucesivamente por las n rondas
que tengas, otra solución que se me acaba de ocurrir aquí divagando pueden ser listas (tag ol o ul de html) en donde podrías realizar esta estructura que quieres combinando html y php e incluso puedes agregarle javascript para que esas listas se contraigan o expandan, así que ya tienes en que entretenerte!!
suerte con eso
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #10 (permalink)  
Antiguo 25/06/2010, 06:24
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Sistema Brackets - PHP

Gran idea la de los divs, no se me habia ocurrido, gracias^^ Ya pondre la solucion cuando la saque

Etiquetas: sitemap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:17.