コード例 #1
0
        /// <summary>
        /// Envoie de la réponse aux 2 joueurs
        /// dans le cas d'une victoire d'un des 2 joueurs
        /// </summary>
        /// <param name="reponse"></param>
        private void envoyerReponse(string reponse)
        {
            byte[] dataJ1;
            byte[] dataJ2;

            // Si le joueur1 a gagné on envoie les réponses correspondante
            if (flotteJ1.FlotteEstVivante() && !flotteJ2.FlotteEstVivante())
            {
                dataJ1 = Encoding.ASCII.GetBytes(reponse + " 1");
                dataJ2 = Encoding.ASCII.GetBytes(reponse + " 0");
                Console.WriteLine("Le joueur1 (" + (joueur1.RemoteEndPoint as IPEndPoint).Address.ToString() + ") a gagné la partie");
            }

            // Si le joueur2 a gagné on envoie les réponses correspondante
            else if (flotteJ2.FlotteEstVivante() && !flotteJ1.FlotteEstVivante())
            {
                dataJ1 = Encoding.ASCII.GetBytes(reponse + " 0");
                dataJ2 = Encoding.ASCII.GetBytes(reponse + " 1");
                Console.WriteLine("Le joueur2 (" + (joueur2.RemoteEndPoint as IPEndPoint).Address.ToString() + ") a gagné la partie");
            }

            else
            {
                dataJ1 = Encoding.ASCII.GetBytes(reponse);
                dataJ2 = Encoding.ASCII.GetBytes(reponse);
            }

            // Envoie des l'information
            joueur1.Send(dataJ1);
            joueur2.Send(dataJ2);
        }
コード例 #2
0
        /// <summary>
        /// Fonction principale pour jouer
        /// </summary>
        public void Run()
        {
            try
            {
                if (_nouvellePartie)
                {
                    // Envoie au 2 joueurs que les 2 sont connectés pour pouvoir poursuivre avec le jeux
                    envoyerReponse("Joueur 1 et Joueur 2 connectés", joueur1);
                    envoyerReponse("Joueur 1 et Joueur 2 connectés", joueur2);
                }
                // Recoit la position des bateaux de chaque joueur et l'affecte à une variable globale
                flotteJ1 = recevoirPositionBateaux(joueur1);
                flotteJ2 = recevoirPositionBateaux(joueur2);

                // Envoie de l'ordre de jeu des joueurs ainsi que l'ip de son opposant
                envoyerReponse("1 " + (joueur2.RemoteEndPoint as IPEndPoint).Address, joueur1);
                envoyerReponse("2 " + (joueur1.RemoteEndPoint as IPEndPoint).Address, joueur2);

                // Boucle du jeu
                while (joueur1.Connected && joueur2.Connected && flotteJ1.FlotteEstVivante() && flotteJ2.FlotteEstVivante() && BattleShip_Serveur.Program.SocketEstConnecte(joueur1) && BattleShip_Serveur.Program.SocketEstConnecte(joueur2))
                {
                    envoyerReponse(analyserAttaque(recevoirAttaque(joueur1), flotteJ2.flotte));
                    if (flotteJ2.FlotteEstVivante())
                    {
                        envoyerReponse(analyserAttaque(recevoirAttaque(joueur2), flotteJ1.flotte));
                    }
                }
                if (estNouvellePartie(joueur1))
                {
                    _joueur1NouvellePartie = true;
                }
                if (_joueur1NouvellePartie && estNouvellePartie(joueur2))
                {
                    _nouvellePartie = false;
                    Run();
                }
                else
                {
                    if (!_joueur1NouvellePartie)
                    {
                        envoyerReponse("Joueur 1 s'est déconnecté", joueur2);
                    }
                    else
                    {
                        envoyerReponse("Joueur 2 s'est déconnecté", joueur1);
                    }
                    // lorsque la partie est terminée, on termine la connection
                    Console.WriteLine("Le joueur1 (" + (joueur1.RemoteEndPoint as IPEndPoint).Address.ToString() + ") est déconnecté");
                    joueur1.Close();
                    Console.WriteLine("Le joueur2 (" + (joueur2.RemoteEndPoint as IPEndPoint).Address.ToString() + ") est déconnecté");
                    joueur2.Close();
                }
            }
            catch (SocketException a)
            {
                joueur1.Dispose();
                joueur2.Dispose();
            }
            catch (Exception e)
            {
                // Console.WriteLine(e.Message);
            }
        }