//Méthode qui gère la réception des flottes des joueurs void preparerPartie() { //démarrer le commServeur _comVersClient.Connection(2); ////////////// JOUEUR 1 /////////// //Recevoir flotte String flotteJ1 = _comVersClient.LireMessage(1); System.Console.WriteLine("Flotte 1 recue"); //Interpréter le message contient flotte: reconstruit l'objet _flotte1 = lireFlotte(flotteJ1); System.Console.WriteLine("Flotte 1 traitee"); ////////////// JOUEUR 2 /////////// //Recevoir flotte String flotteJ2 = _comVersClient.LireMessage(2); System.Console.WriteLine("Flotte 2 recue"); //Interpréter le message contient flotte: reconstruit l'objet _flotte2 = lireFlotte(flotteJ2); System.Console.WriteLine("Flotte 2 traitee"); //Définir la première flotte attaquée: //Comme le joueur 1 est attaquant, le joueur 2 est attaqué. _flotteAttaquee = _flotte2; //Donner le signal d'attaquer au premier jouer //Suivi des communications au comServeur... _comVersClient.EnvoyerMessage(_attaquant, "Attaque"); //envoyer "attaque" }
//lorsque le client envoi tous ses bateaux, on recompose l'object flotte avec le String Flotte lireFlotte(String flotte) { Flotte f = new Flotte(); String listeNav = flotte.Split(':')[1]; // ex: Flotte=Premierbateau=Pos1Pos2;EtLesSuivants.... List <String> tabNavires = new List <String>(listeNav.Split(';')); // une ligne Premierbateau=Pos1,Pos2 par élément du tableau tabNavires.RemoveAt(tabNavires.Count - 1); String[] infoNav; //Une seule ligne du genre Premierbateau=Pos1,Pos2 String nomNav; // Premierbateau String lisPosNav; // Pos1,Pos2 int compteNav = 0; foreach (String navire in tabNavires) { infoNav = navire.Split('='); nomNav = infoNav[0]; lisPosNav = infoNav[1]; String[] tabPos = lisPosNav.Split(','); f._flotte[compteNav]._nom = nomNav; int comptePos = 0; foreach (String coord in tabPos) { Pos p = stringToPos(coord); f._flotte[compteNav]._pos[comptePos] = p; f._grille[p._x, p._y] = nomNav; ++comptePos; } ++compteNav; } return(f); }
public MainFrame() { InitializeComponent(); InitTheGrid(DGV_MaGrille); InitTheGrid(DGV_GrilleEnemi); maFlotte = new Flotte(); debutPlacerFlotte(); }
//sert 2 fois au début, pour chaque joueur. void placerFlotteSurGrille(Flotte joueur) { foreach (Navire navire in joueur._flotte) { //identifier ses positions sur la grille foreach (Pos p in navire._pos) { joueur._grille[p._x, p._y] = navire.getNom();// sera append... avec _touche_coule } } }
//Constructeur public Partie() { //Initialisation des attributs //_joueur1 = "Joueur 1"; //_joueur2 = "Joueur 2"; _flotte1 = new Flotte(); _flotte2 = new Flotte(); _partieEstFinie = false; _tourPremierJoueur = true; _comVersClient = new CommunicationServeur("0.0.0.0", 8888); _attaquant = 1; }
//Vérifier si tous les navires sont coulés bool PartieEstTerminee(Flotte flotte) { bool estTerminee = true; for (int n = 0; n < flotte._flotte.Length && estTerminee == true; ++n) { if (flotte._flotte[n]._estCoule == false) { estTerminee = false; } } return(estTerminee); }
//Alterne la flotte attaqué, le numéro du joueur attaquant et le booléen de tour void alternerJoueur() { if (_attaquant == 1) { _attaquant = 2; } else { _attaquant = 1; } _tourPremierJoueur = !_tourPremierJoueur; //changer la flotte attaquee _flotteAttaquee = accesFlotteAttaquee(); }
private void RemplirFlotte() { List <Point> positionsA = new List <Point>(); List <Point> positionsB = new List <Point>(); List <Point> positionsC = new List <Point>(); List <Point> positionsD = new List <Point>(); List <Point> positionsE = new List <Point>(); var nombreTotalCases = DGV_Choix.ColumnCount * DGV_Choix.RowCount; for (int i = 0; i < DGV_Choix.RowCount; i++) { for (int j = 0; j < DGV_Choix.ColumnCount; j++) { switch (DGV_Choix.Rows[i].Cells[j].Value.ToString()) { case "A": positionsA.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex)); break; case "B": positionsB.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex)); break; case "C": positionsC.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex)); break; case "D": positionsD.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex)); break; case "E": positionsE.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex)); break; } } } _bateaux.Add(new Bateau(bateau1, positionsA)); _bateaux.Add(new Bateau(bateau2, positionsB)); _bateaux.Add(new Bateau(bateau3, positionsC)); _bateaux.Add(new Bateau(bateau4, positionsD)); _bateaux.Add(new Bateau(bateau5, positionsE)); flotte = new Flotte(_bateaux); }
Navire trouverNavireAttaque(String nombateau) { Flotte flotte = accesFlotteAttaquee(); int nav = 0; while (flotte._flotte[nav].getNom() != nombateau && nav < flotte._flotte.Length) { ++nav; } if (nav >= flotte._flotte.Length) { //navire non trouvé return(null); } else { return(flotte._flotte[nav]); } }
static void Main(string[] args) { Flotte maFlotte = new Flotte(); maFlotte._flotte[0]._pos[0].setPos(1, 1); maFlotte._flotte[4]._pos[0].setPos(9, 9); Console.WriteLine("Mes navires: "); Console.WriteLine(maFlotte); /* for (int i = 0; i < 5; ++i) * { * Console.WriteLine(maFlotte._flotte[i]); * //Console.WriteLine(maFlotte._flotte[i]._pos[0]); * }*/ Console.ReadKey(); }
/// <summary> /// </summary> /// <param name="joueur"></param> /// <returns></returns> private Flotte recevoirPositionBateaux(Socket joueur) { Flotte flotte = null; byte[] buffer = new byte[joueur.SendBufferSize]; int byteLecture = joueur.Receive(buffer); byte[] byteFormatter = new byte[byteLecture]; for (int i = 0; i < byteLecture; ++i) { byteFormatter[i] = buffer[i]; } // Désérialisation du byte[] en Flotte BinaryFormatter recevoir = new BinaryFormatter(); using (var stream = new MemoryStream(byteFormatter)) { flotte = recevoir.Deserialize(stream) as Flotte; } return(flotte); }
/// <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); } }