Se connecter / S'enregistrer
Votre question

[PHP] Générer un mélange

Tags :
  • Serveur
  • Programmation
Dernière réponse : dans Programmation
14 Mai 2009 12:44:30

Bonjour,

je suis actuellement en train de coder un portail de gestion de tournois Counter-Strike pour un ami.
J'ai dans ma base de données, concernant les équipes, l'information si oui ou non elle possède un serveur pour jouer.

Une fois le nombre maximal d'équipes inscrites, le tournoi se lance et j'aimerais générer des rencontres aléatoires entre les équipes, tout en respectant une contrainte : faire jouer ceux qui n'ont pas de serveurs contre ceux qui en ont un. (Pour info, s'il y a 16 équipes, il n'y aura pas plus de 8 équipes sans serveurs, ce qui parait logique).

Donc, si quelqu'un sait comment je dois procéder.. Car je n'en ai aucune idée.

Voila, j'espère m'être bien exprimé, je vous remercie d'avance !
Bye :) 

Autres pages sur : php generer melange

14 Mai 2009 15:18:50

Je ne sais pas à quoi ressemble ta base de donnée mais en partant du principe que tu possèdes une avec l'ensemble des équipes et un paramètre booléen spécifiant si oui ou non l'équipe à un serveur. Tu peux faire qqchose ressemblant à :

1 requête qui va récupérer dans le désordre ceux qui ont un serveur :
  1. SELECT nom FROM equipe WHERE serveur=1 ORDER BY RAND()


1 requête qui va récupérer dans le désordre ceux qui n'ont pas de serveur :
  1. SELECT nom FROM equipe WHERE serveur=0 ORDER BY RAND()


Tu n'as plus qu'à faire une correspondance. Cela marche bien si tu sais que tu as 8 équipes de chaque genre.

Par contre tout se complique au fil des tours pour que ne pas avoir 2 fois le même match. Et là on est dans un vrai prob de math :)  Donc il faut que tu mémorises quel match on déjà eux lieu et refaire un tirage si ça ne te va pas. C'est une solution qui fonctionne par erreur, et est assez lente.

Sinon, tu prends un modèle simple et tu te base sur le premier tirage et tu fais tourner ... c'est le plus simple mais c'est prévisible.
14 Mai 2009 15:43:32

Merci pour ta réponse, cela fonctionne très bien pour effectivement récupérer les équipes avec/sans serveurs dans le désordre, cependant j'ai toujours un petit (gros) souci.

Pour simplifier, on va dire qu'il y a 4 équipes en jeu. J'aimerais avoir dans $var1 et $var2 le nom des 2 équipes ayant un serveur puis dans $var3 et $var4 le nom des 2 autres, tout en me laissant la possibilité d'avoir 3 équipes serv ON et 1 OFF, ou bien même 4 équipes serv ON..

Je n'arrive pas à trouver comment procéder.
Ici j'ai mon code pour afficher simplement les équipes ayant un serv :
  1. $sql = 'SELECT * FROM team WHERE serv="ON" ORDER BY RAND()';
  2. $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  3. while ($data = mysql_fetch_object($req)) {
  4. echo '<br>'.$data->team;
  5. }

J'ai essayé en incrémentant une variable $i après le $var (pour que ça me donne par exemple $var1, $var2..), mais cela ne fonctionne pas :( 

EDIT : J'ai trouvé la solution =)

Il me suffisait en fait de mettre tout dans la même variable avec des séparateurs et un système d'Array. Voila voila !

  1. while ($data = mysql_fetch_object($req)) {
  2. echo '<br>'.$data->team;
  3. $toff = $toff.'[-SEP-]'.$data->team;
  4. }
  5. $toff_aff = explode('[-SEP-]', $toff);
  6. if ($nboff[0] == "1") { echo $toff_aff[1]; }

Merci pour l'aide en tout cas :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS