/// <summary> /// Gère le tir sur la matrice et retourne un indicateur de ce qui s'est passé /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public int Tirer(int x, int y) { int retour = 0;//0:raté, 1:déjàtiré, 2:touché, 3:couler char maCase = matrice[x, y]; if (maCase == '-')//tir dans l'eau { retour = 0; matrice[x, y] = 'v'; } else if (maCase == 'v' || maCase == 'X' || maCase == 'O')//tir déjà effectué { retour = 1; } if (maCase == 'H')//tir sur bateau { retour = 2; matrice[x, y] = 'X'; Bateau b = GetBateauByCoords(x, y); b.Vies--; if (b.Vies == 0) { retour = 3; BateauCoulé(b); } } return(retour); }
/// <summary> /// Fonction utilisée en interne pour remplacer les bateaux coulés par le marqueur adapté /// </summary> /// <param name="b"></param> private void BateauCoulé(Bateau b) { if (b.Horizontal) { //alors on le dessine for (uint i = b.Y; i < (b.Y + b.Taille); i++) { matrice[b.X, i] = 'O'; } } else { //alors on le dessine for (uint i = b.X; i < (b.X + b.Taille); i++) { matrice[i, b.Y] = 'O'; } } }
/// <summary> /// Structuration du code : /// Cette fonction gère l'ajout des bateaux dans une carte /// </summary> /// <param name="b"></param> /// <param name="m"></param> public void Setup(Bateau b,Carte m) { bool ValideBoat = false, valideInput = false, exit = false; string input = ""; string[] array; int x = 0, y = 0; do { resetView(); Console.WriteLine(@"Création d'un bateau:"); //coordonnées do { valideInput = false; input = AskUser("Quelles sont les coordonnées de son point haut-Gauche?\n(format: '1-a')"); if (TestCoords(input, m)) { array = input.Split('-', StringSplitOptions.None); Int32.TryParse(array[0], out x); y = ((int)array[1].ToCharArray()[0]) - 96; b.X = ((uint)x)-1; b.Y = ((uint)y)-1; valideInput = true; } if (valideInput == false) { resetView(); Console.WriteLine("Valeur invalide (" + x + "-" + y + "), recommencez."); } } while (!valideInput); //Longueur resetView(); Console.WriteLine(@"Création d'un bateau:"); do { valideInput = false; input = AskUser("Quelle est sa longueur?\n(valeur de 2 à 5)"); int length; if (Int32.TryParse(input, out length)) { if (length > 1 && length < 6) { valideInput = true; b.Vies = b.Taille = length; } } if (valideInput == false) { resetView(); Console.WriteLine("Valeur invalide, recommencez."); } } while (!valideInput); //axe resetView(); Console.WriteLine(@"Création d'un bateau:"); do { valideInput = false; input = AskUser(@"Est-il horizontal?\n(format: o (oui) ou n (non))"); if (input == "o" || input == "n") { valideInput = true; b.Horizontal = (input == "o") ? true : false; } if (valideInput == false) { resetView(); Console.WriteLine("Valeur invalide, recommencez."); } } while (!valideInput); resetView(); Console.WriteLine(@"Création d'un bateau:"); ValideBoat = m.AddBateau(b); if (ValideBoat) exit = true; else { do { valideInput = false; input = AskUser("Le bateau ne peut être inséré au plateau avec ces paramêtres, voulez vous réessayer?\n(format: o(oui) ou n(non))"); if (input == "o" || input == "n") { valideInput = true; exit = (input == "n") ? true : false; if (!exit) Console.WriteLine("\nOn recommence."); } if (valideInput == false) Console.WriteLine(@"Valeur invalide, recommencez."); } while (!valideInput); } } while (!exit); }
/// <summary> /// Essaie d'ajouter le bateau mis en paramêtre. S'il y arrive, retourne Vrai, sinon Faux /// </summary> /// <param name="b"></param> /// <returns></returns> public bool AddBateau(Bateau b) { int matriceTaille = matrice.GetLength(0); if (b.Horizontal) { //Si le bateau ne sors pas de la map if (b.Y < 0 || b.Y + b.Taille - 1 > (matriceTaille - 1)) { return(false); } if (b.X < 0 || b.X > (matriceTaille - 1)) { return(false); } //si son espace n'est pas occupé for (uint i = b.Y; i < (b.Y + b.Taille); i++) { if (matrice[b.X, i] != '-') { return(false); } } //alors on le dessine for (uint i = b.Y; i < (b.Y + b.Taille); i++) { matrice[b.X, i] = 'H'; } } else { //Si le bateau ne sors pas de la map if (b.X < 0 || b.X + b.Taille - 1 > (matriceTaille - 1)) { return(false); } if (b.Y < 0 || b.Y > (matriceTaille - 1)) { return(false); } //si son espace n'est pas occupé for (uint i = b.X; i < (b.X + b.Taille); i++) { if (matrice[i, b.Y] != '-') { return(false); } } //alors on le dessine for (uint i = b.X; i < (b.X + b.Taille); i++) { matrice[i, b.Y] = 'H'; } } bateaux.Add(b); return(true); }