Compare commits

..
2 Commits
+84 -26
View File
@@ -1,8 +1,9 @@
<!doctype html>
<html> <html>
<head> <head>
</head> </head>
<body> <body>
<script > <script type="text/javascript" >
playerSet = [ "Pierre Moreau", "Thomas Gauthier", "Antoine Nicolas", "Axel Blanc", playerSet = [ "Pierre Moreau", "Thomas Gauthier", "Antoine Nicolas", "Axel Blanc",
"Clément Garcia", "Maël Mercier", "Alexis Chevalier", "Paul Rousseau", "Théo Leroy", "Victor Robert", "Clément Garcia", "Maël Mercier", "Alexis Chevalier", "Paul Rousseau", "Théo Leroy", "Victor Robert",
@@ -17,47 +18,94 @@
gameSet= [ "Splendor", "Azul", "King Domino", "7 wonders architect", "akkroplis"]; 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() { function compute() {
document.getElementById("results").innerHTML=""; document.getElementById("results").innerHTML="";
players = playerSet.slice(0,document.getElementById("players").value) ; players = [];
for (name of playerSet.slice(0,document.getElementById("players").value) ) {
players.push(new Player(name) );
};
games = gameSet.slice(0,document.getElementById("games").value) ; games = gameSet.slice(0,document.getElementById("games").value) ;
playerAtTable = document.getElementById("tables").value; playerAtTable = document.getElementById("tables").value;
var finished = false; var finished = false;
session=1; session=1;
maxgameplayed = Math.floor(players.length / playerAtTable); maxgameplayed = Math.floor(players.length / playerAtTable);
show ("Maximum "+ maxgameplayed + " parties joués en même temps"); 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 ={}; played ={};
for( const player of players ) { for( const player of players ) {
played[player]={}; played[player.name]={};
} }
while(!finished) { while(!finished) {
show("<p><b>Session "+session +"<b><br/>"); show("<p><b>Session "+session +"<b><br/>");
var tables=0; var tables=0;
playerPlayInSession=[]; playersAvailableInSession=players.slice();
for( const game of games ) { newTable=1;
possibleplayers =[]; while(playersAvailableInSession.length >= playerAtTable
for( const player of players ) { && tables < maxgameplayed && newTable > 0) {
if ( typeof played[player][game] === "undefined" && !playerPlayInSession.includes(player) ) { newTable=0;
possibleplayers.push(player); for( const game of games ) {
} showDebug( "try for "+game+" players disponibles "+playersAvailableInSession.length +" ");
if(possibleplayers.length == playerAtTable) break; //les premiers disponible n'ayant pas joué possibleplayers= playersAvailableInSession[0].availablePlayers( playersAvailableInSession, game);
} showDebug ("players dispo " +possibleplayers.length + " <br/>" );
//youpi , une table faite //youpi , une table faite
if(possibleplayers.length == playerAtTable ) { if(possibleplayers.length >= playerAtTable ) {
for( const player of possibleplayers ) { tablePlayer = possibleplayers.slice(0,playerAtTable) ;
played[player][game] = session; show( "table "+game+" : ");
playerPlayInSession.push(player); //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++;
} }
show( "table "+game+" : " + possibleplayers.join(" , ") +"<br/>");
tables++;
}
if(tables == maxgameplayed) { if(tables == maxgameplayed) {
break; break;
}
} }
} }
show("</p>"); show("</p>");
@@ -73,14 +121,24 @@
for( const player in played) { for( const player in played) {
var allplayed = Object.keys(played[player]).length == games.length; var allplayed = Object.keys(played[player]).length == games.length;
if (allplayed) { if (allplayed) {
show ("<span style='color:green' >"+ player + " a joué à tous les jeux<span>"); showPass(player + " a joué à tous les jeux");
}else { }else {
show ("<span style='color:red' >"+ player + " a joué à seulement" + JSON.stringify(played[player]) +"<span>"); showWarning( player + " a joué à seulement" + JSON.stringify(played[player]) );
} }
show("<br/>");
} }
} }
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) { function show(text) {
elem = document.getElementById("results"); elem = document.getElementById("results");
elem.insertAdjacentHTML( 'beforeend', text); elem.insertAdjacentHTML( 'beforeend', text);