login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Wedstrijd Indeling

Offline Pellens - 18/01/2008 19:42
Avatar van PellensPHP interesse Hi

Ik heb een wedstrijdschema op deze manier gemaakt:

  1. <?php
  2. $players[] = "Belg";
  3. $players[] = "Amerikaan";
  4. $players[] = "Vietnamees";
  5. $players[] = "Duitser";
  6. $players[] = "Nederlander";
  7. $players[] = "Chinees";
  8. $players[] = "Afrikaan";
  9. $players[] = "Spanjaard";
  10. $players[] = "Italiaan";
  11. $players[] = "Turk";
  12.  
  13. foreach($players as $firstplayer)
  14. {
  15. foreach($players as $secondplayer)
  16. {
  17. if($firstplayer != $secondplayer)
  18. {
  19. echo '<tr><td>'.$firstplayer.'</td><td>'.$secondplayer.'</td></tr>';
  20. }
  21. }
  22. }
  23. ?>


Als je deze code even bekijkt, is het niet logisch hoe dat alles ingedeelt is. Ik zou nu moeten bekomen dat wanneer BV. Belgie tegen Amerika moet spelen, het niet kan dat Amerika die dag ook tegen Duitsland speelt...

De bedoeling is dat elke dag ieder land 1 wedstrijd speelt tegen elkaar, dit moet dus juist verlopen...

Het is de basis van een online tekst spel. Kan iemand me verder helpen? (Heb te lang gezocht om dit te bekomen, maar ik vind de juiste touch niet...)

Alvast merci

11 antwoorden

Gesponsorde links
Offline BramBo - 18/01/2008 19:56 (laatste wijziging 18/01/2008 19:56)
Avatar van BramBo JS gevorderde Kun je 't niet beter met een random genereren ?

dus
  1. $used = array();
  2. while(count($used) < count($players)) {
  3. $fPlayer = getPlayer($players, $used);
  4. $splayer = getPlayer($players, $used);
  5.  
  6. echo "...";
  7. }
  8.  
  9. .........
  10. function getPlayer($pArr, $uArr) {
  11. $r = rand(0, (count($pArr)-1));
  12. while($r < count($uArr)) $r = rand(0, (count($pArr)-1));
  13.  
  14. $p = $pArr[$r];
  15. $uArr[] = $p;
  16.  
  17. return $p
  18. }
Offline Pellens - 18/01/2008 20:13
Avatar van Pellens PHP interesse Deze functie geeft ook gewoon een schema weer zoals ik had, toch?
Wat zie ik anders over het hoofd...?
Offline BramBo - 18/01/2008 20:25
Avatar van BramBo JS gevorderde Nee, hij genereert ze random, terwijl jou code slechts alles doorloopte en het in een lijst zette. Ook wordt er bij gehouden welke reeds gebruikt zijn.
Offline Pellens - 18/01/2008 20:36 (laatste wijziging 18/01/2008 20:44)
Avatar van Pellens PHP interesse Deze versie is toch niet goed... Zoals ik hem aangepast heb zet hij bv. 1 land dat tegen zichzelf speelt, en het is ongeloofelijk zwaar om te laden (mijn PC bleeft vast hangen)... hij zit in een oneindige lus.

Dit is wat ik gedaan heb:
EDIT

  1. <?php
  2. function getPlayer($pArr, $uArr)
  3. {
  4. $r = rand(0, (count($pArr)-1));
  5. while($r < count($uArr)) $r = rand(0, (count($pArr)-1));
  6.  
  7. $p = $pArr[$r];
  8. $used[] = $p;
  9.  
  10. return $p;
  11. }
  12.  
  13. $players[] = "Belg";
  14. $players[] = "Amerikaan";
  15. $players[] = "Vietnamees";
  16. $players[] = "Duitser";
  17. $players[] = "Nederlander";
  18. $players[] = "Chinees";
  19. $players[] = "Afrikaan";
  20. $players[] = "Spanjaard";
  21. $players[] = "Italiaan";
  22. $players[] = "Turk";
  23.  
  24. $used = array();
  25. $i = 1;
  26. while(count($used) < count($players))
  27. {
  28. $fPlayer = getPlayer($players, $used);
  29. $splayer = getPlayer($players, $used);
  30.  
  31. if($i == 200) exit();
  32. else{
  33. echo "<tr><td>$fPlayer - $splayer</td></tr>";
  34. $i++;}
  35. }
  36. ?>
Offline BramBo - 18/01/2008 21:36 (laatste wijziging 18/01/2008 21:43)
Avatar van BramBo JS gevorderde ah ja, vergeten de players en used in global te plaatsen.. Iets dat ik nog steeds niet als logisch beschouw in php...

Anyway herzie je code naar:
  1. while(count($used) < count($players))
  2. {
  3. $fPlayer = getPlayer();
  4. $splayer = getPlayer();
  5.  
  6. echo "$fPlayer - $splayer<br />";
  7. }
  8.  
  9. function getPlayer() {
  10. global $players, $used;
  11.  
  12. $r = rand(0, (count($players)-1));
  13. while(in_array($r, $used)) $r = rand(0, (count($players)-1));
  14.  
  15. $p = $players[$r];
  16. $used[] = $r;
  17.  
  18. return $p;
  19. }
Offline Pellens - 18/01/2008 21:45 (laatste wijziging 18/01/2008 21:46)
Avatar van Pellens PHP interesse Wat doen die globals precies?

Want dit geeft ook niet het gewenste resultaat...
Offline BramBo - 18/01/2008 21:47 (laatste wijziging 18/01/2008 21:49)
Avatar van BramBo JS gevorderde global $var; maakt een eerder (hoger gelegen in de hiërarchie) beschikbaar voor een functie.

dus:
  1. $i = 0;
  2. function a() { print $i; }


doet niets, terwijl:
  1. $i = 0;
  2. function a() {
  3. global $i;
  4. print $i; }


`0` print

edit: Pak even de laatste aangepaste, zat nog n klein foutje in.
Offline Pellens - 18/01/2008 21:54
Avatar van Pellens PHP interesse Mmm raar maar ik kom er niet uit... Morgen maar eens herzien dan allemaal... Alvast bedankt BramBo, spijtig dat het niet meteen werkt.
Offline nemesiskoen - 18/01/2008 23:04
Avatar van nemesiskoen Gouden medaille

PHP expert
Citaat:
ah ja, vergeten de players en used in global te plaatsen.. Iets dat ik nog steeds niet als logisch beschouw in php...

In welke taal heb jij leren coden dan? Want die global is smerig. Geef ze door per referentie, zoals in C, dat is veel sneller. Wat ik niet als logisch beschouw is dat jij x aantal keren de lengte van die array bepaalt. Variabelen dienen ervoor om berekende gegevens op te slaan, gebruik ze daar dan ook voor;-)
Offline Pellens - 18/01/2008 23:07
Avatar van Pellens PHP interesse Vage, kan je me mss dan verder helpen? Ik zit namelijk nogal vast met de kennis waarover ik beschikt i.z. PHP...
Offline nemesiskoen - 18/01/2008 23:21
Avatar van nemesiskoen Gouden medaille

PHP expert
Splits je probleem op:
- Je wil dat elk land tegen elk land moet spelen.
- Je wil dat elk land een maal per dag speelt.

Het voordeel van PHP is dat het associatieve arrays heeft, hierdoor kan je eender wat als key gebruiken voor een array, wat het een logische "look" geeft, maar je kan ook gebruik maken van nummertjes.

Ik gebruik hieronder idiote maar eenvoudige variabelnamen, zodat je begrijpt wat ze doen.
De syntax klopt niet, ik heb al een jaar niet geprogrammeerd in PHP, maar verbeter de syntaxfoutjes en je krijgt een goed resultaat.
  1. <?php
  2. $i = 0;
  3. $j = 0;
  4. $rand = 0;
  5.  
  6. $wedstrijden = array();
  7. $nationaliteiten = array('vlaming', 'nederlander', 'duitser', 'zwitser');
  8. $data = array('dag1', 'dag2', 'dag3');
  9.  
  10. $hoeveel_nationaliteiten = count($nationaliteiten);
  11. $hoeveel_dagen = count($data);
  12.  
  13. for(;$i<$hoeveel_nationaliteiten;$i++) {
  14. $wedstrijden[$i] = array();
  15. for(;$j<$hoeveel_dagen;$j++) {
  16. do {
  17. $rand = rand(0, $hoeveel_nationaliteiten-1);
  18. } while(in_array($rand, $wedstrijden[$i]) || in_array($i, $wedstrijden[$rand])|| $rand==$i);
  19. $wedstrijden[$i][$j] = $rand;
  20. printf("%s speelt tegen %s op %s", $nationaliteiten[$i], $nationaliteiten[$rand], $data[$j]);
  21. }
  22. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.241s