Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

10-06-2012 15:45

Preciso fazer um código para se gerar uma tabela inteira de campeonatos por pontos corridos
Ex: Campeonato Brasileiro

Como funciona, vamos levar como Ex 20 equipes no campeonato, o modelo de disputa é todos contra todos ída e volta, ou seja
o time1, vai enfrentar os outros 19 times (1° turno), e voltar a enfrentar os 19 times(2° turno).

Eu até consegui fazer gerar os jogos, mais tem um pequeno problema no meu código, eu não posso fazer por Ex o time1 jogar todos os 19 jogos do primeiro turno em casa, preciso que isso seja intercalado o máximo possível, ou seja enfrentar um em casa..2 fora..2 em casa..1 fora..1 em casa...1 fora e por aí vai, tentando intercalar o máximo. Os mesmos times não podem se enfrentar duas vezes em um mesmo turno, então se o time1 jogou contra o time2, eles só vão poder jogar novamente (na mesma ordem de jogos) no 2° turno. Esse é mais ou menos o funcionamento.

o Código que fiz foi esse:
<?php $grupo = array('Time1','Time2','Time3','Time4','Time5','Time6','Time7','Time8','Time9','Time10'); $times = count($grupo); for ($i = 0; $i < $times; $i++) { $jogo = $grupo[$i]; $jogos = $times; for ($x = 0; $x < $jogos; $x++) { $adversario = $grupo[$x]; if ($jogo != $adversario) { echo $jogo . " x " . $adversario . "<br />"; } } echo "<br />"; } ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

10-06-2012 16:11

Não entendo nada de futebol :rofl:

Seu exemplo faz cada time jogar com todos os outros. Suponho que isso ai seja o 1º turno.

Quanto aos times não jogarem duas vezes no mesmo turno, tem em que montar outra tática para o for.

O lance de intercalar, em casa e fora é menos complicado, porque dá para fazer um if intercalando linha por linha, tipo

casa
fora
casa
fora...
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

10-06-2012 16:21

então pensando assim sem crise, mais o problema está numa coisa, se o time1 enfrentar o time2 em casa, no segundo turno tem que ser o inverso, ele não pode enfrentar novamente o time jogando em casa.

Outra coisa que ele não gera apenas o primeiro turno, ele está gerando os 2 turnos, só que está separando por equipes
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

10-06-2012 16:25

A questão do jogar em casa ou fora acho menos complicado. O problema é gerar a combinação dos times sem repetir. Se eu tiver alguma idéia eu posto.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

10-06-2012 21:28

o link que postei até gera a combinação correta, pode testar que verá, mas o problema justamente fica por jogar fora e em casa. acho meio complicado, não estou conseguindo pensar numa lógica para se fazer isso
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

11-06-2012 07:51

Com base em um script que achei na net, montei esse exemplo. No caso ele está sendo para 3 times como exemplo.

Para mais times basta mudar o 3 nos 2 for.
<?php $g = array('','Time1','Time2','Time3','Time4','Time5','Time6','Time7','Time8','Time9','Time10'); function ja_jogou($partidas,$time1,$time2) { foreach ($partidas as $partida) { if(in_array($time1,$partida) && in_array($time2,$partida)) { return TRUE; } } return FALSE; } $partidas = Array(); for($a = 1; $a <= 3; $a++) { for ( $b = 1; $b <= 3 ; $b++ ) { if ( $a != $b ) { if(!ja_jogou($partidas,$a,$b)) { $partidas[] = array($a,$b); } } } } $o = 0; $onde = ""; foreach ($partidas as $partida) { $o++; if($o % 2 == 0 ? $onde="em casa" : $onde="fora") echo $g[$partida[0]] . " x " . $g[$partida[1]] . " - joga " . $onde . "<br />"; } ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

11-06-2012 21:36

é quase isso mesmo web, mais nesse caso faltou realmente ele jogar fora, ou seja ser invertido os jogos, depois teria o segundo turno e faria tudo ao contrário pegaria essas mesmas informações e inverteria (intendeu)?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

11-06-2012 22:15

Jogar fora ou em casa é definido aqui

if($o % 2 == 0 ? $onde="em casa" : $onde="fora")

Basta inverter a ordem do fora e em casa, e repetir a listagem.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

11-06-2012 22:36

fiz algumas alterações e acabou ficando do jeito que eu queria..jajá posto pra vocês aee
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

11-06-2012 22:46

Boa.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

12-06-2012 08:32

Alterei algumas coisas, mas o que realmente tentei fazer não chegou a funcionar, acredito eu que deveria fazer um array pra cada time, dizendo a rodada que o mesmo time já tenha jogado, assim seria só ver a menor rodada que os dois times ainda não teria jogado, mais está complicado, não estou entendendo muito bem, se fosse com banco de dados, era só trazer com um Where e boa, aí era só colocar um rodada pra cada linha, mas assim está complicado hahhahhaha

fiz umas alterações e ficou assim o código:
<?php $g = array('', 'Time1', 'Time2', 'Time3', 'Time4', 'Time5', 'Time6', 'Time7', 'Time8', 'Time9', 'Time10'); function ja_jogou($partidas, $time1, $time2) { foreach ($partidas as $partida) { if (in_array($time1, $partida) && in_array($time2, $partida)) { return TRUE; } } return FALSE; } $partidas = Array(); for ($a = 1; $a <= 10; $a++) { for ($b = 1; $b <= 10; $b++) { if ($a != $b) { if (!ja_jogou($partidas, $a, $b)) { $partidas[] = array($a, $b); } } } } $o = 0; foreach ($partidas as $partida) { $o++; if ($o % 2 == 0)// ? $onde = "em casa" : $onde = "fora") echo $g[$partida[0]] . " x " . $g[$partida[1]] . "<br />"; else echo $g[$partida[1]] . " x " . $g[$partida[0]] . "<br />"; } ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

12-06-2012 15:55

Talvez seja melhor você gerar um banco de dados para armazenar os resultados. Jogos e onde jogou cada time.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

14-06-2012 13:46

Assim que chegar em casa da facul hoje vou tentar fazer pra ver o que vira...
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

14-06-2012 17:00

Blz.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Gerar Tabela para campeonato

15-06-2012 19:34

Fica uma dica que pode ajudar na sua aplicação.
1 - Pense na lógica de como sua aplicação deve se comportar. (uma hora pensada valem três trabalhadas).
2 - De nomes lógicos as suas variáveis. Assim você saberá melhor sua função dentro do escopo.
3 - Faça comentários e idente seu código.

Você irá perceber que as coisas ficaram mais fáceis e claras!
:puke:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

15-06-2012 19:36

Essas dicas são bem válidas. ;)
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Gerar Tabela para campeonato

15-06-2012 23:25


<?php $equipes = array('time 1', 'time 2', 'time 3', 'time 4', 'time 5', 'time 6', 'time 7', 'time 8', 'time 9', 'time 10'); //numero de equipes $num_times = sizeof($equipes); //numero de jogos $num_jogos = 9; //neste caso turno e returno $turno = 2; for($t=0; $t < $turno; $t++){ $aux = 0; // lista todos os jogos for($i=1; $i < $num_jogos; $i++){ //lista de confrontos; for($x=1; $x < $num_times - $i; $x++){ // verifica se é turno ou returno if($t % 2 == 0){ echo $x . ' partida: ' . $equipes[$aux] . ' x ' . $equipes[$x+$aux]; } else { echo $x . ' partida: ' . $equipes[$x+$aux] . ' x ' . $equipes[$aux]; } echo '<br />'; } $aux++; echo '<br />'; } if($t % 2 == 0){ echo '========================= RETURNO =========================== <br /><br />'; } } ?>


Fiz na correria, vê se isso pode ajudar!
Dá pra melhorar bastante!
Espero ter ajudado!

:tmi:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

16-06-2012 09:16

Testei aqui parece que ficou certinho a tabela do campeonato. :up:
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Gerar Tabela para campeonato

16-06-2012 13:50

É apenas uma idéia inicial.
Pode muito bem ser aprimorada com as necessidades de cada um.
:emo:
0
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

16-06-2012 14:38

Então sua idéia é valida sim, mas tem um problema, acredito que essa partida seria as rodadas certo?
pois não pode ser assim, pois o time2 já jogou a partida 1, e o time3 já jogou a partida 2, no caso teria que ser a partida 3 pra cima no início do 2, assim poderia ir até o final no caso na partida 8, depois fazer a partida 2, sei que é meio confuso mais isso está me matando

numa tabela com 10 times, vai ter 5 jogos a cada rodada ou seja

Rodada 1:
Time1 x Time2
Time3 x Time4
Time5 x Time6
Time7 x Time8
Time9 x Time10

Rodada 2:
Time1 x Time10
Time2 x Time3
Time5 x Time7
Time6 x Time8
Time9 x Time4


É só um ex, eu tive que mudar, pode ver que o 10 foi lá pra cima, fiz isso senão o 10 iria enfrentar o 9 novamente, isso na sua tabela não acontece, eles não se enfrentam novamente, blz, o problema mesmo, é o número das rodadas, que também não pode se repetir para o mesmo time.
0
 
Mais de 100 postagens
Mais de 100 postagens
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Gerar Tabela para campeonato

18-06-2012 13:39

Realmente, o exemplo que coloquei não esta separada por rodadas. Somente turno e returno.
Onde as partidas não se repitam. Estou no trabalho, assim que chegar te ajudo a organizar as rodadas!
:lol:

Vamos por partes, a primeira esta pronta. Agora vamos pensar como separar por rodadas!
0
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

18-06-2012 21:02

Dei uma otimizada no código.
Pelo menos está gerando os jogos corretamente, sem repetição, e está mais limpo
<?php $times = array('Time1', 'Time2', 'Time3', 'Time4', 'Time5', 'Time6',); //Array de Times $qtde_times = count($times); // Quantidade de Times for ($i = 0; $i < $qtde_times; $i++) { //For para caminhar entre os times for ($j = $i; $j < $qtde_times; $j++) { //For para caminha entre os adversários if ($times[$i] != $times[$j]) { //verifica pra não deixar jogar um time contra ele mesmo echo $times[$i] . "x" . $times[$j] . "<br />"; // Mostra o confronto na tela } } echo "<br />"; //pula linha quando muda o time a fazer os jogos } ?>

Agora é quebrar a cabeça pra gerar as rodadas kkk
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

18-06-2012 22:08

Ficou certo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 28
Sexo: Masculino

Gerar Tabela para campeonato

19-06-2012 20:32

fiz um jeito que ele gera as rodadas, mais só consegui até agora fazer gerar a rodada 4, não sei o que aconteceu, irei ver certinho pra ver o pq que deu errado...só que esqueci no trampo, amanhã posto aqui pra vocês tentarem me ajudar a ver o erro, por enquanto estou focando que o número de equipes seja par, pois ímpar terá que fazer um tratamento um pouco diferente
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17722
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Gerar Tabela para campeonato

19-06-2012 20:35

Bom que conseguiu. ;) Não entendo nada de futebol. :tmi:
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Bing [Bot]