Class: Ile
- Includes:
- Comparable
- Defined in:
- lib/Hashiparmentier/Core/Ile.rb
Overview
- Auteur
-
Brabant Mano
- Version
-
0.1
- Date
-
09/04/2020
Cette classe représente les iles de la grille
Hérite de Case
Constant Summary collapse
- HAUT =
Cette constante représente l’une des directions dans laquelle peut se trouver un voisin
0
- DROITE =
Cette constante représente l’une des directions dans laquelle peut se trouver un voisin
1
- BAS =
Cette constante représente l’une des directions dans laquelle peut se trouver un voisin
2
- GAUCHE =
Cette constante représente l’une des directions dans laquelle peut se trouver un voisin
3
- DIRECTIONS =
Cette constante représente l’ensemble des directions dans laquelle peut se trouver un voisin
[HAUT, DROITE, BAS, GAUCHE]
Instance Attribute Summary collapse
-
#dernier ⇒ Object
Returns the value of attribute dernier.
-
#valeur ⇒ Object
readonly
Returns the value of attribute valeur.
Attributes inherited from Case
Class Method Summary collapse
-
.creer(posX, posY, nbLien, grille) ⇒ Object
- Ce constructeur permet de créer une nouvelle ile param
-
posX La position en abscisse * posY La position en ordonnée * nbLien Le nombre de lien que doit possèder l’ile pour être valide * grille La grille sur laquelle se trouve l’ile.
-
Instance Method Summary collapse
-
#<=>(autre) ⇒ Object
- Cette méthode permet de comparer des iles entre-elles param
- autre L’autre ile à comparer return
-
0 si les iles sont égales * un nombre négatif si la première ile est inférieure à la deuxième * un nombre positif si la première ile est supérieure à la deuxième.
-
-
#afficheInfo ⇒ Object
Cette méthode permet d’afficher les infos utiles de l’ile.
-
#ajouteNombrePont(ile) ⇒ Object
- Cette méthode permet d’ajouter un pont entre cette ile et une autre param
-
ile L’autre ile.
-
-
#aVoisin?(direction) ⇒ Boolean
- Cette méthode permet de savoir si l’ile a un voisin dans une direction param
- direction La direction dans laquelle on cherche le voisin return
-
true Si l’ile a un voisin dans cette direction * false Sinon.
-
-
#aVoisinDisponible?(direction) ⇒ Boolean
- Cette méthode permet de savoir si l’ile a un voisin disponible dans une direction (s’il n’a pas de pont qui les sépares) param
- direction La direction dans laquelle on cherche le voisin return
-
true Si l’ile a un voisin disponible dans cette direction * false Sinon.
-
-
#clickOn ⇒ Object
Cette méthode permet d’appeler clickOnIle de la grille dans laquelle se trouve l’ile.
-
#estDernierIle ⇒ Object
- Cette méthode permet de savoir si cette ile est la dernière ile séléctionné return
-
true Si l’ile est la dernière séléctionné * false Sinon.
-
-
#estIle? ⇒ Boolean
- Cette méthode retourne vrai return
-
true.
-
-
#estValide? ⇒ Boolean
- Cette méthode permet de savoir si l’ile est connécté à autant de pont que son objectif return
-
true Si l’ile est connécté à autant de pont que son objectif * false Sinon.
-
-
#getCapaciteResiduelle ⇒ Object
- Cette méthode permet de savoir combien il reste de pont à connécter pour que l’ile soit valide return
-
Combien il reste de pont à connécter pour que l’ile soit valide.
-
-
#getNombreCheminDisponible ⇒ Object
- Cette méthode permet de savoir le nombre de ponts qui peuvent être connecté à l’ile return
-
Le nombre de ponts qui peuvent être connecté à l’ile.
-
-
#getNombreDirectionConstructible ⇒ Object
- Cette méthode permet de connaitre le nombre de directions dans laquelle on peut ajouter un pont return
-
Le nombre de directions dans laquelle on peut ajouter un pont.
-
-
#getNombreDirectionDisponible ⇒ Object
- Cette méthode permet de connaitre le nombre de direction dans laquelle un voisin est disponible return
-
Le nombre de direction dans laquelle un voisin est disponible.
-
-
#getNombrePont ⇒ Object
- Cette méthode permet de recuperer le nombre de lien actuel return
-
Le nombre de lien actuel.
-
-
#getValeur ⇒ Object
- Cette méthode permet de recuperer le nombre de lien nécéssaire pour être valide return
-
Le nombre de lien nécéssaire pour être valide.
-
-
#getVoisin(direction) ⇒ Object
- Cette méthode permet de connaitre un voisin dans une direction param
- direction La direction dans laquelle on cherche le voisin return
-
Le voisin dans cette direction s’il existe * raiseException Sinon.
-
-
#initialize(posX, posY, nbLien, grille) ⇒ Ile
constructor
:nodoc:.
-
#raz ⇒ Object
Cette méthode permet de remettre à zéro l’ile.
-
#retireNombrePont(ile) ⇒ Object
- Cette méthode permet de retirer un pont entre cette ile et une autre param
-
ile L’autre ile.
-
-
#to_s ⇒ Object
Cette méthode permet d’afficher l’ile dans un terminal.
Methods inherited from Case
Constructor Details
#initialize(posX, posY, nbLien, grille) ⇒ Ile
:nodoc:
54 55 56 57 58 59 60 61 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 54 def initialize(posX, posY, nbLien, grille) super(posX, posY, grille) @valeur = nbLien @nbPont = [0, 0, 0, 0] @dernier = false end |
Instance Attribute Details
#dernier ⇒ Object
Returns the value of attribute dernier.
35 36 37 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 35 def dernier @dernier end |
#valeur ⇒ Object (readonly)
Returns the value of attribute valeur.
32 33 34 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 32 def valeur @valeur end |
Class Method Details
.creer(posX, posY, nbLien, grille) ⇒ Object
Ce constructeur permet de créer une nouvelle ile
- param
-
posX La position en abscisse
-
posY La position en ordonnée
-
nbLien Le nombre de lien que doit possèder l’ile pour être valide
-
grille La grille sur laquelle se trouve l’ile
49 50 51 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 49 def Ile.creer(posX, posY, nbLien, grille) new(posX, posY, nbLien, grille) end |
Instance Method Details
#<=>(autre) ⇒ Object
Cette méthode permet de comparer des iles entre-elles
- param
-
autre L’autre ile à comparer
- return
-
0 si les iles sont égales
-
un nombre négatif si la première ile est inférieure à la deuxième
-
un nombre positif si la première ile est supérieure à la deuxième
220 221 222 223 224 225 226 227 228 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 220 def <=>(autre) return 1 if(!autre.estIle?()) return @valeur <=> autre.valeur if(@valeur != autre.valeur) return @posX <=> autre.posX if(@posX != autre.posX) return @posY <=> autre.posY if(@posY != autre.posY) return 0 end |
#afficheInfo ⇒ Object
Cette méthode permet d’afficher les infos utiles de l’ile
174 175 176 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 174 def afficheInfo() return @valeur, @posX, @posY, getCapaciteResiduelle() end |
#ajouteNombrePont(ile) ⇒ Object
Cette méthode permet d’ajouter un pont entre cette ile et une autre
- param
-
ile L’autre ile
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 84 def ajouteNombrePont(ile) for direction in DIRECTIONS if(aVoisin?(direction)) if(getVoisin(direction) == ile) @nbPont[direction] += 1 @nbPont[direction] %= (Pont::MAX_LIGNE + 1) end end end end |
#aVoisin?(direction) ⇒ Boolean
Cette méthode permet de savoir si l’ile a un voisin dans une direction
- param
-
direction La direction dans laquelle on cherche le voisin
- return
-
true Si l’ile a un voisin dans cette direction
-
false Sinon
263 264 265 266 267 268 269 270 271 272 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 263 def aVoisin?(direction) begin return getVoisin(direction).estIle?() rescue => e #puts e.message() return false end end |
#aVoisinDisponible?(direction) ⇒ Boolean
Cette méthode permet de savoir si l’ile a un voisin disponible dans une direction (s’il n’a pas de pont qui les sépares)
- param
-
direction La direction dans laquelle on cherche le voisin
- return
-
true Si l’ile a un voisin disponible dans cette direction
-
false Sinon
303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 303 def aVoisinDisponible?(direction) begin ile2 = self.getVoisin(direction) return @grille.routeDisponible?(self, ile2) rescue => e #puts e.message() return false end end |
#clickOn ⇒ Object
Cette méthode permet d’appeler clickOnIle de la grille dans laquelle se trouve l’ile
116 117 118 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 116 def clickOn() @grille.clickOnIle(self) end |
#estDernierIle ⇒ Object
Cette méthode permet de savoir si cette ile est la dernière ile séléctionné
- return
-
true Si l’ile est la dernière séléctionné
-
false Sinon
125 126 127 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 125 def estDernierIle() return @dernier end |
#estIle? ⇒ Boolean
Cette méthode retourne vrai
- return
-
true
319 320 321 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 319 def estIle?() return true end |
#estValide? ⇒ Boolean
Cette méthode permet de savoir si l’ile est connécté à autant de pont que son objectif
- return
-
true Si l’ile est connécté à autant de pont que son objectif
-
false Sinon
136 137 138 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 136 def estValide?() return getNombrePont() == getValeur() end |
#getCapaciteResiduelle ⇒ Object
Cette méthode permet de savoir combien il reste de pont à connécter pour que l’ile soit valide
- return
-
Combien il reste de pont à connécter pour que l’ile soit valide
145 146 147 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 145 def getCapaciteResiduelle() return getValeur() - getNombrePont() end |
#getNombreCheminDisponible ⇒ Object
Cette méthode permet de savoir le nombre de ponts qui peuvent être connecté à l’ile
- return
-
Le nombre de ponts qui peuvent être connecté à l’ile
153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 153 def getNombreCheminDisponible() ret = 0 for direction in DIRECTIONS if(aVoisinDisponible?(direction)) voisin = getVoisin(direction) ret += [2 - @grille.valeurPont(voisin, self), voisin.getCapaciteResiduelle()].min() end end return ret end |
#getNombreDirectionConstructible ⇒ Object
Cette méthode permet de connaitre le nombre de directions dans laquelle on peut ajouter un pont
- return
-
Le nombre de directions dans laquelle on peut ajouter un pont
182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 182 def getNombreDirectionConstructible() ret = 0 for direction in DIRECTIONS if(aVoisinDisponible?(direction)) if(@grille.valeurPont(self, getVoisin(direction)) != Pont::MAX_LIGNE && getVoisin(direction).getCapaciteResiduelle > 0) ret += 1 end end end return ret end |
#getNombreDirectionDisponible ⇒ Object
Cette méthode permet de connaitre le nombre de direction dans laquelle un voisin est disponible
- return
-
Le nombre de direction dans laquelle un voisin est disponible
200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 200 def getNombreDirectionDisponible() ret = 0 for direction in DIRECTIONS if(aVoisinDisponible?(direction)) ret += 1 end end return ret end |
#getNombrePont ⇒ Object
Cette méthode permet de recuperer le nombre de lien actuel
- return
-
Le nombre de lien actuel
76 77 78 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 76 def getNombrePont() return @nbPont[HAUT] + @nbPont[DROITE] + @nbPont[BAS] + @nbPont[GAUCHE] end |
#getValeur ⇒ Object
Cette méthode permet de recuperer le nombre de lien nécéssaire pour être valide
- return
-
Le nombre de lien nécéssaire pour être valide
68 69 70 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 68 def getValeur() return @valeur end |
#getVoisin(direction) ⇒ Object
Cette méthode permet de connaitre un voisin dans une direction
- param
-
direction La direction dans laquelle on cherche le voisin
- return
-
Le voisin dans cette direction s’il existe
-
raiseException Sinon
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 237 def getVoisin(direction) indiceX, indiceY = getIncrementDirection(direction) indiceAddX = indiceX indiceAddY = indiceY until(@grille.sortLimite?(@posX + indiceX, @posY + indiceY) || @grille.getCase(@posX + indiceX, @posY + indiceY).estIle?()) indiceX += indiceAddX indiceY += indiceAddY end posX = @posX + indiceX posY = @posY + indiceY if(@grille.sortLimite?(posX, posY)) raise("Cette ile n'a pas de voisins dans cette direction : " + direction.to_s()) else return @grille.getCase(posX, posY) end end |
#raz ⇒ Object
Cette méthode permet de remettre à zéro l’ile
325 326 327 328 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 325 def raz @nbPont = [0, 0, 0, 0] @dernier = false end |
#retireNombrePont(ile) ⇒ Object
Cette méthode permet de retirer un pont entre cette ile et une autre
- param
-
ile L’autre ile
101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 101 def retireNombrePont(ile) for direction in DIRECTIONS if(aVoisin?(direction)) if(getVoisin(direction) == ile) @nbPont[direction] += Pont::MAX_LIGNE @nbPont[direction] %= (Pont::MAX_LIGNE + 1) end end end end |
#to_s ⇒ Object
Cette méthode permet d’afficher l’ile dans un terminal
168 169 170 |
# File 'lib/Hashiparmentier/Core/Ile.rb', line 168 def to_s() return getCapaciteResiduelle().to_s() end |