Voetbalspel - Wedstrijdschema
Ik ben nu bezig met een pagina die het wedstrijdschema voor een server maakt. Maar het lukt me echt niet.
Heeft iemand misschien een idee hoe je dit kan maken?
Elke wedstrijd moet in een andere week worden gespeeld en het moet afwisselend zijn, 1 wedstrijd thuis, 1 uit, etc..
Het moet volledig willekeurig gegenereerd worden.
Gewijzigd op 01/01/1970 01:00:00 door Jorian
Op regel 24 zou ik een while loop zetten die checkt of $rand-team niet al geweest is. Misschien dat je gebruikte teams daarom beter in een array kunt zetten. Overigens zou ik ook nog ergens een check zetten of die wedstrijd niet al gespeeld is.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Oja dit was ik nog vergeten er bij te zetten, de functie deleteItem($array, $item) haalt het gebruikte id van een team uit de array, dus dat word allemaal al gedaan.
Maar ehm, het genereren van het schema werkt allemaal, dus daar hoef ik geen antwoord op. Ik wil alleen weten hoe ik kan doen dat elke wedstrijd in een andere week word gespeeld, en elke week 9 wedstrijden worden gespeeld.
Quote:
Dat zeg team1 niet 2x moet spelen in 1 week (1 dag).
Daar versta ik toch iets heel anders onder dan wat je nu vertelt?
Uitrekenen hoeveel weken er nodig zijn. Daarna een for-loop maken waarin het maximum het aantal weken dat nodig is is. In die for-loop voer je de query uit, met als week de variabele die je in de for-loop gebruikt.
Ja maar hoe kan je ooit allemaal checken of dat team al een x die week gespeeld heeft?
Dat zei ik net. Gebruikte teams in een array zetten, op regel 24 een while-loop die kijkt of het team al gebruikt is die week. Zolang dat zo is, een nieuw team randomeren.
Ja oke dat snap ik wel, maar met welke query kan je checken of team1 niet in die week speelt EN/OF team2 niet in die week uit/thuis heeft gespeeld?
Voorbeeldje:
OOP
Djemo schreef op 25.03.2008 15:28:
Je hebt daar geen query voor nodig. Je voegt ieder team dat je gebruikt na de random toe aan een vooraf aangemaakte array. Tijdens het randomeren kijk je of het random getal niet al in de array zit. Zo ja, maak je een nieuw random getal. Zo nee, dan slaat hij de while-loop over, en gebruikt dat random getal.
Voorbeeldje:
Voorbeeldje:
Dit is me nou ongeveer gelukt, maar hoe kan ik alle weken waarin een team al heeft gespeeld, opslaan voor elk team in een array?
Want als ik het zo doe: $aWeek[$i] = array();
Dan kan ik hem niet gebruiken in de functie in_array()..
Ik ben nou ongeveer 2 a 3 dagen bezig geweest met dit script, maar ik kom er maar niet uit. Kan iemand misschien zo'n script voor me maken? Ik krijg die teams wel voor elkaar, maar om elke wedstrijd in een andere week te zetten lukt echt niet..
Dat komt de onderhoudbaarheid wel ten goede. Maar OOP voor een beginnend PHP-er lijkt me nogal wat ver gaan. Het zijn wel leuke oefenprojecten, maar bij een serieus project zou ik inderdaad wel OOP gebruiken.
Daarnaast kan je met MySQL ook kijken of er meer dan 6 dagen (op dag 7 mag je wel weer) zijn verstreken sinds de laatste wedstrijd. Dat is het meest gemakkelijke.
Voor beginners is het inderdaad wat lastig, maar als je eenmaal de basis onder de knie hebt kan je er goed aan beginnen. :D
Hoe kan je een wedstrijdschema met weken willekeurig laten genereren?
Je hebt dus een team en je randomeert een team. Beide teams zet je in een array, zoals ik eerder uit heb gelegd (ook weer dat stukje met die while, enz). Alleen nu voeg je nog een stukje toe aan de while-loop. Het zou nu zo moeten worden: Zolang $aRand in $gebruikteteams (array) zit of de wedstrijd "$aTeam - $aRand" in de database zit, een nieuwe $aRand genereren.
Hierna zet je de wedstrijd met de variabelen uit de eerste for-loop (als week) in de database :). Eerst uitschrijven hoe je je script wilt gaan opbouwen helpt altijd erg goed bij het schrijven ervan.
hier.
Zoals in de comment van de class staat, is het algoritme niet van mezelf, deze kan hier gevonden worden.
Er wordt dus geen random greep uit een array gedaan, maar met modulo gewerkt en vervolgens naar om en om uit en thuis wedstrijden veranderd (voor zover mogelijk).
Toevallig heb ik laatst zo'n script (class) gemaakt. Deze staat Zoals in de comment van de class staat, is het algoritme niet van mezelf, deze kan hier gevonden worden.
Er wordt dus geen random greep uit een array gedaan, maar met modulo gewerkt en vervolgens naar om en om uit en thuis wedstrijden veranderd (voor zover mogelijk).
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
@Djemo: Ik heb ongeveer gedaan wat je zei, alleen nu krijg ik dus een oneindige-loop omdat hij geen open weken meer kan vinden, dit is mn script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
$title = 'Wedstrijdschema';
include 'header.php';
include 'safe.php';
$sQuery = 'DELETE FROM `matches`';
$iResult = mysql_query($sQuery);
$sQuery1 = 'SELECT * FROM teams WHERE serverID=1';
$iResult1 = mysql_query($sQuery1);
while($aObject1 = mysql_fetch_object($iResult1)) {
$aTeams[] = $aObject1->name;
}
$aTeamsUsed = array();
$aWeeksUsed1 = array();
$aWeeksUsed2 = array();
$iTeams = (sizeof($aTeams)-1);
$iWeeks = $iTeams;
for($i = 0; $i < $iTeams+1; $i ++) {
$iTeam1 = $i;
$aTeamsUsed[] = $i;
$sQuery2 = 'SELECT week FROM `matches` WHERE team1="' . $aTeams[$iTeam1] . '" OR team2="' . $aTeams[$iTeam1] . '"';
$iResult2 = mysql_query($sQuery2);
while($aObject2 = mysql_fetch_object($iResult2)) {
$aWeeksUsed1[] = $aObject2->week;
}
for($ii = 0; $ii < $iWeeks; $ii ++) {
$iRandom = rand(0, $iTeams);
while(in_array($iRandom, $aTeamsUsed)) {
$iRandom = rand(0, $iTeams);
}
$iTeam2 = $iRandom;
$sQuery3 = 'SELECT week FROM `matches` WHERE team1="' . $aTeams[$iTeam2] . '" OR team2="' . $aTeams[$iTeam2] . '"';
$iResult3 = mysql_query($sQuery3);
while($aObject3 = mysql_fetch_object($iResult3)) {
$aWeeksUsed2[] = $aObject3->week;
}
$iRandom2 = rand(0, ($iWeeks * 2));
while(in_array($iRandom2, $aWeeksUsed1) || in_array($iRandom2, $aWeeksUsed2)) {
$iRandom2 = rand(0, ($iWeeks * 2));
}
$iWeek = $iRandom2;
$aTeamsUsed[] = $iRandom;
$sQuery4 = 'INSERT INTO `matches` (team1, team2, week) VALUES ("' . $aTeams[$iTeam1] . '", "' . $aTeams[$iTeam2] . '", "' . $iWeek . '")';
$iResult4 = mysql_query($sQuery4);
}
unset($aTeamsUsed);
unset($aWeeksUsed1);
unset($aWeeksUsed2);
}
echo 'Wedstrijden gegenereerd.';
include 'bottom.php';
?>
$title = 'Wedstrijdschema';
include 'header.php';
include 'safe.php';
$sQuery = 'DELETE FROM `matches`';
$iResult = mysql_query($sQuery);
$sQuery1 = 'SELECT * FROM teams WHERE serverID=1';
$iResult1 = mysql_query($sQuery1);
while($aObject1 = mysql_fetch_object($iResult1)) {
$aTeams[] = $aObject1->name;
}
$aTeamsUsed = array();
$aWeeksUsed1 = array();
$aWeeksUsed2 = array();
$iTeams = (sizeof($aTeams)-1);
$iWeeks = $iTeams;
for($i = 0; $i < $iTeams+1; $i ++) {
$iTeam1 = $i;
$aTeamsUsed[] = $i;
$sQuery2 = 'SELECT week FROM `matches` WHERE team1="' . $aTeams[$iTeam1] . '" OR team2="' . $aTeams[$iTeam1] . '"';
$iResult2 = mysql_query($sQuery2);
while($aObject2 = mysql_fetch_object($iResult2)) {
$aWeeksUsed1[] = $aObject2->week;
}
for($ii = 0; $ii < $iWeeks; $ii ++) {
$iRandom = rand(0, $iTeams);
while(in_array($iRandom, $aTeamsUsed)) {
$iRandom = rand(0, $iTeams);
}
$iTeam2 = $iRandom;
$sQuery3 = 'SELECT week FROM `matches` WHERE team1="' . $aTeams[$iTeam2] . '" OR team2="' . $aTeams[$iTeam2] . '"';
$iResult3 = mysql_query($sQuery3);
while($aObject3 = mysql_fetch_object($iResult3)) {
$aWeeksUsed2[] = $aObject3->week;
}
$iRandom2 = rand(0, ($iWeeks * 2));
while(in_array($iRandom2, $aWeeksUsed1) || in_array($iRandom2, $aWeeksUsed2)) {
$iRandom2 = rand(0, ($iWeeks * 2));
}
$iWeek = $iRandom2;
$aTeamsUsed[] = $iRandom;
$sQuery4 = 'INSERT INTO `matches` (team1, team2, week) VALUES ("' . $aTeams[$iTeam1] . '", "' . $aTeams[$iTeam2] . '", "' . $iWeek . '")';
$iResult4 = mysql_query($sQuery4);
}
unset($aTeamsUsed);
unset($aWeeksUsed1);
unset($aWeeksUsed2);
}
echo 'Wedstrijden gegenereerd.';
include 'bottom.php';
?>
Note: kun je ook het team '0' en de week '0' hebben?
Ja dat kan.
Iemand?
$nr = '0'
if blaat --> then name = '$nr' and $nr ++
dan zou het wel werken omdat je eerst de waarde geeft. (dus de eerste keer de standaard waarden) en dan pas de waarde vergroot.