/// <summary> /// Modifie la vie du bateau passé en paramètre associé au joueur passé en paramètres /// </summary> /// <param name="joueur">Joueur dont on doit modifier un bateau</param> /// <param name="type">Type de bateau dont on doit modifier la vie </param> /// <param name="x">Position x à la quelle le bateau a été touché</param> /// <param name="y">Position y à laquelle le bateau a été touché</param> /// <returns>Vrai si le bateau est coulé, Faux sinon</returns> public static bool ToucherBateau(int joueur, Bateau.TYPES type, int x, int y) { int[,] positionbateau = Bateau.ObtenirPositionBateauxJoueur(joueur); int[] vieBateaux = Bateau.ObtenirVieBateauxJoueur(joueur); int[,] grille = Grille.ObtenirGrilleJoueur(joueur); grille[x, y] = (int)Grille.Cases.TOUCHE; int[,] decouverte = Grille.ObtenirGrilleDecouverteJoueur(Joueur.ObtenirAutreJoueur(joueur)); decouverte[x, y] = (int)Grille.Cases.TOUCHE; vieBateaux[(int)type] = vieBateaux[(int)type] - 1; //vieBateaux[(int)type] = 0; if (vieBateaux[(int)type] <= 0) { // On marque la bateau comme coulé sur la grille for (int o = 0; o < Bateau.LongueurBateaux[(int)type]; o++) { if (Bateau.ObtenirAlignementBateau(joueur, type) == ALIGNEMENT.COLONNE) { grille[positionbateau[(int)type, 0], positionbateau[(int)type, 1] + o] = (int)Grille.Cases.COULE; decouverte[positionbateau[(int)type, 0], positionbateau[(int)type, 1] + o] = (int)Grille.Cases.COULE; } else { grille[positionbateau[(int)type, 0] + o, positionbateau[(int)type, 1]] = (int)Grille.Cases.COULE; decouverte[positionbateau[(int)type, 0] + o, positionbateau[(int)type, 1]] = (int)Grille.Cases.COULE; } } return(true); } return(false); }
/// <summary> /// Paramètre les positions du bateau passé en paramètre dans la liste des positions de bateau /// </summary> /// <param name="joueur">Joueur associé au bateau à placer</param> /// <param name="type">Type de bateau à placer</param> /// <param name="x">Position x du premier point de la droite associée au bateau à placer</param> /// <param name="y">Position y du premier point de la droite associée au bateau à placer</param> /// <param name="alignement">Alignement du bateau à placer</param> public static void PlacerBateau(int joueur, Bateau.TYPES type, int x, int y, Bateau.ALIGNEMENT alignement) { int[,] positionBateaux = Bateau.ObtenirPositionBateauxJoueur(joueur); int[] vieBateaux = Bateau.ObtenirVieBateauxJoueur(joueur); int x1; int y1; if (alignement == ALIGNEMENT.LIGNE) { x1 = x + Bateau.LongueurBateaux[(int)type] - 1; y1 = y; } else { y1 = y + Bateau.LongueurBateaux[(int)type] - 1; x1 = x; } if (x < 0 || y < 0 || x1 >= Grille.LargeurGrille || y1 >= Grille.LargeurGrille) { throw new Exception("Impossible de placer le bateau. Il se trouve en dehors de la grille."); } vieBateaux[(int)type] = Bateau.LongueurBateaux[(int)type]; positionBateaux[(int)type, 0] = x; positionBateaux[(int)type, 1] = y; positionBateaux[(int)type, 2] = x1; positionBateaux[(int)type, 3] = y1; Grille.mettreaJourGrilleUnBateau(Grille.ObtenirGrilleJoueur(joueur), x, y, x1, y1); }
/// <summary> /// Retourne l'alignement du bateau de type type du joueur joueur /// </summary> /// <param name="joueur">Joueur dont on doit retourner l'alignement d'un bateau</param> /// <param name="type">Type de bateau dont on doit retourner l'alignement</param> /// <returns>L'alignement du bateau</returns> public static ALIGNEMENT ObtenirAlignementBateau(int joueur, Bateau.TYPES type) { int[,] positionbateaux = Bateau.ObtenirPositionBateauxJoueur(joueur); if (positionbateaux[(int)type, 0] == positionbateaux[(int)type, 2]) { return(ALIGNEMENT.COLONNE); } else { return(ALIGNEMENT.LIGNE); } }
/// <summary> /// Détermine si les positions passées en paramètres sont libres ou occupées par un bateau /// </summary> /// <param name="joueur">Joueur dont on doit tester les bateaux</param> /// <param name="x1">Position x du premier point de la droite à tester</param> /// <param name="y1">Position y du premier point de la droite à tester</param> /// <param name="x2">Position x du deuxième point de la droite à tester</param> /// <param name="y2">Position y du deuxième point de la droite à tester</param> /// <param name="type">Type de bateau associé aux points à tester</param> /// <returns>Vrai si position libre, Faux si position occupée</returns> public static bool VerifierColisionBateaux(int joueur, int x1, int y1, int x2, int y2, Bateau.TYPES type) { int[,] grille = Grille.ObtenirGrilleJoueur(joueur); for (int o = 0; o < Bateau.LongueurBateaux[(int)type]; o++) { // Si le bateau est aligné en colonne if (x1 == x2) { if (grille[x1, y1 + o] != (int)Grille.Cases.VIDE) { return(false); } } else //sinon le bateau est aligné en ligne { if (grille[x1 + o, y1] != (int)Grille.Cases.VIDE) { return(false); } } } return(true); }