Files
calculateurTournoi/table.html

158 lines
6.9 KiB
HTML

<!doctype html>
<html>
<head>
</head>
<body>
<script type="text/javascript" >
playerSet = [ "Pierre Moreau", "Thomas Gauthier", "Antoine Nicolas", "Axel Blanc",
"Clément Garcia", "Maël Mercier", "Alexis Chevalier", "Paul Rousseau", "Théo Leroy", "Victor Robert",
"Louis Richard", "Baptiste Roux", "Sacha Leroy", "Nolan Simon", "Martin Laurent", "Jules Guerin", "Tom Andre",
"Raphaël David", "Romain Perrin", "Léo Blanc", "Valentin Vincent", "Alexandre Mercier", "Paul Gauthier", "Nicolas Roux", "Tom Guerin", "Lucas Thomas",
"Clément Henry", "Clément Bernard", "Maël Morel", "Léo Morin", "Benjamin Perrin", "Clément Robert", "Raphaël Muller", "Simon David",
"Romain Gauthier", "Adrien Mercier", "Clément Lambert", "Robin Clement", "Alexis Bertrand", "Quentin Girard", "Liam Masson", "Adam Robert",
"Clément Gautier", "Samuel Fontaine", "Martin Simon", "Clément Masson", "Benjamin Roussel", "Alexis Boyer", "Alexis Girard", "Clément Fontaine",
"Ethan Laurent", "Evan Vincent", "Enzo Moreau", "Samuel Roussel", "Benjamin Mercier", "Benjamin Roux", "Benjamin Muller", "Liam Durand",
"Romain Gauthier", "Léo Bertrand", "Nolan Perrin", "Arthur David", "Nicolas Boyer", "Robin Roux", "Paul Roux", "Baptiste Perrin",
"Mathis Lambert", "Axel Fontaine", "Simon Martin", "Yanis Perrin", "Benjamin Roussel", "Maxime Fontaine" ];
gameSet= [ "Splendor", "Azul", "King Domino", "7 wonders architect", "akkroplis"];
function Player(name) {
this.name = name;
this.opponents = [];
this.gamesPlayed = [];
}
Player.prototype.availablePlayers = function (players, game) {
result = [];
for (var player of players ) {
if (!this.opponents.includes(player.name) &&
!player.gamesPlayed.includes(game) ) //TODO en fonction du mode
result.push(player);
}
return result;
};
Player.prototype.addOpponents = function (players) {
for (var player of players ) {
if (player.name === this.name) {
continue;
}
//showDebug(this.name + " ajoute oposant "+ player.name);
this.opponents.push(player.name);
}
};
function compute() {
document.getElementById("results").innerHTML="";
players = [];
for (name of playerSet.slice(0,document.getElementById("players").value) ) {
players.push(new Player(name) );
};
games = gameSet.slice(0,document.getElementById("games").value) ;
playerAtTable = document.getElementById("tables").value;
var finished = false;
session=1;
maxgameplayed = Math.floor(players.length / playerAtTable);
show ("Maximum "+ maxgameplayed + " parties joués en même temps<br/>");
var differentOponentMode = players.length >= playerAtTable * games.length ;
if (differentOponentMode ) {
showPass("Tous les joueurs pourront affronter des adversaires différents à chaque table");
}else {
showWarning("Certains joueurs s'affronteront plusieurs fois ");
}
played ={};
for( const player of players ) {
played[player.name]={};
}
while(!finished) {
show("<p><b>Session "+session +"<b><br/>");
var tables=0;
playersAvailableInSession=players.slice();
newTable=1;
while(playersAvailableInSession.length >= playerAtTable
&& tables < maxgameplayed && newTable > 0) {
newTable=0;
for( const game of games ) {
showDebug( "try for "+game+" players disponibles "+playersAvailableInSession.length +" ");
possibleplayers= playersAvailableInSession[0].availablePlayers( playersAvailableInSession, game);
showDebug ("players dispo " +possibleplayers.length + " <br/>" );
//youpi , une table faite
if(possibleplayers.length >= playerAtTable ) {
tablePlayer = possibleplayers.slice(0,playerAtTable) ;
show( "table "+game+" : ");
//showDebug ("tablePlayer : " +JSON.stringify(tablePlayer) ) ;
for( const player of tablePlayer ) {
played[player.name][game] = session;
player.gamesPlayed.push(game);
player.addOpponents(tablePlayer);
show( player.name +", ");
const index = playersAvailableInSession.indexOf(player);
if (index > -1) {
//showDebug("remove "+ player.name + " du pool de session <br/>");
playersAvailableInSession.splice(index, 1); // 2nd parameter means remove one item only
}
}
show( "<br/>");
tables++;
newTable++;
}
if(tables == maxgameplayed) {
break;
}
}
}
show("</p>");
session++;
if (tables == 0) //ameliorer condition d'arret
finished=true;
}
//verification
show("<p><b>Vérification<b><br/>");
for( const player in played) {
var allplayed = Object.keys(played[player]).length == games.length;
if (allplayed) {
showPass(player + " a joué à tous les jeux");
}else {
showWarning( player + " a joué à seulement" + JSON.stringify(played[player]) );
}
}
}
function showPass(text){
show ("<span style='color:green' >"+ text +"</span><br/>");
}
function showWarning(text){
show ("<span style='color:red' >"+ text +"</span><br/>");
}
function showDebug(text){
show ("<span style='color:gray' >"+ text +"</span><br/>");
}
function show(text) {
elem = document.getElementById("results");
elem.insertAdjacentHTML( 'beforeend', text);
}
</script>
<div id="param" style="float:left;width:50%; text-align:center">
Nombres de jouers (nom inventés) <input id="players" name="players" placeholder="nombre de joueurs" type ="text"/><br/>
Nombres de joueurs par tables <input id="tables" name="tables" placeholder="nombre de joueurs par table" type ="text"/><br/>
Nombres de jeux à jouer <input id="games" name="games" placeholder="nombre de jeux" type ="text"/><br>
<button onclick="compute();" > Calculer</button>
</div>
<div id="results" style="float:left;width:50%;">
les sessions de jeu : <br/>
</div>
</body>
</html>