Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> losowe minuty do wyniku meczu
ibalyx
post 6.03.2015, 15:47:57
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


hejo :-)

poproszę o poradę jak mam to zrobić.

powiedzmy, że wygenerowałem sobie jakiś wynik meczu.
i teraz chcę wylosować minuty w których padły gole. ale z rozróżnieniem dla kogo, gospodarz, czy gość i w kolejności od najwcześniejszej do najpóźniejszej.

męczę się z tablicami, pętlami i warunkami i mi nie wychodzi :-/
Go to the top of the page
+Quote Post
Crozin
post 6.03.2015, 15:58:16
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Pokaż co zrobiłeś do tej pory.
Go to the top of the page
+Quote Post
sazian
post 6.03.2015, 17:12:25
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


to by trzeba z fryzjerem porozmawiać smile.gif
Go to the top of the page
+Quote Post
ibalyx
post 6.03.2015, 17:32:04
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


zapomniałem dodać, że potrzebuję jeszcze rozbicie na połowy :-)

Wynik meczu:
  1. $gosp45 = mt_rand(0,2);
  2. $gosp90 = mt_rand(0,2);
  3.  
  4. $gosc45 = mt_rand(0,2);
  5. $gosc90 = mt_rand(0,2);

Losowanie minut:
  1. for($i=0; $i<$gosp45; $++){
  2. $min_gosp_45[] = mt_rand(1,45);
  3. }
  4.  
  5. for($i=0; $i<$gosp90; $++){
  6. $min_gosp_90[] = mt_rand(46,90);
  7. }
  8.  
  9. for($i=0; $i<$gosc45; $++){
  10. $min_gosc_45[] = mt_rand(1,45);
  11. }
  12.  
  13. for($i=0; $i<$gosc90; $++){
  14. $min_gosc_90[] = mt_rand(46,90);
  15. }


wiem, że mogą się powtarzać. nie umiem wykombinować jak to połączyć, żeby losowało z jednej połowy dla obu drużyn.
Go to the top of the page
+Quote Post
kreatiff
post 6.03.2015, 21:16:21
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Możliwości jest tyle, ilu programistów wink.gif

Nudziło mi się, to zrobiłem sobie mini symulator, udanej zabawy:
  1. $gole_gospodarze = 0;
  2. $gole_goscie = 0;
  3.  
  4. // ile % szans w każdej minucie mają drużyny (1% daje wyniki zbliżone do realnych), gdy. np. gra Australia z Samoa Amerykańskie (było onegdaj 31:0) można dać wartości 30 i 0, gdy Polska z Niemcami np. 1 i 2 czy 1 i 3 (czyli, że Niemcy mają więcej szans na gola, bo są lepsi)
  5. $szansa_na_gola_gospodarzy = 1;
  6. $szansa_na_gola_gosci = 1;
  7.  
  8. $gole = array(
  9. 'gospodarze' => array(),
  10. 'goscie' => array()
  11. );
  12. $relacja[] = '---[1 połowa]---'; // początek relacji z meczu
  13.  
  14. $minuta = 1; // początek meczu, pierwsza minuta
  15. while ( $minuta <= 90 ) {
  16. if ( mt_rand(1, 100) <= $szansa_na_gola_gospodarzy ) {
  17. $gole['gospodarze'][$minuta <= 45 ? 1 : 2][] = $minuta;
  18. $gole_gospodarze++;
  19. $relacja[] = "$minuta' gol dla Gospodarzy";
  20. }
  21. if ( mt_rand(1, 100) <= $szansa_na_gola_gosci ) {
  22. $gole['goscie'][$minuta <= 45 ? 1 : 2][] = $minuta;
  23. $gole_goscie++;
  24. $relacja[] = "$minuta' gol dla Gości";
  25. }
  26. if ( $minuta == 45 ) $relacja[] = '---[2 połowa]---';
  27. ++$minuta;
  28. }
  29. $relacja[] = "Wynik meczu: Gospodarze $gole_gospodarze:$gole_goscie Goście";
  30. $relacja[] = 'Komentował dla Państwa Dariusz Pehapowski';
  31. $relacja = implode('<br>', $relacja);
  32.  
  33. echo $relacja;
Tablica $gole zawiera rozpiskę meczu w postaci tablicy z podziałem na gospodarzy/gości i połowy meczu z minutami, kiedy padły bramki.

Acha, skrypt nie uwzględnia możliwości, że padają dwie bramki dla tej samej drużyny w tej samej minucie. Poprawę tego pozostawiam już inwencji własnej.
Szanse na gola można łatwo z procentów przerobić też na procenty i promile, gdy np. 1 i 2 to zbyt duża rozbieżność w szansach drużyn na bramki, ale jednocześnie nadal chcemy zachować jakąś proporcję co do drużyn, że jedna jest lepsza, a druga gorsza (czyli np. chcielibyśmy dać szanse 1 i 1,1 - druga drużyna lepsza od pierwszej o 10%).

Ten post edytował kreatiff 6.03.2015, 21:28:35
Go to the top of the page
+Quote Post
ibalyx
post 7.03.2015, 09:03:03
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


nie dokładnie o to mi chodziło :-) ale pomysł ciekawy.

ale wróćmy do mojego problemu. mam już wygenerowany wynik meczu i teraz chciałbym do tego minuty, proszę o pomoc.

chcę taki raport meczowy:
TEAMA - TEAMB 3:1 (1:1)
1:0 [7] 12min.
1:1 [9] 39min.
2:1 [8] 63min.
3:1 [10] 77min.


w nawiasie kwadratowym nr zawodnika, ale z tym to sobie poradzę raczej.
Go to the top of the page
+Quote Post
Pyton_000
post 7.03.2015, 10:15:31
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A gdzie kod?
Go to the top of the page
+Quote Post
ibalyx
post 7.03.2015, 11:03:30
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 7.03.2015, 10:15:31 ) *
A gdzie kod?

w poscie #4

po za tym chcę tylko poradę jak to zrobić, mój kod nie działa, więc się Wam nie przyda do niczego. po prostu nie wiem jak to zrobić :-)

Ten post edytował ibalyx 7.03.2015, 11:05:15
Go to the top of the page
+Quote Post
kreatiff
post 7.03.2015, 11:36:21
Post #9





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Można i tak:
  1. $wynik_gosp = 3;
  2. $wynik_goscie = 1;
  3.  
  4. $minuty = range(1,90);
  5.  
  6. shuffle($minuty);
  7. $gosp = array_slice($minuty, 0, $wynik_gosp);
  8. sort($gosp);
  9.  
  10. shuffle($minuty);
  11. $goscie = array_slice($minuty, 0, $wynik_goscie);
  12. sort($goscie);
  13.  
  14. echo'<pre>',var_dump( $gosp ),'</pre>';
  15. echo'<pre>',var_dump( $goscie ),'</pre>';
Podział na połowy to już kwestia <= 45
Go to the top of the page
+Quote Post
Pyton_000
post 7.03.2015, 14:56:41
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Proszę, w ramach relaksacji spłodziłem to. Może nie jest idealne i można wieeele poprawić ale..
  1. <?php
  2.  
  3. $times = array_fill(0, 91, null);
  4.  
  5. $score1 = mt_rand(0,4);
  6. $score2 = mt_rand(0,4);
  7.  
  8. while($score1 != 0)
  9. {
  10. $key = (int)mt_rand(0, 91);
  11. if(!empty($times[$key]['team1']))
  12. {
  13. continue;
  14. }
  15. $times[$key]['team1'] = 1;
  16. $score1--;
  17. }
  18.  
  19. while($score2 != 0)
  20. {
  21. $key = (int)mt_rand(0, 91);
  22. if(!empty($times[$key]['team2']))
  23. {
  24. continue;
  25. }
  26. $times[$key]['team2'] = 1;
  27. $score2--;
  28. }
  29.  
  30. $times = array_filter($times);
  31. foreach($times as $minute => $time)
  32. {
  33. if(!empty($time['team1']))
  34. {
  35. $times[$minute]['team1'] = ++$score1;
  36. }
  37. if(!empty($time['team2']))
  38. {
  39. $times[$minute]['team2'] = ++$score2;
  40. }
  41. }
  42. echo '<pre>'; print_r($times);
Go to the top of the page
+Quote Post
ibalyx
post 7.03.2015, 15:40:47
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


Cytat(kreatiff @ 7.03.2015, 11:36:21 ) *
Można i tak:
  1. $wynik_gosp = 3;
  2. $wynik_goscie = 1;
  3.  
  4. $minuty = range(1,90);
  5.  
  6. shuffle($minuty);
  7. $gosp = array_slice($minuty, 0, $wynik_gosp);
  8. sort($gosp);
  9.  
  10. shuffle($minuty);
  11. $goscie = array_slice($minuty, 0, $wynik_goscie);
  12. sort($goscie);
  13.  
  14. echo'<pre>',var_dump( $gosp ),'</pre>';
  15. echo'<pre>',var_dump( $goscie ),'</pre>';
Podział na połowy to już kwestia <= 45


to mnie nie urządza, bo już mam podany wynik do przerwy. np. 3:1 (2:0)

Cytat(Pyton_000 @ 7.03.2015, 14:56:41 ) *
Proszę, w ramach relaksacji spłodziłem to. Może nie jest idealne i można wieeele poprawić ale..
  1. <?php
  2.  
  3. $times = array_fill(0, 91, null);
  4.  
  5. $score1 = mt_rand(0,4);
  6. $score2 = mt_rand(0,4);
  7.  
  8. while($score1 != 0)
  9. {
  10. $key = (int)mt_rand(0, 91);
  11. if(!empty($times[$key]['team1']))
  12. {
  13. continue;
  14. }
  15. $times[$key]['team1'] = 1;
  16. $score1--;
  17. }
  18.  
  19. while($score2 != 0)
  20. {
  21. $key = (int)mt_rand(0, 91);
  22. if(!empty($times[$key]['team2']))
  23. {
  24. continue;
  25. }
  26. $times[$key]['team2'] = 1;
  27. $score2--;
  28. }
  29.  
  30. $times = array_filter($times);
  31. foreach($times as $minute => $time)
  32. {
  33. if(!empty($time['team1']))
  34. {
  35. $times[$minute]['team1'] = ++$score1;
  36. }
  37. if(!empty($time['team2']))
  38. {
  39. $times[$minute]['team2'] = ++$score2;
  40. }
  41. }
  42. echo '<pre>'; print_r($times);


dzięki :-) o to mi chodziło. już sobie podzielę na połowy.
Go to the top of the page
+Quote Post
kreatiff
post 7.03.2015, 16:38:08
Post #12





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Cytat(ibalyx @ 7.03.2015, 15:40:47 ) *
to mnie nie urządza, bo już mam podany wynik do przerwy. np. 3:1 (2:0)
No bez jaj, wystarczy rozbić na dwie połowy ten kod. Trochę inwencji. No ale skoro już masz rozwiązanie to ok.
Go to the top of the page
+Quote Post
ibalyx
post 9.03.2015, 16:01:05
Post #13





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


no nie wystarczy :-) bo już teraz losujesz z jednej tablicy dwa razy, więc ta sama minuta może wystąpić dwa razy - a ja tego nie chcę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 18:47