示例#1
0
        /// <summary>
        /// Melange et envoie un panel de musique à chaque joueur, avec
        /// plus ou moins de chansons par joueur.
        /// </summary>
        public void envoiMusique()
        {
            //On stocke la chanson qui était à trouver pour pouvoir
            chansonPrecedente = gm.getChanson();

            //On remélange les chansons
            gm.melange();
            List <Joueur> listJoueursPartis = new List <Joueur>();

            foreach (Joueur j in listJoueurs)
            {
                //Et on les envoie à tous les joueurs
                try
                {
                    List <String> chansons = gm.listeChansons(j.getNbChoix());
                    envoi(Requete.infoChanson(gm.getUrlChanson()), j.getStream());
                    envoi(Requete.musique(chansons), j.getStream());
                }
                catch
                {
                    //Si le joueur n'est plus en lien avec le serveur, on l'enléve de la liste
                    listJoueursPartis.Add(j);
                }
            }

            foreach (Joueur j in listJoueursPartis)
            {
                listJoueurs.Remove(j);
            }
        }
示例#2
0
 /// <summary>
 /// Ajoute un joueur à la liste et commence une partie si c'est le premier joueur
 /// </summary>
 /// <param name="j">joueur à ajouter</param>
 public void addJoueur(Joueur j)
 {
     listJoueurs.Add(j);
     //Si le serveur était vide et que un premier utilisateur se connecte
     if (listJoueurs.Count == 1)
     {
         //Si c'est le premier joueur, la manche doit être remise à 0
         cptManche   = 0;
         partieFinie = false;
         //on peux lancer la diffusion des chansons
         Thread th = new Thread(runGame);
         th.Start();
     }
     else // Si il y'a des joueurs, on lui envoi les chansons en cours
     {
         if (partieFinie)
         {
             envoiATous(Requete.infoPartieFinie(listJoueurs));
         }
         else
         {
             envoi(Requete.musique(gm.listeChansons(j.getNbChoix())),
                   j.getStream());
             envoi(Requete.infoChanson(gm.getUrlChanson()), j.getStream());
         }
     }
     //Dans tous les cas on initialise les scores
     envoiScores();
 }
示例#3
0
文件: Echange.cs 项目: aubryta/TPGP
 /// <summary>
 /// Traite les requêtes de type information
 /// </summary>
 /// <param name="tabMessage">les éléments de la requête</param>
 private void traiteInfo(String[] tabMessage)
 {
     if (tabMessage[1].Equals("START"))
     {
         //Le joueur est pret il peut donc jouer
         //On lui envoie le nombre de réponse à afficher
         send(Requete.options(joueur.getNbChoix()), joueur.getStream());
         //On l'ajoute à la partie
         serv.getPartie(joueur.getStyle()).addJoueur(joueur);
         partie = serv.getPartie(joueur.getStyle());
     }
     else if (tabMessage[1].Equals("STYLE"))
     {
         joueur.setStyle(tabMessage[2]);
     }
     else if (tabMessage[1].Equals("DIFFICULTE"))
     {
         joueur.setDifficulte(tabMessage[2]);
     }
     else if (tabMessage[1].Equals("NAME"))
     {
         if (serv.existePseudo(tabMessage[2]))
         {
             send(Requete.infoPseudoIncorrect(), joueur.getStream());
         }
         else
         {
             joueur.setName(tabMessage[2]);
         }
     }
 }
示例#4
0
文件: Echange.cs 项目: aubryta/TPGP
 /// <summary>
 /// Traite les requêtes de choix de réponse du client
 /// </summary>
 /// <param name="tabMessage">les éléments de la requête</param>
 private void traiteChanson(String[] tabMessage)
 {
     if (tabMessage[1].Equals(partie.getChanson().Replace('_', ' ').Split('.').ElementAt(0)))
     {
         send(Requete.infoBonneChanson(partie.getChanson()), joueur.getStream());
         joueur.incrScore();
     }
     else //mauvaise chanson
     {
         send(Requete.infoMauvaiseChanson(partie.getChanson()), joueur.getStream());
     }
     //On envoie les socres à tout le monde dès qu'il y'a un changement
     partie.envoiScores();
 }
示例#5
0
文件: Echange.cs 项目: aubryta/TPGP
 /// <summary>
 /// Toutes les requêtes reçues par le serveur sont traitées ici
 /// On les parse en fonction de la norme choisie
 /// </summary>
 /// <param name="message">Requête reçu</param>
 private void traite(String message)
 {
     Console.WriteLine("Recoit : " + message);
     String[] tabMessage = message.Split('?');
     if (tabMessage[0].Equals(""))
     {
         send(Requete.erreur("Message mal forme"), joueur.getStream());
     }
     else
     {
         if (tabMessage[0].Equals("CHANSON"))
         {
             traiteChanson(tabMessage);
         }
         else if (tabMessage[0].Equals("INFO"))
         {
             traiteInfo(tabMessage);
         }
         else if (tabMessage[0].Equals("CHOIXSTYLE"))
         {
             GestionMusique gm         = serv.getGM();
             List <String>  listeStyle = gm.choixStyle();
             if (listeStyle == null)
             {
                 send(Requete.erreur("Pas de style de musique defini"), joueur.getStream());
             }
             else
             {
                 send(Requete.choixStyle(listeStyle), joueur.getStream());
             }
         }
         else if (tabMessage[0].Equals("DECONNEXION"))
         {
             Console.WriteLine("Le joueur " + joueur.getName() + " est retiré du serveur");
             if (partie != null) //Si le joueur n'a pas encore été ajouté à une partie
             {
                 partie.removeJoueur(joueur);
             }
         }
         else if (tabMessage[0].Equals("BESTSCORE"))
         {
             //Si on a mis un style en paramètre
             send(Requete.bestScores(serv), joueur.getStream());
         }
     }
 }
示例#6
0
 /// <summary>
 /// A la fin d'une partie, affiche pendant 5 secondes les scores et réinitialise tout
 /// </summary>
 public void finDePartie()
 {
     chansonPrecedente = gm.getChanson();
     envoiATous(Requete.finDePartie());
     partieFinie = true;
     //On attend de recevoir tous les scores
     Thread.Sleep(5000);
     //On envoi le récapitulatif des scores
     envoiATous(Requete.infoPartieFinie(listJoueurs));
     //On écrit éventuellement les meilleurs scores dans le fichier xml correspondant
     ecritScore();
     resetScores();
     Thread.Sleep(7500);
     //Après avoir attendu 7.5 secondes, on recommence une partie
     cptManche   = 0;
     partieFinie = false;
     envoiATous(Requete.nouvellePartie());
     envoiScores();
     runGame();
 }
示例#7
0
 /// <summary>
 /// Envoi à tous les joueurs, tous les scores
 /// </summary>
 public void envoiScores()
 {
     envoiATous(Requete.infoScores(listJoueurs));
 }