/// <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); }
/// <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); } }