// On initialise la grille du joueur public void FaireGrille() { MaGrille = new Grille(ID); Console.WriteLine("Création de la grille ..."); MaGrille.Draw(); PlacerMaFlotte(); // A quoi ça sert une grille sans bateaux ? :P }
public Joueur(string _nom, NumJoueur _num) { Nom = _nom; ID = _num; SaGrille = new Grille(NumJoueur.J2); NbTirs = 0; }
// Vérifier que toutes les cases sur lesquelles se trouve le bateau sont disponibles. public bool PeutPlacer(Grille _grille, Flotte _flotte) { bool peutPlacer = true; foreach (var cell in Plage) { if (O == Orientation.Est || O == Orientation.Ouest) { if (!_grille.grille[Y, cell].PeutPlacer()) // Les lignes et les colonnes sont dans l'autre sens dans les tableaux C# (donc Y à la place du X) { peutPlacer = false; break; } } else { if (!_grille.grille[cell, X].PeutPlacer()) { peutPlacer = false; break; } } } if (peutPlacer) { if (O == Orientation.Est || O == Orientation.Ouest) { foreach (var Case in Plage) { _grille.grille[Y, Case].ChangerEtat(EtatCase.Bateau); } } else { foreach (var Case in Plage) { _grille.grille[Case, X].ChangerEtat(EtatCase.Bateau); } } EauInaccessible(_grille); } else { Console.WriteLine("Impossible de placer le bateau. Suppression ..."); } return peutPlacer; }
public bool EstCoule(Grille _grilleAdversaire, Grille _monAffichageDeSaGrille) { bool estCoule = true; // On part du principe que le bateau est coulé. foreach (var cell in Plage) { if (O == Orientation.Est || O == Orientation.Ouest) { if (_grilleAdversaire.grille[Y, cell].Etat == EtatCase.Bateau) // Si on trouve une case dont l'état est bateau, alors le bateau n'est pas coulé. { estCoule = false; break; } } else { if (_grilleAdversaire.grille[cell, X].Etat == EtatCase.Bateau) { estCoule = false; break; } } } if (estCoule) { Coule = true; foreach (var cell in Plage) { if (O == Orientation.Est || O == Orientation.Ouest) { _grilleAdversaire.grille[Y, cell].ChangerEtat(EtatCase.Coulé); _monAffichageDeSaGrille.grille[Y, cell].ChangerEtat(EtatCase.Coulé); } else { _grilleAdversaire.grille[cell, X].ChangerEtat(EtatCase.Coulé); _monAffichageDeSaGrille.grille[cell, X].ChangerEtat(EtatCase.Coulé); } } } return estCoule; }
// Détermine le contour du bateau pour rendre cette zone inaccessible lors du placement des autres bateaux. public void EauInaccessible(Grille _grille) { // Les calculs changent en fonction de l'orientation du bateau. int PosXEauInacDebut, PosXEauInacFin, PosYEauInacDebut, PosYEauInacFin, x, y; if (O == Orientation.Est) { PosXEauInacDebut = X - 1; PosXEauInacFin = X + Taille; PosYEauInacDebut = Y - 1; PosYEauInacFin = Y + 1; y = PosYEauInacDebut; while (y <= PosYEauInacFin) { x = PosXEauInacDebut; while (x <= PosXEauInacFin) { if (_grille.grille[y, x].Etat == EtatCase.Eau) { _grille.grille[y, x].ChangerEtat(EtatCase.EauInaccessible); } x++; } y++; } } else if (O == Orientation.Ouest) { PosXEauInacDebut = X - Taille; PosXEauInacFin = X + 1; PosYEauInacDebut = Y - 1; PosYEauInacFin = Y + 1; y = PosYEauInacDebut; while (y <= PosYEauInacFin) { x = PosXEauInacDebut; while (x <= PosXEauInacFin) { if (_grille.grille[y, x].Etat == EtatCase.Eau) { _grille.grille[y, x].ChangerEtat(EtatCase.EauInaccessible); } x++; } y++; } } else if (O == Orientation.Nord) { PosXEauInacDebut = X - 1; PosXEauInacFin = X + 1; PosYEauInacDebut = Y - Taille; PosYEauInacFin = Y + 1; y = PosYEauInacDebut; while (y <= PosYEauInacFin) { x = PosXEauInacDebut; while (x <= PosXEauInacFin) { if (_grille.grille[y, x].Etat == EtatCase.Eau) { _grille.grille[y, x].ChangerEtat(EtatCase.EauInaccessible); } x++; } y++; } } else // Si orientation == Sud { PosXEauInacDebut = X - 1; PosXEauInacFin = X + 1; PosYEauInacDebut = Y - 1; PosYEauInacFin = Y + Taille; y = PosYEauInacDebut; while (y <= PosYEauInacFin) { x = PosXEauInacDebut; while (x <= PosXEauInacFin) { if (_grille.grille[y, x].Etat == EtatCase.Eau) { _grille.grille[y, x].ChangerEtat(EtatCase.EauInaccessible); } x++; } y++; } } }