示例#1
0
 public void doWork()
 {
     //fait une connexion a la BD et l'ouvre
     acces = new AccesBD();
     acces.Connection();
     acces.Open();
     //tant que le joueur ne veut pas se déconnecter
     while (!Deconnection)
     {
         //si ce n'est pas la partie
         if (!partieCommencer)
         {
             //on recois le message et on le traite
             string   message = recevoirResultat(Moi.sckJoueur);
             string[] data    = message.Split(new char[] { ',' });
             TraiterMessageAvantPartie(data);
         }
         else
         {
             //si ce n'est pas le début
             if (Debut)
             {
                 AvantMatch();
             }
             //si c'est mon tour
             if (Moi.Depart)
             {
                 //on ferme le thread qui vérifie si je veut partir si il est ouvert
                 if (t != null && t.IsAlive)
                 {
                     t.Abort();
                 }
                 //on fait notre tour
                 Tour();
             }
             else
             {
                 //je crée un thread pour vérifier si l'ennemis envoye un message pour quitter le jeu
                 if (t == null || !t.IsAlive)
                 {
                     t = new Thread(ReceiveMessage.doWork);
                     t.Start();
                 }
                 else
                 {
                     //s'il recois quelquechose alors on le traite
                     if (ReceiveMessage.message != "")
                     {
                         traiterMessagePartie(ReceiveMessage.message.Split(new char[] { '.' }));
                         ReceiveMessage.message = "";
                     }
                 }
                 //on vérifie toujours s'il a perdu
                 verifiervictoireEnnemis();
             }
         }
     }
 }
示例#2
0
        //traite les messages avant la partie
        private void TraiterMessageAvantPartie(string[] data)
        {
            switch (data.Length)
            {
            case 2:
                //affiche notre profil
                if (data[0] == "afficher profil")
                {
                    sendProfil(data[1]);
                }
                //affiche le profil d'un autre joueur
                else if (data[0] == "afficher profil Joueur")
                {
                    sendProfil(data[1]);
                }
                //si le joueur est présent dans la BD
                else if (estPresent(data))
                {
                    Moi.nom = data[0];
                    Console.WriteLine("Joueur connecté:" + Moi.nom + " , " + Moi.sckJoueur.RemoteEndPoint.ToString() + " , " + posClient);
                }
                break;

            case 4:
                //si le joueur n'est pas présent de la BD
                if (peutEtreAjouter(data))
                {
                    Moi.nom = data[0];
                    ajouterBasicDeck(Moi.nom);
                    Console.WriteLine("Joueur connecté:" + Moi.nom + "," + Moi.sckJoueur.RemoteEndPoint.ToString());
                }
                break;
            }
            switch (data[0])
            {
            //le joueur veut se deconnecter
            case "deconnection":
                Deconnection = true;
                Serveur.tabJoueur[posClient] = null;
                Moi = null;
                break;

            case "recevoir Deck":
                sendDeck(Moi.nom);
                break;

            case "trouver partie":
                //on recois le nom du deck
                NomDeck = data[1];
                int numDeck = acces.getNoDeck(NomDeck);
                if (numDeck != -1)
                {
                    //on ferme et ouvre la connexion,car il se peut que la conn manque de ressource et ne renvoie pas toute les cartes
                    Serveur.mutPartie1.WaitOne();
                    acces.close();
                    acces.Open();
                    //on recoisla liste de carte et on le transforme en deck
                    Carte[] CarteJoueur = acces.ListerDeckJoueur(Moi.nom, numDeck);
                    if (CarteJoueur != null && CarteJoueur.Length == 40)
                    {
                        monDeck = new Deck(CarteJoueur);
                    }
                    Serveur.mutPartie1.ReleaseMutex();
                }
                if (startGame(posClient))
                {
                    partieCommencer = true;
                }
                break;

            case "RetourMenu":
                //revenir au menu de connexion
                Moi.nom = "Joueur";
                break;
            }
        }