Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]przeprowadzania rozgrywek sportowych
Forum PHP.pl > Forum > PHP
escobar1983
Witam,
mam do zrobienia taki projekt "Aplikacja do projektowania sposobu przeprowadzania rozgrywek sportowych na stronie internetowej". W sumie chodzi o pomoc bo nie do konca rozumiem tematu. Jak do tego podejsc. Czy chodzi o aplikacje w ktorej np. Podajemy ilosc druzyn , nastepnie wybieramy rodzaj rozgrywek i na tej podstawie tworzony jest terminaz rozgrywek, tabele itp.? Nastepne moje pytanie czy potrzebuje do tego bazy? Z gory dziekuje za jaka kolwiek pomoc. Pozdrawiam
Lejto
no jak wchodzi w gra dodawanie informacji to oczywiście że baza
dostajesz projekt a nie wiesz czy wykorzystać bazę danych?
escobar1983
tak to jest projekt bez narzuconych wymagan jesli chodzi o jezyk i dlatego pytam sie o baze. Nie wiem czy jest wogole potrzebna.
Apocalyptiq
Akurat kończe z kolegą prace nad takim projektem - siatkarski manager przez przeglądarkę: http://www.e-siatkarze.pl/ .

Jeżeli chcesz zaprogramować tego typu grę, to, jak już to zaznaczył mój przedmówca, bez wątpienia baza danych jest potrzebna.

Do ustalania terminarzu ja zrobiłem coś takiego: najpierw przygotowałem tablice, w każdej mecze osobnej drużyny (w tabilcach tych nie mogą powtarzać się mecze - tj. w tablicy pierwszej drużyny są jej mecze ze wszystkimi drużynami z danej ligi, w drugiej tablicy - wszystkie oprócz meczu z pierwszą, w trzeciej - wszystkie oprócz meczu z pierwszą i drugią itd. I teraz ustalam terminarz: przelatuje na każdy dzień przez wszystkie tablicę, ustalając na kazdą kolejkę mecz każdej drużyny. Przed dodaniem takiego meczu sprawdzam, czy danego dnia żadna z obu drużyn z danego meczu nie ma już ustawionego meczu na dany dzień. Co kolejkę zmieniam gospodarza z gościem (żeby mniej więcej co kolejke każdy grał na zmianę u siebie/na wyjeździe). Tak ustawiam pierwszą połowę meczów - każda drużyna zagrała z każdą. No ale jeszcze muszą zagrać każda z każdą na zmienionym terenie - tj. jeżeli ta grała u siebie z tą drużyną, to teraz jeszcze musi zagrać z nią u niej. Tą drugą połowę meczy uzyskuje poprzez przestawienie tablicy z pierwszą połową meczy :-)

Jeszcze dodatkowo przed ustaleniem takiego terminarzu wszystkie drużyny, dla których terminarz ma być ustalany, mieszam (funkcją shuffle).

Mam nadzieję że pomogłem ;-)
escobar1983
jest to bardzo sensowne smile.gif Myslalem rowniez o mozliwosci wyboru rozgrywek czyli np. knockout itp. Tylko to juz chyba za bardzo rozbudowane jest. Chociaz pomysl z systemem pucharowym byl by najprostszy.
Apocalyptiq
Puchar w tych siatkarzach też jest :-)

Rozgrywki pucharowe było łatwiej rozpisać od ligowych. Jeżeli chcesz to zrobić na kilka lig, tak to wygląda:
np. przy dwóch poziomach lig, w drugim poziomie 2 grupy, w każdej grupie 16 drużyn:
1 liga - 16 drużyn
2 liga - 2 grupy po 16 drużyn

1 runda - drużyny z 2 ligi (obu grup) (32 drużyny) są mieszane i rozlosowywane są mecze (właśnie w systemie knockout - jedna na jedną)
2 runda - zwycięskie drużyny z 1 rundy (16 drużyn) grają u siebie z drużynami z pierwszej ligi
3 runda - zwycięskie drużyny z 2 rundy (16 drużyn) grają między sobą
ćwierćfinał - 8 drużyn
półfinał - 4 drużyny
finał - 2 drużyny ;-)
escobar1983
Hmmm... no ja myslalem raczej o rozwiazniu troche innym. Przedstawie to etapami:
1. Wybor ilosci druzyn
2. W zaleznosci ile druzyn tyle grup np. 16 druzyn to 4 grupy (losowanie kto do jakiej grupy trafi)
3. Rozgrywki we wszystkich grupach
3.1. 2 mecze
3.2 2 mecze z zamiana gospodarzy
4. Druzyny z dwoch pierwszych miejsc wychodza z grup i losowanie nowych par do
5. 1/4 finalu
5.1 4 mecze losowanie par polfinalowych
5.2 4 mecze z zamiana gospodarzy
6. 1/2 2 mecze
6.1. 2 mecze
6.2. 2 mecze z zamiana gospodarzy
6. Final i gra o 3 miejsce

Pomysl jest dobry pewnie ale duzo klepania teraz wazne jest zeby wybrac ten prosty. Tylko ktory to bedzie?
Apocalyptiq
Prostszy według mnie jest ten bez grup, chociaż z grupami jest chyba ciekawiej :-)
djbarca
a system ligowy kazdy z kazdym tez wchodzi w gre? gdzies w necie kiedys ciezko szukalem odpowiedniego skryptu .. cos takiego wygeneruje ci tabele ligowa... : )

przy czym ja ten skrypt zmodyfikowalem przy czym liga to ktora liga np 1,2,3,4
i funkcja zapis ktora zapisuje do bazy mecze ...

  1. <?php
  2. function liga($liga) {
  3.  
  4. $a=mysql_query("SELECT * FROM uzytkownicy where liga='$liga';");
  5. while ($as=mysql_fetch_array($a)) {
  6. array_push($t, "$as[1]");
  7. }
  8.  
  9.  
  10. $num_players=count($t);
  11.  
  12. print "<h1>Liga: <b>$liga</b>. Graczy: <b>$num_players</b></h1>";
  13. note("Liczba graczy chetnych <br>do I ligi wynosi $num_players/20","info");
  14.  
  15.  
  16. note("Mecze zapisane chyba prawidlowo","info");
  17.  
  18.  
  19.    $num_players = ($num_players > 0) ? (int)$num_players : 4;
  20.  
  21.  
  22.    $num_players += $num_players % 2;
  23.  
  24.  
  25.    $format = "%0" . ceil(log10($num_players)) . "d";
  26.    
  27.    $pairing = "$format-$format ";
  28.  
  29.  
  30.    for ($round = 1; $round < $num_players; $round++) {
  31.        $ret .= sprintf("\n<table border=1 ><tr class=naglowek>\n<td colspan=2>Kolejka <b>$round</b></td></tr>\n<tr><tD width=150><b>Gospodarz</TD><tD width=150><b>Gosc</tD></tr>\n", $round);
  32.        $players_done = array();
  33.  
  34.  
  35.  
  36.      
  37.        for ($player = 1; $player < $num_players; $player++) {
  38.  
  39.            if (!in_array($player, $players_done)) {
  40.  
  41.                $opponent = $round - $player;
  42.                $opponent += ($opponent < 0) ? $num_players : 1;
  43.  
  44.  
  45.                if ($opponent != $player) {
  46.  
  47.                    if (($player + $opponent) % 2 == 0 xor $player < $opponent) {        
  48.            $p1=$t[$player-1];
  49.            $p2=$t[$opponent-1];
  50.            zapis($p1,$p2,$round,$liga,$gra);
  51.                        $ret .= sprintf("<tr><tD>$p1</tD><td>$p2</td></tr>", $player, $opponent);
  52.  
  53.                    } else {
  54.                  $p2=$t[$player-1];
  55.            $p1=$t[$opponent-1];
  56.            zapis($p1,$p2,$round,$liga,$gra);
  57.                        $ret .= sprintf("<tr><td>$p1</tD><td>$p2</tD></tR>", $opponent, $player);
  58.    
  59.                    }
  60.  
  61.  
  62.                    $players_done[] = $player;
  63.                    $players_done[] = $opponent;
  64.                }
  65.            }
  66.        }
  67.  
  68.  
  69.        if ($round % 2 == 0) {
  70.            $opponent = ($round + $num_players) / 2;
  71.            $p1=$t[$player-1];
  72.            $p2=$t[$opponent-1];
  73.            zapis($p1,$p2,$round,$liga,$gra);
  74.            $ret .= sprintf("<tR><td>$p1</td><Td>$p2</tD></tr></table>", $num_players, $opponent);
  75.    
  76.  
  77.        } else {
  78.            $opponent = ($round + 1) / 2;
  79.            $p2=$t[$player-1];
  80.            $p1=$t[$opponent-1];
  81.            zapis($p1,$p2,$round,$liga,$gra);
  82.            $ret .= sprintf("<tR><Td>$p1</td><td>$p2</td></tr></table>", $opponent, $num_players);
  83.    
  84.        }
  85.    }
  86. print $ret;
  87. }
  88. ?>

hm o cos takiego chodzilo ;>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.