Witam,
mam za zadanie zrobić generator w javascript. Na podstawie podanych drużyn w tabeli, ma wygenerować terminarz rozgrywek. Wiadomo drużyny nie mogą się powtarzać podczas kolejki oraz jedna drużyna może rozegrać tylko jeden mecz z każdą. Skrypt działa przy 4 drużynach, natomiast jeżeli dodamy do tego chociaż dwie to zawiesza całą strone.
HTML:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<meta name="viewport" content="width=device-width">
<script src="js/jquery.js"></script>
<script src="js/jquery.min.js"></script>
<link rel="stylesheet" href="main.css">
</head>
<body>
<div class="main">
<div class="team-list">
</div>
<div class="shuffle-team">
<div class="stage">
</div>
</div>
<div class="testy"></div>
</div>
<script src="js/main.js"></script>
</body>
</html>
CSS:
html, body {
margin: 0;
padding: 0;
}
body {
width: 100%;
}
.main {
width: 100%;
margin: auto;
text-align: center;
}
.main .team-list {
padding: 10px;
box-sizing: border-box;
background: #CCFFFF;
display: flex;
justify-content: space-around;
flex-wrap: nowrap;
}
.main .team-list p {
padding: 10px;
background: #336666;
color: white;
font-weight: bold;
}
.main .shuffle-team {
background: #CCFFFF;
padding: 10px;
}
.main .shuffle-team .number-of-stage {
font-size: 18px;
font-weight: bold;
border-bottom: 2px solid black;
}
.main .shuffle-team .stage-team {
background: #336666;
padding: 10px;
color: white;
}
JS:
$(document).ready(function() {
var team = Array('a', 'b', 'c', 'd'),
block_shuffle_team = $('.main .shuffle-team .stage'),
block_team_list = $('.main .team-list'),
count_team = team.length,
count_stage = count_team - 1,
count_match_in_stage = count_team / 2,
id_team = 0,
id_home = 0,
alert_ok = 0,
teams = [],
stage = [];
function losowanie(max, min) {
return Math.floor( Math.random() * ( max - min + 1 ) + min );
}
function shuffle_team() {
for(var i=0; i<count_team; i++) {
block_team_list.append('<p>' + team[i] + '</p>'); // wypisanie nazw drużyn
teams[i] = [i];
}
for(var j=1; j<=count_stage; j++) {
stage[j] = [j];
}
for(var k=1; k<=count_stage; k++) {
for(var i=0; i<count_team; i++) {
alert_ok = 0;
if((i % 2) == 0) { // sprawdzenie czy losujemy id gospodarza czy gościa
do {
id_team = losowanie(count_team - 1, 0); // losowanie
if(stage[k].indexOf(team[id_team]) === -1) { // sprawdzenie czy w danej kolejce znajduje się drużyna
stage[k][i] = team[id_team]; // przypisanie do danej kolejki drużyny
alert_ok = 1;
id_home = id_team;
} else {
alert_ok = 0;
}
} while (alert_ok == 0);
} else { // losowanie gościa
alert_ok = 0;
do {
id_team = losowanie(count_team - 1, 0); // losowanie
if((stage[k].indexOf(team[id_team]) === -1) && (teams[id_home].indexOf(team[id_team]) === -1) ) { // sprawdzenie czy dany zespół został wylosowany w tej kolejce i czy grał już wcześniej z gospodarzem
stage[k][i] = team[id_team];
teams[id_team][k] = team[id_home]; // przypisujemy do gosci przeciwnika
teams[id_home][k] = team[id_team]; // przypisujemy do gospodarzy przeciwnika
alert_ok = 1;
} else {
alert_ok = 0;
}
} while (alert_ok == 0);
} // if
} // for
} // for
for(var i=1; i<=count_stage; i++) {
block_shuffle_team.append('<p class="number-of-stage">' + i + '</p>');
var id = 0;
for(var j=0; j<count_match_in_stage; j++) {
block_shuffle_team.append('<p class="stage-team">' + stage[i][id] + ' : ' + stage[i][id + 1] + '</p>');
id = id + 2;
}
}
} // end function
shuffle_team();
});
Skrypt polega na tym, że losuje cyfrę z podanego przedziału i jest ona numerem id drużyny. Następnie sprawdza czy w danej kolejce (tabeli stage) już nie występuje nazwa wylosowanej drużyny, jeżeli nie to przypisuje do niej daną wartość. Następnie losuje gościa. Najpierw sprawdza tak samo jak poprzednio tabele stage i później sprawdza tabele teams czy nie występuje w niej wartość przeciwnika. Czyli tabele po przejściu skryptu wyglądają tak:
tabela stage:
stage[0]: c,d,a,b
stage[1]: d,b,c,a
stage[2]: b,c,d,a
tabela teams:
teams[0]: 0,c,b,d
teams[1]: 1,d,a,c
teams[2]: 2,a,d,b
teams[3]: 3,b,c,a
Przy większej ilości drużyn tak jak pisałem zwiesza się strona. Prawdopodobnie tutaj się coś nie zgadza, ale nie mogę tego naprawić.
if((stage[k].indexOf(team[id_team]) === -1) && (teams[id_home].indexOf(team[id_team]) === -1) ) { // sprawdzenie czy dany zespół został wylosowany w tej kolejce i czy grał już wcześniej z gospodarzem
stage[k][i] = team[id_team];
teams[id_team][k] = team[id_home]; // przypisujemy do gosci przeciwnika
teams[id_home][k] = team[id_team]; // przypisujemy do gospodarzy przeciwnika
alert_ok = 1;
} else {
alert_ok = 0;
}
Jak macie pomysł jak to naprawić to byłbym wdzięczny, ewentualnie może podsuniecie zupełnie inne podejście do skryptu.
Dopiero się ucze js, więc prosiłbym o wyrozumiałość :)