Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie meczy losowo
Forum PHP.pl > Forum > PHP
djbarca
Witam wszystkich! Mam problem na rozwiązanie którego mam bardzo mało czasu dlatego o pomoc zwracam się tutaj smile.gif
postaram sie w miare jasno przedstawic ocb.

mam tablice $tab w niej identyfikatory graczy
mam tablice $wyk w niej lista graczy, ktorzy nie moga na siebie trafic


przykładowe wypełnienie tablic
$tab = array('1','2','3','4','5','6','7','8','9','10'); - to sa identyfikatory graczy
$wyk = array('1-2','3-4','5-6','7-8','9-10');

i muszę wylosować pary dokładnie z 10 zawodników - 5 par. w taki sposób aby nie była to para z tablicy $wyk
zacząłem pisać coś takiego , ale nie za bardzo mi to chce działać
  1.  
  2. //losuje liczbe losowo w taki sposob aby nie powtarzala sie
  3. function l($ilosc,$gracz_aktualny,$wyk,$tab)
  4. {
  5. if (count($_SESSION['liga_rand_memory'])==$ilosc)
  6. {
  7. return 1;
  8. }
  9. else
  10. {
  11. while (!$ok)
  12. {
  13.  
  14. $a = rand(1,$ilosc);
  15. if (!in_array($a,$_SESSION['liga_rand_memory']) && $a!=$gracz_aktualny)
  16. {
  17. $ok=TRUE;
  18.  
  19. }
  20. }
  21. $_SESSION['liga_rand_memory'][] = $a;
  22. return $a;
  23. }
  24. }
  25.  
  26. function generuj($tab,$wyk)
  27. {
  28.  
  29. $ilosc_gracz = count($tab)-1;
  30. echo "<table border=1>";
  31. var_dump($wyk);
  32. foreach ($tab as $key => $gracze)
  33. {
  34.  
  35.  
  36. $a=l($ilosc_gracz,$gracze,$wyk,$tab);
  37. if (!in_array($tab[$a],$_SESSION['zagrali']) && !in_array($gracze,$_SESSION['zagrali']) && $gracze!=$tab[$a])
  38. {
  39. echo "
  40. <tr ".((in_array($gracze."-".$tab[$a],$wyk) || in_array($tab[$a]."-".$gracze,$wyk)) ? " style=color:red;" : " | ").">
  41. <td>Gracz($gracze)[wartosc z foreach]:</td>
  42. <td>".sprawdz_login_id($gracze)." </td>
  43. <td>wylosowal($a)[wartosc losowa odwolanie do pozycji w tab]: </td>
  44. <td>".sprawdz_login_id($tab[$a])." </td>
  45. </tr>";
  46.  
  47. $_SESSION['zagrali'][] = $tab[$a];
  48. $_SESSION['zagrali'][] = $gracze;
  49. }
  50.  
  51. }
  52. echo "</table>";
  53. unset($_SESSION['liga_rand_memory']);
  54. unset($_SESSION['zagrali']);
  55. }
  56.  


hm. jak to moge zrobic . ..
tvister
Uwaga freestyle
  1. $flaga = false;
  2. while(!$flaga){
  3. $x = array_rand($tab,1);
  4. $y = array_rand($tab,1);
  5. if (!in_array($x.'-'.$y,$wyk) && !in_array($y.'-'.$x,$wyk) && $x != $y) $flaga = true;
  6.  
  7. }
  8.  


ps. dlaczego do proc I podajesz tabl $wyk, $tab skoro ich nie wykorzystujesz questionmark.gif
djbarca
  1. $flaga = false;
  2. while(!$flaga){
  3. $x = array_rand($tab,1);
  4. $y = array_rand($tab,1);
  5. if (!in_array($x.'-'.$y,$wyk) && !in_array($y.'-'.$x,$wyk) && $x != $y) $flaga = true;
  6. }

no ok. ale co mi to da x] to mi wylosuje z tablicy losowy jeden rekord z X i Y niepowtarzajacy sie . a mi chodzi o to zeby dla kazdego gracz tj. dla wszystkich wylosowal
po jednym meczu w takim ukladzie aby zaden nie byl x-y || y-x w tabeli $wyk.

Udalo mi sie to zrobic moim sposobem, ale w pewnym momencie gracze zostali tak rozlosowani ze nie ma juz zadnego gracza spelniajacego wszystkie warunki i system sie zwiesza.
podam przyklad:

gracze:
a,b,c,d,e,f,g,h

przykladowe tablica $wyk
a-b c-d e-f g-h (moze byc inaczej, ale zeby nie nie pomylic)

system generuje:
a-d c-f e-b i w tym momencie nastapi zwieszenie bo gracze: a,b,c,d,e,f maja juz mecze a gracze g, h zostali z mozliwych i jest warunek ze ze soba nie moga zagrac

Problem: jest taki ze musze to jakos rozwiazac aby w takim wypadku gracze zostali podmienieni lub jakos inaczej

przykladowe wlasciwe wygenerowanie:
a-c b-e d-h g-f
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.